Каким масштабам соотношения соответствуют уровни масштабирования Карт 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.