Czy ktoś może podać mi link (lub kilka szczegółów) na temat rzeczywistego stosunku do wartości „poziomu powiększenia” Map Google?
np Mapy Google, poziom 13 = 1: 20000
Komentarze
- Opierając się na pierwszych informacjach, które wykonałem, być może ktoś mógłby jej użyć! function setZoomLevel (metry) {//console.log(
Zoom level set meters: ${meters}
); var zoomfactor = 1; if (metry < 1128) {zoomfactor = 15; } else if ((metry > 1128) & & (metry < 2256)) {zoomfactor = 14; } else if ((metry > 2256) & & (metry < 4513)) {zoomfactor = 13; } else if ((metry > 4513) & & (metry < 9027)) {zoomfactor = 12; } else if ((metry > 9027) & & (metry < 18055)) {zoomfactor = 11; } else if ((metry > 18055) & & (metry < 36111)) {zoomfactor = 10; } else if ((metry > 36111) & & (metry < 72
Odpowiedź
Jeśli projektujesz mapę, na którą planujesz nałożenie nad mapami Google lub wirtualną Ziemią i tworząc schemat kafelkowy, myślę, że szukasz skali 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
Komentarze
- @capdragon Dzięki. To ' jest dobrze znanym źródłem (ESRI), ale wciąż zastanawiamy się, w jaki sposób wymyślili te skale.
- Racjonalne jest krytyczne dla kogo? Nie ' nie widzę żadnej wzmianki o racjonalności w pytaniu. Uważam, że chce prostej odpowiedzi na swoje proste pytanie.
- @ cap Bez powodu ' jest trudne lub niemożliwe do rozróżnienia poprawna odpowiedź z nieprawidłowej. Bez powodu trzeba polegać na autorytecie odpowiadającego. Jestem ' jestem prawie pewien, że powodem, dla którego inne odpowiedzi w tym wątku są głosowane, a twoja nie jest ' nie ma z tym niewiele wspólnego poprawność lub prostolinijność – twój jest najbardziej autorytatywny i bezpośredni z całej grupy – ale raczej ma wszystko wspólnego z rozumowaniem dostarczonym przez innych. Przy okazji, nie ' nie oceniłem twojego.
- Dzięki: +1. Jesteście prawdopodobnie geografami lub guru teledetekcji. Jestem ' programistą GIS, który chce pomóc facetowi znaleźć odpowiedź. Mój kolega (doktorant, podwójny magister MIT) idzie na godzinny wykład za każdym razem, gdy zadaję mu proste pytanie i po drodze mnie gubi. Nie ' nie zadaję mu więcej pytań (mam tytuł magistra nauk ścisłych). Rozumiem, że inni ludzie lubią sięgać po rozum i tak dalej, ale wielu z nas jest zbyt ignorantami, aby wiedzieć, o czym mówią. IMHO to mylące odpowiedzi, które nie ' nie odpowiadają na jego pytanie.
- Skale zostały wybrane tak, aby można je było równo podzielić przez kafelki rastrowe o podstawie 2 , (np. 128, 512 …). Bing robi to podobnie msdn.microsoft.com/en-us/library/bb259689.aspx
Odpowiedź
Udało mi się znaleźć tę odpowiedź – napisaną przez pracownika Google – prawdopodobnie najdokładniejszą:
To nie będzie dokładne, ponieważ rozdzielczość mapy z odwzorowaniem mercator (np. Google Maps) zależy od szerokości geograficznej.
Można obliczyć za pomocą następującego 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. Taką wartość używamy 🙂
pobrane z: https://groups.google.com/forum/#!topic/google-maps-js-api-v3/hDRO4oHVSeM
Przy okazji – Zgaduję, że:
"latLng.lat()" = map.getCenter().lat() "zoom" = map.getZoom()
Komentarze
- CO równa się twojej formule? Robiąc to dla lat = 2,92 i powiększenia 13 otrzymałem 19.08. Co to jest 19.08 co?
- @Rodrigo metrów na piksel
- Mogę zaświadczyć, że ta odpowiedź jest nadal poprawna i bardzo dokładna po trzech latach. To powinna być akceptowana odpowiedź.
- Czy dotyczy to tylko x , czy też y ? Czy Google Maps przez Javascript API używa tej samej skali dla obu osi?
- @OldGeezer Tak, działa we wszystkich kierunkach. Zniekształcenie liniowe w dowolnym punkcie Mercatora jest równe we wszystkich kierunkach. To ' jest jednym z powodów, dla których jest on używany do tworzenia śliskich map. Przy dużym powiększeniu otrzymujesz mapę o stosunkowo niskich zniekształceniach. po wyrównaniu skali, co robi ta odpowiedź.
Odpowiedź
Aby pomóc Ci zrozumieć matematykę (nie jest to dokładne wyliczenie, to tylko ilustracja):
- Kafelek mapy internetowej Google ma 256 pikseli szerokości
-
powiedzmy, że monitor komputera ma 100 pikseli na cal (PPI). Oznacza to, że 256 pikseli to około 6,5 cm długości. A to „s 0,065 m .
-
na poziom powiększenia 0 , całe 360 stopni długości geograficznej są widoczne na jednym kafelku . Nie możesz tego zaobserwować w Mapach Google, ponieważ automatycznie przechodzi do 1 poziomu powiększenia, ale możesz to zobaczyć na mapie OpenStreetMap „ (używa tego samego schematu kafelkowania ).
-
360 stopni na równiku to obwód Ziemi, 40 075,16 km, czyli 40075160 m
-
podziel 40075160 m z 0,065 m i „dostaniesz 616313361 , czyli skala poziomu powiększenia 0 na równiku dla monitora komputerowego o rozdzielczości 100 DPI
- więc chodzi o to, że skala zależy od PPI twojego monitora i od szerokości geograficznej (z powodu odwzorowania Mercatora)
- dla poziomu 1 powiększenia, skala jest równa połowie poziomu powiększenia 0
- …
- dla poziomu powiększenia N, skala wynosi jedną połowę f tego 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
Komentarze
- Skala w rzeczywistości zależy od DPI generowanych obrazów map. Dwie najczęściej używane rozdzielczości to 96 DPI (to ' jest tym, czym są kafelki mapy Google) i 72 DPI.
- Przy 96 DPI skala
591657550.500000
jest na poziomie 0 zgodnie z tą odpowiedzią. Ale według @CaptDragon jest poziom 1. Powinienem rozważyć rozpoczęcie od poziomu 1, aby przeprowadzić obliczenia w Mapach Google?
Odpowiedź
Nie takie proste. Biorąc pod uwagę projekcję, rozmiar pikseli kafelków zależy od szerokości geograficznej obszaru, który Cię interesuje. Następnie, jeśli chodzi o przekształcanie rozmiaru pikseli w rozmiar pikseli ekranu, zależy to od ekranu i rozdzielczości wyświetlanych danych, dpi, z której korzysta Twój ekran.
Komentarze
- To prawda, sferyczny mercator (projekcja google) nie ' t zachowaj równą skalę, gdy oddalasz się od równika. Doskonałe odniesienie: Mapnik ' s Scale and Scale denominators: trac.mapnik.org/wiki/ScaleAndPpi , a także OSM ' s FAQ: wiki.openstreetmap.org/ wiki / …
Odpowiedź
Proste autorytatywna 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 EARTH, OP nie dba o geometrię 3D. Mapy Google są JUŻ spłaszczone, więc 1 piksel jest zawsze w tej samej odległości (w DEGREES, co dotyczy mapy google), tutaj i w ekuatorze, jak na biegunach.
Przy okazji, czy zdaj sobie sprawę, że gdzieś w pierwszym wierszu pikseli mapy świata skala wynosi 1: 1?
Komentarze
- Ile wynosi liczba 591657550.500000 reprezentują?
- @Sergio dlaczego nie tylko 591657550.5?
- ” Liczba pochodzi z rozdzielczości kafelka ustawionej na wielokrotność 256 pikseli i od rozdzielczości ekranu (96 dpi) ” gis.stackexchange.com/a/111589/ 92997
- Nie działa – zależy od Współrzędnych, ale Twoja formuła nie jest
Odpowiedź
Istnieje taka tabela w dokumentacji systemu płytek Virtal Earth firmy Microsoft . Jednak, jak powiedział GuillaumeC, wartości zależą od szerokość i dalej rozdzielczość ekranu. Tabela zawiera wartości zmierzone dla równika i przy rozdzielczości ekranu 96 dpi.
PS: Nie jestem tego pewien, ale poziomy powiększenia firmy Microsoft mogą zostać przesunięte o 1 w porównaniu z poziomami powiększenia o Google.Ale zdecydowanie używają tego samego odwzorowania, aby wartości pozostały poprawne dla Google.
Answer
Radius @ Equator Dokładność 6 378 137 metrów ( WGS-84)
Obwód na równiku = 40 075 017 metrów (2πr)
Poziom powiększenia 24 wykorzystuje powiększenie od 2 do 32 (4 294 967 296) pikseli na obwodzie.
Obwód równikowy / 2 32 = 0,009330692 metra na piksel
Jednostka na szerokości geograficznej = (kosinus szerokości geograficznej) X (jednostka na równiku)
Poziom powiększenia podwaja się z każdym przyrostem.
1 stopa (międzynarodowa) = 0,3048 metra
Edytuj
Cóż, na początek nie jest to uzasadnione pytanie. Współczynniki skali odnoszą się do drukowanych dokumentów, a nie ekranów komputerów. To, czego potrzebujesz, aby te obrazy były używane z dowolną dokładnością, to znać rozmiar każdego piksela, a następnie przeskalować obraz zgodnie z tym, na co go nakładasz.
Więc 15-20 lat temu ktoś wziął WGS- 84 jako dane podstawowe. (zauważ, że 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łne 32-bitowa liczba całkowita. Jest to wybór logiczny, ponieważ zapewnia globalną dokładność do około jednego centymetra, co jest wystarczające dla zdjęć lotniczych. 32-bitowe liczby całkowite są również wydajne do przechowywania i przetwarzania.
Dlaczego wybrano poziom 24 Nie wiem jednak, skoro ktoś inny tutaj opracował 0 sprowadza cię do jednego 256-pikselowego kafelka Ziemi.
A teraz przykład, jak wykorzystać powyższe dane. Powiedzmy, że mam obraz na poziomie powiększenia 20 (w takim powiększeniu, na jakie pozwalają obecnie) Weź 0,009330692 (powiększenie 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 .
Teraz powiedzmy, że nasz obraz znajduje się na 45. szerokości geograficznej. Weź cosinus tego (0,707106781) i pomnóż go przez 0,149231071, a otrzymasz 0,105564729 metra s. To jest długość i wysokość jednego piksela z obrazu znajdującego się na 45 szerokości geograficznej przy poziomie powiększenia 20. Jeśli zrobisz na ekranie obraz o wymiarach 1000 x 1000 pikseli tego obszaru, wymiary wynoszą 105,56 metra kwadratowego. Jeśli chcesz, podziel to 0,3048
Jeśli chodzi o źródła, około 5 lat temu odwróciłem inżyniera z różnych informacji i dokumentacji, które znalazłem w Internecie, w tym na stronach wsparcia mapowania Google i MS.
Wykorzystałem tę setkę czasu i nakładałem na to faktycznie dane z badań terenowych i zawsze było to poprawne. Porównaj je z dowolnymi z zamieszczonych tutaj tabel, a liczby będą się zgadzać.
Komentarze
- I ' Nie wiem, jak to odpowiada na pytanie.
- Zgadzam się z @Devdatta, czy mógłbyś podać źródło i kontekst.
- Nie wiem, czy te komentarze były przed, czy po edytuj, ale użyłem tej odpowiedzi i działa świetnie
Odpowiedź
Właśnie wykonałem kilka obliczeń i otrzymałem następujące informacje wyniki:
Mapy Google pokazują linijkę o długości 1 km (w lewym dolnym rogu mapy) o długości 90 pikseli przy poziomie powiększenia 13. Oznacza to, że:
Zakładając rozdzielczość ekranu wynosi 96 dpi lub 36 dpcm, przy powiększeniu 13 mamy 0,4 km (od 36/90) na 1 cm, co daje skalę mapy 1:40 000 dla ekranu 96 dpi.
Do różnych operacji na ekranie najlepiej przyjąć jako podstawę 90 pikseli, ponieważ wszystkie liczby będą okrągłe na wszystkich poziomach powiększenia, tj.
- Poziom powiększenia 12: 2 km na 90 pikseli
- Poziom powiększenia l 11: 4 km dla 90 pikseli
- Poziom powiększenia 10: 8 km dla 90 pikseli
i tak dalej.
Pamiętaj, że jest to przybliżenie, które powinno działają mniej lub bardziej dobrze na mniejszych skalach, a nie na dużych.
(A Google lubi okrągłe liczby na końcu …)
Komentarze
- Jeśli przyjrzysz się uważnie, ' odkryjesz, że długość linii zmienia się w zależności od szerokości geograficznej obszaru, na którym ' ponowne przeglądanie.
- To działa 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 to 2 km na Przylądku Północnym (71 ° latitude), 1 km wokół 45 ° szerokość geograficzna i 500 m na równinie.
Odpowiedź
Na podstawie wszystkich podanych 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ą w pikselach.
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); }
Odpowiedź
Nie mogę jeszcze dodać komentarza, ale jest to możliwe źródło powyższej odpowiedzi Petea: https://developers.google.com/maps/documentation/javascript/maptypes#MapCoordinates
[…] zauważ, że każdy zwiększający się poziom powiększenia jest dwukrotnie większy w obu kierunkach x i y. Dlatego każdy wyższy poziom powiększenia zawiera cztery razy większą rozdzielczość niż poprzedni poziom. Na przykład na poziomie powiększenia 1 mapa składa się z 4 kafelków 256×256 pikseli, co daje przestrzeń w pikselach od 512×512. Na poziomie powiększenia 19 do każdego piksela xiy na mapie można się odwołać, używając wartości z zakresu od 0 do 256 * 2 19
Odpowiedź
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
Wygląda na to, że skala podwaja się, gdy poziom powiększenia wzrasta o jeden stopień. Mam więc nadzieję, że skala dla 16 poziomu powiększenia będzie wynosić 1: 8000 itd.
Komentarze
- Witamy w GIS.SE! Czy możesz podać źródło lub jak to zostało obliczone?
Odpowiedź
Cześć. Myślę, że to obliczyłem 1piksel = 11,627 km w linii prostej; nie biorąc pod uwagę promienia ziemi. Tutaj link do filmu wyjaśniającego, jak to zrobić: https://www.youtube.com/watch?v=Y3cvTeiMJqE&feature=youtu.be . Mam nadzieję, że to oczyściło Twój umysł.
Komentarze
- Tak nie jest. Wartość piksela zależy od szerokości geograficznej.
- O rozumiem, nie aż tak skomplikowany, w jaki się wdałem.