Каким масштабам соотношения соответствуют уровни масштабирования Карт Google?


83

Может ли кто-нибудь предоставить мне ссылку (или некоторые подробности) о фактическом отношении к показателям «уровня масштабирования» для Карт Google?

например, Google Maps Level 13 = 1: 20000


1
Основываясь на первой информации, которую я сделал эту функцию, возможно, кто-то может использовать ее! function setZoomLevel (meter) {//console.log ( Zoom level set meters: ${meters}); var zoomfactor = 1; if (метров <1128) {zoomfactor = 15; } else if ((метров> 1128) && (метров <2256)) {zoomfactor = 14; } else if ((метров> 2256) && (метров <4513)) {zoomfactor = 13; } else if ((метров> 4513) && (метров <9027)) {zoomfactor = 12; } else if ((метров> 9027) && (метров <18055)) {zoomfactor = 11; } else if ((метров> 18055) && (метров <36111)) {zoomfactor = 10; } else if ((метров> 36111) && (метров <72
Friis1978

Ответы:


79

Если вы проектируете карту, которую планируете наложить на карты Google или виртуальную Землю, и создаете схему листов, то я думаю, что вам нужны шкалы для каждого уровня масштабирования, используйте их:

20 : 1128.497220
19 : 2256.994440
18 : 4513.988880
17 : 9027.977761
16 : 18055.955520
15 : 36111.911040
14 : 72223.822090
13 : 144447.644200
12 : 288895.288400
11 : 577790.576700
10 : 1155581.153000
9  : 2311162.307000
8  : 4622324.614000
7  : 9244649.227000
6  : 18489298.450000
5  : 36978596.910000
4  : 73957193.820000
3  : 147914387.600000
2  : 295828775.300000
1  : 591657550.500000

Источник: http://webhelp.esri.com/arcgisserver/9.3/java/index.htm#designing_overlay_gm_mve.htm


2
@capdragon Спасибо. Это хорошо известный источник (ESRI), но он заставляет нас задуматься о том, как они пришли к этим шкалам.
whuber

4
Рационально критично для кого? Я не вижу никакого упоминания о рациональном в этом вопросе. Я считаю, что он хочет получить прямой ответ на свой прямой вопрос.
CaptDragon

4
@cap Без причины трудно или невозможно отличить правильный ответ от неправильного. Без причины остается только полагаться на авторитет ответчика. Я вполне уверен, что причина, по которой другие ответы в этой теме получают голосование, а ваша не имеет ничего общего с правильностью или прямолинейностью - ваша - самая авторитетная и прямолинейная из всей группы - скорее, у нее есть все, чтобы делать с аргументами, предоставленными другими. Кстати, я не проголосовал против твоего.
whuber

3
Спасибо: +1. Вы, ребята, вероятно, географы или гуру дистанционного зондирования. Я всего лишь разработчик ГИС, который хочет помочь парню достичь его ответа. Мой коллега (тип доктора философии, магистр двойного Массачусетского технологического института) читает часовую лекцию каждый раз, когда я задаю ему простой вопрос, и теряю меня по пути. Я больше не задаю ему вопросы (у меня есть мастера в области науки). Я понимаю, что другим людям нравится проникать в суть рационального и т. Д., Но многие из нас слишком невежественны, чтобы понимать, о чем они говорят. ИМХО они путали ответы, которые не отвечают на его вопрос.
CaptDragon

10
Шкалы были выбраны таким образом, чтобы их можно было равномерно разделить на растровые плитки, которые находятся в основании 2 (например, 128, 512 ...). Bing делает это так же, как msdn.microsoft.com/en-us/library/bb259689.aspx
Гаррет Холл,

45

Я нашел этот ответ, написанный сотрудником Google, который, вероятно, будет наиболее точным:

Это не будет точным, потому что разрешение карты с проекцией меркатора (например, карты Google) зависит от широты.

Можно рассчитать по этой формуле:

metersPerPx = 156543.03392 * Math.cos(latLng.lat() * Math.PI / 180) / Math.pow(2, zoom)

Это основано на предположении, что радиус Земли равен 6378137м. Какую ценность мы используем :)

взяты из: https://groups.google.com/forum/#!topic/google-maps-js-api-v3/hDRO4oHVSeM

Кстати, я предполагаю, что:

'latLng.lat()' = map.getCenter.lat()
'zoom' = map.getZoom()

Чему равна ваша формула? Делая это для lat = 2.92 и zoom 13, я получил 19.08. Что такое 19.08 что?
Родриго

4
@Rodrigo метров на пиксель
Джастин Poehnelt

3
Я могу засвидетельствовать, что этот ответ все еще правильный и очень точный три года спустя. Это должен быть принятый ответ.
Джон

Это относится только к x или также к y ? Использует ли Google Maps через Javascript API одинаковый масштаб для обеих осей?
Старый Гизер

@OldGeezer Да, это работает во всех направлениях. Линейное искажение в любой точке Меркатора одинаково во всех направлениях. Это одна из причин, по которой он используется для скользких карт. При увеличении масштаба вы получаете карту с довольно низким уровнем искажений. как только вы компенсируете масштаб, что и делает этот ответ.
smithkm

30

Чтобы помочь вам понять математику (не точный расчет, это просто для иллюстрации):

  • Плитка веб-карты Google имеет 256 пикселей ширины
  • скажем, ваш монитор компьютера имеет 100 пикселей на дюйм (PPI). Это означает, что 256 пикселей имеют длину около 6,5 см. И это 0,065 м .

  • на уровне масштабирования 0 все 360 градусов долготы видны в одной плитке . Вы не можете наблюдать это в Картах Google, так как он автоматически перемещается на уровень масштабирования 1, но вы можете видеть это на карте OpenStreetMap (он использует ту же схему листов).

  • 360 градусов на экваторе равны окружности Земли, 40 075,16 км, что составляет 40075160 м.

  • разделите 40075160 м на 0,065 м, и вы получите 616313361 , который является шкалой уровня масштабирования 0 на экваторе для монитора компьютера с 100 DPI

  • так что дело в том, что масштаб зависит от PPI ​​вашего монитора и от широты (из-за проекции Меркатора)
  • для уровня масштабирования 1 масштаб равен половине уровня масштабирования 0
  • ...
  • для уровня масштабирования N масштаб равен половине уровня масштабирования N-1

Также проверьте: http://wiki.openstreetmap.org/wiki/FAQ#What_is_the_map_scale_for_a_particular_zoom_level_of_the_map.3F


3
Масштаб фактически зависит от DPI сгенерированных изображений карты. Двумя наиболее часто используемыми разрешениями являются 96DPI (это и есть плитки Google) и 72DPI.
Sasa Ivetic

Для 96DPI шкала соответствует 591657550.500000уровню 0 в соответствии с этим ответом. Но в соответствии с @CaptDragon это уровень 1. Я должен рассмотреть вопрос о том, чтобы начать с уровня 1 для расчета с помощью Google Maps?
Дуглас Нассиф Рома Младший

17

Не так просто. Учитывая проекцию, размер пикселей мозаичного изображения зависит от широты области, которая вас интересует. Затем с точки зрения преобразования размера пикселя мозаичного изображения в размер пикселя экрана, это зависит от экрана и разрешения, при котором отображаются данные, точек на дюйм ваш экран использует.


2
Это верно, сферический меркатор (проекция Google) не сохраняет одинаковый масштаб при удалении от экватора. Для некоторой превосходной ссылки: статья Mapnik 's Scale and Scale denominators: trac.mapnik.org/wiki/ScaleAndPpi, а также FAQ OSM: wiki.openstreetmap.org/wiki/…
выходной

12

Прямой авторитетный правильный ответ:

591657550.500000 / 2^(level-1)

это дает вам таблицу выше, ввод уровня масштабирования.

Попробуйте вживую на jsfiddle.net

Поскольку вопрос касается только Google MAPS, а не EARTH, OP не заботится о трехмерной геометрии. Карты Google УЖЕ выровнены, поэтому 1 пиксель всегда на одном и том же расстоянии (в градусах, что относится к карте Google), здесь и в экваторе, как на полюсах.

Кстати, вы поняли, что где-то внутри первого ряда пикселей карты мира масштаб составляет 1: 1?


5
Что представляет собой номер 591657550.500000?
Джастин Дирринг

2
@ Серджио, почему не просто 591657550.5?
Бировский

2
«Это число определяется разрешением плитки, кратным 256 пикселям, и разрешением экрана (96 точек на дюйм)» gis.stackexchange.com/a/111589/92997
juffel

Не работает - это зависит от Локатора, а ваша формула нет
Евгений Воробей

9

Такая таблица есть в документации по системе листов Virtal Earth от Microsoft . Но, как сказал GuillaumeC, значения зависят от широты и разрешения экрана. В таблице приведены значения, измеренные на экваторе и с разрешением экрана 96 точек на дюйм.

PS: Не уверен в этом, но уровни масштабирования от Microsoft могут быть смещены на 1 по сравнению с уровнями масштабирования от Google. Но они определенно используют одну и ту же проекцию, поэтому значения остаются правильными для Google.


7

Радиус @ Экватор 6 378 137 метра (WGS-84)

Oкружность экватора = 40 075 017 метров (2πr)

Уровень масштабирования 24 использует от 2 до 32 мощных (4 294 967 296) пикселей по окружности.

Экваториальная окружность / 2 32 = .009330692 метра на пиксель

Единица на Широте = (Косинус Широты) X (Единица на Экваторе)

Уровень масштабирования удваивается каждый шаг.

1 фут (международный) = 0,3048 метра

редактировать

Ну, это не совсем законный вопрос для начала. Коэффициенты масштабирования относятся к печатным документам, а не к экранам компьютеров. Вам нужно, чтобы эти изображения использовались с любой точностью, чтобы знать размер каждого пикселя, а затем масштабировать изображение в соответствии с вашим наложением.

Итак, еще 15-20 лет назад кто-то взял WGS-84 в качестве базы данных. (обратите внимание, что в предыдущем посте кто-то использовал значение 40 075 160) Я видел это в Википедии в нескольких местах, и это неверно. Правильное значение - 40 075 017

Затем они взяли это и разделили на целое 32-битное целое число. Это логичный выбор, поскольку он дает глобальную точность примерно до одного сантиметра, что достаточно для аэрофотоснимков. 32-разрядные целые числа также эффективны для хранения и обработки.

Почему был выбран 24-й уровень, я не знаю, так как кто-то еще здесь сработал, 0 дает вам одну плитку 256 пикселей для Земли.

Теперь для примера того, как использовать вышеупомянутые данные. Допустим, у меня есть изображение с уровнем масштабирования 20 (настолько увеличенное, насколько позволяют в настоящее время). Возьмите 0,009330692 (масштаб 24 на экваторе), удвоите его для увеличения 23, снова для увеличения 22, снова для увеличения 21 и в последний раз для увеличения 20 Теперь у вас должно быть 0.149231071.

Теперь предположим, что наше изображение находится на широте 45. Возьмите его косинус (0,707106781) и умножьте его на наш 0,149231071, и он даст вам 0,105564729 метров. Это длина и высота одного пикселя изображения на широте 45 при уровне масштабирования 20. Если вы снимаете с экрана изображение этой области размером 1000 x 1000 пикселей, его размер составляет 105,56 квадратных метра. Если вы хотите, чтобы ноги разделили это 0,3048

Что касается источников, то я, по сути, 5 лет назад обратил внимание на различную информацию и документацию, которые я нашел в Интернете, включая сайты поддержки картографов Google и MS.

Я использовал эту сотню времени и наложил ее на данные полевых исследований, и это всегда было правильно. Сравните это с любыми таблицами, размещенными здесь, и числа будут совпадать.


2
Я не уверен, как это отвечает на вопрос.
Девдатта Тенгше

Я согласен с @Devdatta, не могли бы вы предоставить источник и некоторый контекст.
Аарон

Не уверен, были ли эти комментарии до или после редактирования, но я использовал этот ответ, и он отлично работает
bjnortier

4

Просто сделал несколько расчетов и получил следующие результаты:

На Картах Google показана линейка длиной 1 км (слева внизу от карты), длина которой составляет 90 пикселей при уровне масштабирования 13. Это означает следующее:

Предполагая, что разрешение экрана составляет 96 точек на дюйм или 36 точек на дюйм, при уровне масштабирования 13 мы имеем 0,4 км (от 36/90) на 1 см, что дает масштаб карты 1: 40000 для экрана с разрешением 96 точек на дюйм.

Для различных операций на экране лучше всего взять 90px за основу, так как все числа будут округлены при всех уровнях масштабирования, т.е.

  • Уровень 12: 2 км в 90px
  • Уровень масштабирования 11: 4 км в 90px
  • Уровень увеличения 10: 8 км в 90px

и так далее.

Обратите внимание, что это приближение, которое должно работать более или менее хорошо на меньших масштабах, а не на больших.

(И Google любит круглые числа в конце ...)


1
Если вы внимательно посмотрите, вы обнаружите, что длина линии меняется в зависимости от широты области, которую вы просматриваете.
rcoup

1
Это действительно только на определенной широте, как упоминалось @rcoup. Меняется не только длина шкалы, но и расстояние, которое она представляет. Чтобы продолжить этот пример при увеличении 13, расстояние, представленное шкалой, составляет 2 км на северном мысе (широта 71 °), 1 км на широте 45 ° и 500 м на экваторе.
Франсуа

3

Основываясь на всей предоставленной информации, я построил функцию, которая дает лучший z, примененный к карте, когда вы хотите иметь горизонтальную линию, которая представляет N% отображаемой Карты.

Отображаемая карта характеризуется собственной шириной в пикселях.

function calculateZoom(WidthPixel,Ratio,Lat,Length){
    // from a segment Length (km), 
    // with size ratio of the segment expected on a map (70%),
    // with a map WidthPixel width in pixels (100px),
    // and a latitude (45°) we can get the best Zoom
    // assume earth is a perfect ball with radius : 6,378,137m and
    //      circumference at the equator = 40,075,016.7 m
    // The full world on google map is available in tiles of 256 px; 
    // it has a ratio of 156543.03392 (px/m).
    // For Z = 0; 
    // pixel scale at the Lat_level is ( 156543,03392 * cos ( PI * (Lat/180) ))
    // The map scale increases at the rate of square root of Z.
    //
    Length = Length *1000;                     //Length is in Km
    var k = WidthPixel * 156543.03392 * Math.cos(Lat * Math.PI / 180);        //k = circumference of the world at the Lat_level, for Z=0 
    var myZoom = Math.round( Math.log( (Ratio * k)/(Length*100) )/Math.LN2 );
    myZoom =  myZoom -1;                   // Z starts from 0 instead of 1
    //console.log("calculateZoom: width "+WidthPixel+" Ratio "+Ratio+" Lat "+Lat+" length "+Length+" (m) calculated zoom "+ myZoom);

    // not used but it could be useful for some: Part of the world size at the Lat 
    MapDim = k /Math.pow(2,myZoom);
    //console.log("calculateZoom: size of the map at the Lat: "+MapDim + " meters.");
    //console.log("calculateZoom: world circumference at the Lat: " +k+ " meters.");
    return(myZoom);
}

3

Я еще не могу добавить комментарий, но это возможный источник ответа Пита выше: https://developers.google.com/maps/documentation/javascript/maptypes#MapCoordinates

[...] обратите внимание, что каждый увеличивающийся уровень масштабирования в два раза больше в направлениях x и y. Следовательно, каждый более высокий уровень масштабирования содержит в четыре раза больше разрешения, чем предыдущий уровень. Например, на уровне масштабирования 1 карта состоит из 4 фрагментов размером 256x256 пикселей, в результате чего пространство в пикселях составляет 512x512. На уровне масштабирования 19 на каждый пиксель x и y на карте можно ссылаться, используя значение от 0 до 256 * 2 19


1

Я рассчитал весы для четырех уровней масштабирования:

Уровень масштабирования | Масштаб 20 1: 500 19 1: 1000 18 1: 2000 17 1: 4000

Кажется, что масштаб увеличивается вдвое, поскольку уровень масштабирования увеличивается на один шаг. Итак, я надеюсь, что масштаб для уровня масштабирования 16 будет 1: 8000 и так далее.


3
Добро пожаловать в GIS.SE! Можете ли вы предоставить источник или как это было рассчитано?
Пол

0

Привет, я думаю, что я рассчитал, что 1 пиксель = 11.627 км по прямой; без учета радиуса земли. Вот ссылка на видео, объясняющая как: https://www.youtube.com/watch?v=Y3cvTeiMJqE&feature=youtu.be . Надеюсь, что очистить ваш разум.


Это не. Значение пикселя зависит от широты.
Джон Пауэлл

О, я вижу, не тот комплекс, в который я вошел.
Мистер Тотардо
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.