Яким масштабам співвідношення відповідають рівні масштабування Карт Google?


83

Чи може хтось надати мені посилання (або деякі деталі) щодо фактичного співвідношення до "масштабування" цифр для Карт Google?

наприклад, Карти Google, рівень 13 = 1: 20000


1
Виходячи з першої інформації, яку я зробив цією функцією, можливо, хтось міг би її використати! набір функційZoomLevel (метри) {//console.log ( Zoom level set meters: ${meters}); var zoomfactor = 1; якщо (метри <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 Ви, напевно, географи або гуру дистанційного зондування. Я просто розробник ГІС, який хоче допомогти хлопцеві досягти своєї відповіді. Мій колега (тип PHD, подвійний магістр MIT) щоразу йде на годину лекції, коли я задаю йому просте запитання і програє мені по дорозі. Я більше не задаю йому запитань (у мене є магістр наук). Я розумію, що інші люди люблять вживатися в м'ясо раціонального тощо, але багато хто з нас занадто неосвічені, щоб знати, про що вони говорять. У ІМХО вони заплутали відповіді, які не відповідають на його запитання.
CaptDragon

10
Ваги були вибрані таким чином, щоб їх можна було рівномірно розділити за допомогою растрових плиток, які знаходяться в основі 2 (наприклад, 128, 512 ...). Бінг робить це аналогічно msdn.microsoft.com/en-us/library/bb259689.aspx
Гарретт Холл

44

Я знайшов цю відповідь - написану працівником 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 і масштабувати 13 я отримав 19,08. Що таке 19.08 що?
Родріго

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

3
Я можу засвідчити, що ця відповідь все-таки правильна і дуже точна через три роки. Це має бути прийнятою відповіддю.
Джон

Це стосується лише x чи також y ? Чи використовують Карти Google через API JavaScript однакову шкалу для обох осей?
Старий Гейзер

@OldGeezer Так, це працює у всіх напрямках. Лінійні спотворення в будь-якій точці Меркатора рівні в усіх напрямках. Це одна з причин, коли він звикає до слизьких карт. Коли ви збільшуєте масштаб, ви отримуєте досить низьку карту спотворень. як тільки ви компенсуєте масштаб, саме це і робить ця відповідь.
smithkm

30

Щоб зрозуміти математику (не точний розрахунок, це лише для ілюстрації):

  • Плитка веб-карти Google має ширину 256 пікселів
  • скажімо, монітор комп'ютера має 100 пікселів на дюйм (ІЦВ). Це означає, що 256 пікселів мають приблизно 6,5 см довжини. І це 0,065 м .

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

  • 360 спусків на екваторі дорівнюють окружності Землі 40,075,16 км, що становить 40075160 м

  • розділіть 40075160 м на 0,065 м, і ви отримаєте 616313361 , що є шкалою рівня 0 на Екваторі для монітора комп’ютера зі 100 DPI

  • тому справа в тому, що шкала залежить від ІЦН вашого монітора і від широти (через проекцію Меркатора)
  • для масштабу 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.
Саса Іветіч

З 96DPI шкалою 591657550.500000є рівень 0 відповідно до цієї відповіді. Але згідно з @CaptDragon це рівень 1. Я повинен розглянути, починаючи з першого рівня, щоб обчислити за допомогою Google Maps?
Дуглас Насіф Рома Юніор

17

Не так просто. Враховуючи проекцію, розмір пікселів плитки залежить від широти області, яка вас цікавить. Тоді, з точки зору перетворення розміру пікселя плитки в розмір пікселя екрана, це залежить від екрану та роздільної здатності відображаються даних, dpi, який використовується на екрані.


2
Це правильно, сферичний меркатор (проекція Google) не зберігає рівних масштабів, коли ви віддаляєтесь від екватора. Для отримання чудової довідки: стаття про масштаб і знаменники масштабу Mapnik: trac.mapnik.org/wiki/ScaleAndPpi, а також поширені запитання OSM: wiki.openstreetmap.org/wiki/…
maning

12

Відверта авторитетна правильна відповідь:

591657550.500000 / 2^(level-1)

він дає вам таблицю вище, вводячи рівень збільшення.

Спробуйте в прямому ефірі на jsfiddle.net

Оскільки питання стосується лише Google MAPS, а не EARTH, ОП не хвилює 3D-геометрію. Карти Google ВИНАГО сплющені, тому 1 піксель - це завжди однакова відстань (у DEGREES, що стосується карти Google), тут і в екваторі, як і на полюсах.

До речі, ви зрозуміли, що десь усередині першого піксельного ряду карти світу масштаб становить 1: 1?


5
Що означає число 591657550.500000?
Justin Dearing

2
@Sergio чому б не просто 591657550.5?
Біровський

2
"Кількість походить від встановлення роздільної здатності плитки у кратній
juffel

Не працює - це залежить від Широти, але ваша формула не
Євгеній Воробей

9

Є така таблиця в документації системи плитки Virtal Earth від Microsoft . Але, як сказав GuillaumeC, значення залежать від широти та роздільної здатності екрана. У таблиці наведені значення, виміряні в екваторі та з роздільною здатністю екрана 96 dpi.

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


7

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

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

Рівень масштабу 24 використовує 2 по 32 потужності (4,294,967,296) пікселів по колу.

Екваторіальне коло / 2 32 = .009330692 метри на піксель

Одиниця в широті = (косинус широти) X (одиниця на екваторі)

Рівень масштабування збільшується вдвічі на кожен приріст.

1 фут (Міжнародний) = 0,3048 метрів

Редагувати

Ну це не дуже законний питання для початку. Коефіцієнти масштабу відносно друкованих документів, а не екранів комп’ютера. Для того, щоб ці зображення використовувались з будь-якою точністю, потрібно знати розмірність кожного пікселя, а потім масштабувати зображення відповідно до того, з чим ви його накладаєте.

Так 15-20 років тому хтось взяв WGS-84 за базові дані. .

Потім вони взяли це і поділили його повним 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 Tengshe

Я погоджуюся з @Devdatta, чи можете ви надати джерело та деякий контекст.
Аарон

Не впевнений, чи були ці коментарі до або після редагування, але я використав цю відповідь, і вона чудово працює
bjnortier

4

Щойно зробили кілька розрахунків і отримали такі результати:

Google Maps показує лінійку розміром 1 км (внизу зліва від карти), довжиною якої є 90 пікселів, на рівні масштабу 13. Що означає наступне:

Якщо припустити, що роздільна здатність екрана становить 96 dpi або 36 dpcm, на рівні зуму 13 ми маємо 0,4 км (від 36/90) в 1 см, що дає масштаб карти 1: 40 000 для екрана 96 dpi.

Для різних операцій на екрані найкраще взяти за основу 90 пікселів, оскільки всі цифри будуть круглими на всіх рівнях збільшення, тобто

  • Рівень масштабу 12: 2 км у 90 пікселів
  • Рівень масштабу 11: 4 км у 90 пікселів
  • Рівень масштабу 10: 8 км у 90 пікселів

і так далі.

Зауважте, що це наближення, яке має працювати більш-менш добре на менших масштабах, а не на великих.

(І в кінцевому підсумку 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#MapCoordinate

[...] зауважте, що кожен збільшуючий рівень масштабування вдвічі більший у напрямку x і y. Тому кожен вищий рівень масштабування містить у чотири рази більше роздільну здатність, ніж попередній рівень. Наприклад, при рівні масштабу 1 карта складається з 4 плиток 256х256 пікселів, в результаті чого піксельний простір становить 512х512. При рівні масштабу 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.