Jakie skale współczynników odpowiadają poziomom powiększenia w Mapach Google?

83

Czy ktoś może podać mi link (lub kilka szczegółów) na temat rzeczywistego stosunku do wartości „poziomu powiększenia” w Mapach Google?

np. Mapy Google Poziom 13 = 1: 20000

mlo55
źródło
1
Na podstawie pierwszych informacji, które stworzyłem, być może ktoś mógłby z niej skorzystać! funkcja setZoomLevel (metry) {//console.log ( Zoom level set meters: ${meters}); var zoomfactor = 1; if (metry <1128) {współczynnik powiększenia = 15; } else if ((metry> 1128) && (metry <2256)) {zoomfactor = 14; } else if ((metry> 2256) i& (metry <4513)) {zoomfactor = 13; } else if ((metry> 4513) i& (metry <9027)) {zoomfactor = 12; } else if ((metry> 9027) && (metry <18055)) {zoomfactor = 11; } else if ((metry> 18055) i& (metry <36111)) {zoomfactor = 10; } else if ((metry> 36111) i& (metry <72
Friis1978,

Odpowiedzi:

79

Jeśli projektujesz mapę, którą planujesz nałożyć na mapy Google lub wirtualną ziemię i tworzysz schemat kafelkowania, to myślę, że szukasz skal dla każdego poziomu powiększenia, użyj tych:

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

Źródło: http://webhelp.esri.com/arcgisserver/9.3/java/index.htm#designing_overlay_gm_mve.htm

CaptDragon
źródło
2
@capdragon Thanks. To dobrze znane źródło (ESRI), ale wciąż nas zastanawia się, jak wymyślili te skale.
whuber
4
Racjonalny jest dla kogo krytyczny? W pytaniu nie widzę żadnej wzmianki o racjonalności. Uważam, że chce prostej odpowiedzi na swoje proste pytanie.
CaptDragon,
4
@cap Bez powodu trudno jest odróżnić poprawną odpowiedź od niepoprawnej. Bez powodu należy polegać na autorytecie osoby odpowiadającej. Jestem prawie pewien, że powód, dla którego inne odpowiedzi w tym wątku są poddawane pod głosowanie, a twój nie ma wiele wspólnego z poprawnością lub prostotą - twój jest najbardziej autorytatywny i bezpośredni z całej grupy - ale raczej ma wszystko zrobić z uzasadnieniem przedstawionym przez innych. BTW Nie oceniłem twojego.
whuber
3
Dzięki: +1. Jesteście prawdopodobnie geografami lub guru z teledetekcji. Jestem tylko programistą GIS, który chce pomóc facetowi w uzyskaniu odpowiedzi. Mój kolega (typ doktora, podwójny major MIT) idzie na wykład godzinny za każdym razem, gdy zadaję mu proste pytanie i gubi mnie po drodze. Nie zadaję mu już pytań (mam mistrzów w nauce). Rozumiem, że inni ludzie lubią wchodzić w racjonalność i tak dalej, ale wielu z nas jest zbyt ignorantami, aby wiedzieć, o czym mówią. IMHO to mylące odpowiedzi, które nie odpowiadają na jego pytanie.
CaptDragon,
10
Skale zostały wybrane tak, aby można je było równomiernie podzielić za pomocą płytek rastrowych znajdujących się w podstawie 2 (np. 128, 512 ...). Bing robi to podobnie msdn.microsoft.com/en-us/library/bb259689.aspx
Garrett Hall
44

Znalazłem tę odpowiedź - napisaną przez pracownika Google - prawdopodobnie byłaby najdokładniejsza:

Nie będzie to dokładne, ponieważ rozdzielczość mapy z rzutowaniem mercatora (jak mapy Google) zależy od szerokości geograficznej.

Można obliczyć za pomocą tego wzoru:

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

Jest to oparte na założeniu, że promień ziemi wynosi 6378137 m. Jakiej wartości używamy :)

pochodzi z: https://groups.google.com/forum/#!topic/google-maps-js-api-v3/hDRO4oHVSeM

BTW - Zgaduję, że:

'latLng.lat()' = map.getCenter.lat()
'zoom' = map.getZoom()
Gilad Mayani
źródło
CO jest równe twojej formule? Robiąc to dla lat = 2.92 i zoom 13 dostałem 19.08. Co to jest 19.08 co?
Rodrigo,
4
@Rodrigo metrów na piksel
Justin Poehnelt
3
Mogę zaświadczyć, że ta odpowiedź jest nadal poprawna i bardzo dokładna trzy lata później. To powinna być zaakceptowana odpowiedź.
Jan
Czy dotyczy to tylko x czy y ? Czy Mapy Google za pośrednictwem JavaScript API używają tej samej skali dla obu osi?
Old Geezer
@OldGeezer Tak, działa we wszystkich kierunkach. Zniekształcenie liniowe w dowolnym punkcie Mercatora jest równe we wszystkich kierunkach. To jeden z powodów, dla których przyzwyczaja się do śliskich map. Po przybliżeniu otrzymasz mapę o stosunkowo niskim zniekształceniu. po skompensowaniu skali, co robi ta odpowiedź.
smithkm
30

Aby pomóc Ci zrozumieć matematykę (nie jest to dokładne obliczenie, to tylko dla ilustracji):

  • Kafelek mapy internetowej Google ma 256 pikseli szerokości
  • powiedzmy, że monitor komputera ma 100 pikseli na cal (PPI). Oznacza to, że 256 pikseli ma około 6,5 cm długości. A to 0,065 m .

  • na poziomie powiększenia 0 całe 360 ​​stopni długości geograficznej jest widoczne w jednym kafelku . Nie można tego zaobserwować w Mapach Google, ponieważ automatycznie przechodzi ono do poziomu powiększenia 1, ale można to zobaczyć na mapie OpenStreetMap (używa tego samego schematu kafelkowania).

  • 360 stopni na równiku jest równych obwodowi Ziemi, 40 075,16 km, czyli 40075160 m

  • podzielić 40075160 m do 0,065 m , a dostaniesz 616313361 , który jest skala poziomu powiększenia 0 na równiku na monitorze komputera przy 100 DPI

  • Chodzi o to, że skala zależy od PPI twojego monitora i od szerokości geograficznej (z powodu projekcji Mercatora)
  • dla poziomu powiększenia 1 skala stanowi połowę tej z poziomu powiększenia 0
  • ...
  • dla poziomu powiększenia N skala jest o połowę mniejsza niż w przypadku poziomu powiększenia N-1

Sprawdź także: http://wiki.openstreetmap.org/wiki/FAQ#What_is_the_map_scale_for_a_particular_zoom_level_of_the_map.3F

Igor Brejc
źródło
3
Skala faktycznie zależy od DPI wygenerowanych obrazów map. Dwie najczęściej stosowane rozdzielczości to 96DPI (takie są kafelki mapy Google) i 72DPI.
Sasa Ivetic
Przy 96DPI skala 591657550.500000wynosi Poziom 0 zgodnie z tą odpowiedzią. Ale według @CaptDragon jest Poziom 1. Powinienem rozważyć rozpoczęcie od poziomu 1, aby obliczyć za pomocą Google Maps?
Douglas Nassif Roma Junior
17

Nie tak łatwo. Biorąc pod uwagę rzut, rozmiar pikseli kafelka zależy od szerokości geograficznej interesującego cię obszaru. Następnie, jeśli chodzi o przekształcanie rozmiaru piksela kafelka w rozmiar piksela ekranu, zależy to od ekranu i rozdzielczości wyświetlanych danych, dpi używa twojego ekranu.

GuillaumeC
źródło
2
To prawda, kulisty merkator (projekcja Google) nie zachowuje jednakowej skali, gdy odsuwasz się od równika. W celu uzyskania doskonałych odniesień: artykuł Skala i mianowniki Mapnika : trac.mapnik.org/wiki/ScaleAndPpi, a także FAQ OSM: wiki.openstreetmap.org/wiki/…
obsada
12

Prosta, wiarygodna poprawna odpowiedź:

591657550.500000 / 2^(level-1)

daje powyższą tabelę, wprowadzając poziom powiększenia.

Wypróbuj na żywo na jsfiddle.net

Ponieważ pytanie dotyczy tylko Google MAPS, a nie ZIEMI, OP nie dba o geometrię 3D. Mapy Google są JUŻ spłaszczone, więc 1 piksel jest zawsze tej samej odległości (w STOPNIACH, co dotyczy mapy google), tutaj iw ekwatorze, jak na biegunach.

Nawiasem mówiąc, czy zdałeś sobie sprawę, że gdzieś w pierwszym rzędzie pikseli mapy świata skala wynosi 1: 1?

Sergio
źródło
5
Co oznacza liczba 591657550.500000?
Justin Dearing
2
@Sergio, dlaczego nie tylko 591657550.5?
Birowsky,
2
„Liczba pochodzi od rozdzielczości kafelka
dpi
Nie działa - zależy od Współrzędnych, ale twoja formuła nie
Evgenii Vorobei
9

Taka tabela znajduje się w dokumentacji systemu Virtal Earth Tile System firmy Microsoft . Ale jak powiedział GuillaumeC, wartości zależą od szerokości geograficznej i rozdzielczości ekranu. Tabela podaje wartości zmierzone na równiku i przy rozdzielczości ekranu 96 dpi.

PS: Nie jestem tego pewien, ale poziomy powiększenia przez Microsoft mogą być przesunięte o 1 w porównaniu do poziomów powiększenia przez Google. Ale ostatecznie używają tej samej projekcji, aby wartości pozostały prawidłowe dla Google.

Imię
źródło
7

Promień @ Equator Dokładnie 6,378,137 metrów (WGS-84)

Obwód równika = 40,075,017 metrów (2πr)

Poziom powiększenia 24 wykorzystuje 2 do 32 pikseli mocy (4 294 967 296) pikseli na obwodzie.

Obwód równikowy / 2 32 = .009330692 metrów na piksel

Jednostka na szerokości geograficznej = (cosinus szerokości geograficznej) X (jednostka na równiku)

Poziom powiększenia podwaja każdy przyrost.

1 stopa (międzynarodowa) = 0,3048 metra

Edytować

Cóż, to naprawdę nie jest uzasadnione pytanie na początek. Współczynniki skali odnoszą się do wydrukowanych dokumentów, a nie ekranów komputerowych. Aby obrazy te były używane z dowolną dokładnością, musisz znać wymiary każdego piksela, a następnie skalować obraz zgodnie z tym, na co go nakładasz.

15-20 lat temu ktoś wziął WGS-84 jako dane podstawowe. (uwaga w poprzednim poście ktoś użył wartości 40.075.160 Widziałem to w Wikipedii w kilku miejscach i jest to niepoprawne. Prawidłowa wartość to 40,075,017

Następnie wzięli to i podzielili przez pełną 32-bitową liczbę całkowitą. Jest to logiczny wybór, ponieważ zapewnia globalną dokładność do około jednego centymetra, co wystarcza na zdjęcia lotnicze. 32-bitowe liczby całkowite są również wydajne do przechowywania i przetwarzania.

Dlaczego wybrano poziom 24, nie wiem jednak, ponieważ ktoś tutaj tutaj opracował 0, prowadzi cię do jednego 256-pikselowego kafelka dla Ziemi.

Teraz na przykład, jak korzystać z powyższych danych. Powiedzmy, że mam obraz na poziomie powiększenia 20 (tak powiększonym, jak to obecnie pozwalają) Zrób 0,009330692 (Powiększ 24 na równiku) dwukrotnie dla powiększenia 23, ponownie dla powiększenia 22, ponownie dla powiększenia 21 i ostatni raz dla powiększenia 20 Powinieneś teraz mieć 0.149231071.

Powiedzmy teraz, że nasz obraz znajduje się na 45. szerokości geograficznej. Weź Cosinus tego (0,707106781) i pomnóż go przez 0,149231071, a da ci 0,0556564729 metrów. Jest to długość i wysokość jednego piksela od obrazu na 45 szerokości geograficznej przy poziomie powiększenia 20. Jeśli wykonasz zrzut ekranu o rozmiarze 1000 x 1000 pikseli tego obszaru, jego wymiary wynoszą 105,56 metra kwadratowego. Jeśli chcesz, stopy dzielą to 0,3048

Jeśli chodzi o źródła, około 5 lat temu byłem inżynierem inżynierii odwrotnej na podstawie różnych informacji i dokumentacji, które znalazłem w sieci, w tym stron wsparcia map Google i MS.

Wykorzystałem tę setkę czasu i nałożyłem ją na dane z badań terenowych i zawsze były one poprawne. Porównaj to z dowolną tabelą zamieszczoną tutaj, a liczby będą pasować.

DavidG
źródło
2
Nie jestem pewien, jak to odpowiada na pytanie.
Devdatta Tengshe,
Zgadzam się z @Devdatta, czy możesz podać źródło i kontekst.
Aaron
Nie jestem pewien, czy te komentarze były przed lub po edycji, ale kiedyś tę odpowiedź i działa świetnie
bjnortier
4

Właśnie wykonałem kilka obliczeń i uzyskałem następujące wyniki:

Mapy Google pokazują linijkę 1 km (u dołu po lewej stronie mapy) o długości 90 pikseli na poziomie powiększenia 13. Co oznacza:

Zakładając, że rozdzielczość ekranu wynosi 96 dpi lub 36 dpcm, na poziomie powiększenia 13 mamy 0,4 km (od 36/90) na 1 cm, co daje skalę mapy 1: 40 000 dla ekranu 96dpi.

W przypadku różnych operacji na ekranie najlepiej jest przyjąć 90 pikseli jako podstawę, ponieważ wszystkie liczby będą okrągłe na wszystkich poziomach powiększenia, tj.

  • Poziom powiększenia 12: 2 km przy 90 pikselach
  • Poziom powiększenia 11: 4 km przy 90 pikselach
  • Poziom powiększenia 10: 8 km przy 90 pikselach

i tak dalej.

Zauważ, że jest to przybliżenie, które powinno działać mniej więcej dobrze na mniejszych skalach niż na dużych.

(A Google lubi okrągłe liczby na końcu ...)

mojuba
źródło
1
Jeśli przyjrzysz się uważnie, odkryjesz, że długość linii zmienia się w zależności od szerokości geograficznej oglądanego obszaru.
rcoup
1
Jest to ważne tylko na określonej szerokości geograficznej, jak wspomniano w @rcoup. Zmienia się nie tylko długość paska skali, ale także reprezentowana przez niego odległość. Aby kontynuować ten przykład przy powiększeniu 13, odległość reprezentowana przez pasek skali wynosi 2 km na Przylądku Północnym (71 ° szerokości geograficznej), 1 km wokół 45 ° szerokości geograficznej i 500 m przy ekwatorze.
François,
3

Na podstawie wszystkich dostarczonych informacji zbudowałem funkcję, która daje najlepsze z zastosowane do mapy, gdy chcesz mieć poziomą linię reprezentującą N% wyświetlanej mapy.

Wyświetlana mapa charakteryzuje się własną szerokością pikseli.

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);
}
jaroc
źródło
3

Nie mogę jeszcze dodać komentarza, ale jest to możliwe źródło powyższej odpowiedzi Pete'a: https://developers.google.com/maps/documentation/javascript/maptypes#MapCoordinates

[...] zauważ, że każdy rosnący poziom powiększenia jest dwa razy większy zarówno w kierunku x, jak i y. Dlatego każdy wyższy poziom powiększenia zawiera czterokrotnie większą rozdzielczość niż poziom poprzedni. Na przykład na poziomie powiększenia 1 mapa składa się z 4 kafelków 256 x 256 pikseli, co daje przestrzeń pikselową od 512 x 512. Na poziomie powiększenia 19 do każdego piksela xiy na mapie można odwoływać się przy użyciu wartości od 0 do 256 * 2 19

Ingo Haumann
źródło
1

Obliczyłem skale dla czterech poziomów powiększenia:

Poziom powiększenia | Skala 20 1: 500 19 1: 1000 18 1: 2000 17 1: 4000

Wydaje się, że skala jest podwojona wraz ze wzrostem stopnia powiększenia o jeden krok. Mam więc nadzieję, że skala dla poziomu powiększenia 16 wyniesie 1: 8000 i tak dalej.

Pete
źródło
3
Witamy w GIS.SE! Czy możesz podać źródło lub jak to zostało obliczone?
Paul,
0

Cześć. Myślę, że obliczyłem, że 1 piksel = 11,627 km w linii prostej; nie biorąc pod uwagę promienia ziemi. Oto link wideo wyjaśniający, jak: https://www.youtube.com/watch?v=Y3cvTeiMJqE&feature=youtu.be . Mam nadzieję, że to oczyści twój umysł.

Pan Totardo
źródło
To nie. Wartość piksela zależy od szerokości geograficznej.
John Powell,
Och, rozumiem, nie taki kompleks, w który wszedłem.
Pan Totardo