Kan någon ge mig en länk (eller några detaljer) om det faktiska förhållandet till ”zoomnivå” för Google Maps?

t.ex. Google Maps nivå 13 = 1: 20000

Kommentarer

  • Baserat på den första informationen som jag gjorde den här funktionen, kanske någon skulle kunna använda den! funktionssetZoomLevel (meter) {//console.log(Zoom level set meters: ${meters}); var zoomfaktor = 1; if (meter < 1128) {zoomfactor = 15; } annat om ((meter > 1128) & & (meter < 2256)) {zoomfactor = 14; } annat om ((meter > 2256) & & (meter < 4513)) {zoomfactor = 13; } annat om ((meter > 4513) & & (meter < 9027)) {zoomfactor = 12; } annat om ((meter > 9027) & & (meter < 18055)) {zoomfactor = 11; } annat om ((meter > 18055) & & (meter < 36111)) {zoomfactor = 10; } annat om ((meter > 36111) & & (meter < 72

Svar

Om du utformar en karta planerar du att lägga överlagring över google maps eller virtual earth och skapa ett kaklingsschema så jag tror att det du letar efter är skalorna för varje zoomnivå, använd dessa:

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 

Källa : http://webhelp.esri.com/arcgisserver/9.3/java/index.htm#designing_overlay_gm_mve.htm

Kommentarer

  • @capdragon Tack. Det ’ är en välkänd källa (ESRI) men det gör att vi fortfarande undrar hur de kom med dessa skalor.
  • Rationellt är kritisk för vem? Jag ser inte ’ något om rationellt i frågan. Jag tror att han vill ha ett rakt framåt svar på sin raka fråga.
  • @ cap Utan anledning är det ’ svårt eller omöjligt att skilja ett korrekt svar från ett felaktigt svar. Utan anledning är man kvar att behöva förlita sig på svararens auktoritet. Jag ’ är ganska säker på att anledningen till att de andra svaren i den här tråden blir röstade och din inte är ’ t har lite att göra med korrekthet eller okomplicitet – din är den mest auktoritära och okomplicerade av gänget – men har snarare allt att göra med resonemanget från de andra. BTW Jag har inte ’ t nedröstade din.
  • Tack: +1. Ni är förmodligen geografer eller fjärranalysguruer. Jag ’ är bara en GIS-utvecklare som vill hjälpa killen att nå sitt svar. En kollega av mig (PHD-typ, dubbel MIT-dur) går in i en timmes föreläsning varje gång jag ställer honom en enkel fråga och förlorar mig på vägen. Jag ställer inte ’ frågor längre (jag har en magisterexamen i vetenskap). Jag förstår att andra människor gillar att gå in i rationellt och så vidare, men många av oss är för okunniga för att veta vad de pratar om. IMHO de var förvirrande svar som ’ inte svarade på hans fråga.
  • Vågarna valdes så att de kan delas jämnt med rasterplattor som finns i bas 2 , (t.ex. 128, 512 …). Bing gör det på samma sätt msdn.microsoft.com/en-us/library/bb259689.aspx

Svar

Jag tyckte att svaret – skrivet av en Google-anställd – skulle nog vara det mest exakta:

Detta kommer inte att vara exakt, eftersom upplösningen på en karta med mercatorprojektionen (som Google maps) är beroende av latituden.

Det är möjligt att beräkna med denna formel:

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

Detta baseras på antagandet att jordens radie är 6378137m. Vilket är det värde vi använder 🙂

hämtad från: https://groups.google.com/forum/#!topic/google-maps-js-api-v3/hDRO4oHVSeM

BTW – Jag gissar att:

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

Kommentarer

  • VAD motsvarar din formel? Gör det för lat = 2.92 och zooma 13 fick jag 19.08. Vad är 19.08 vad?
  • @Rodrigo meter per pixel
  • Jag kan vittna om att det här svaret fortfarande är korrekt och mycket exakt tre år senare. Detta bör vara det accepterade svaret.
  • Gäller detta endast x eller även y ? Använder Google Maps via Javascript API samma skala för båda axlarna?
  • @OldGeezer Ja det fungerar i alla riktningar. Linjär distorsion när som helst i Mercator är lika i alla riktningar. Att ’ är en av anledningarna till att det används för hala kartor. När du zoomar in får du en rimligt låg distorsionskarta. när du väl kompenserar för skalan, vilket är vad detta svar gör.

Svar

För att hjälpa dig att förstå matematiken (inte en exakt beräkning, det är bara för att illustrera):

  • Googles webbkartor har 256 pixlar med bredd
  • låt oss säga din datorskärmen har 100 pixlar per tum (PPI). Det betyder att 256 pixlar är ungefär 6,5 cm långa. Och att ”s 0,065 m .

  • zoomnivå 0 , hela 360 grader av longitud är synliga i en enda sida . Du kan inte observera detta i Google Maps eftersom det automatiskt flyttas till zoomnivå 1, men du kan se det på OpenStreetMap-kartan (den använder samma tegel ).

  • 360 degress på ekvatorn är lika med jordens omkrets, 40.075,16 km, vilket är 40075160 m

  • dela 40075160 m med 0,065 m och du får 616313361 , vilket är en skala för zoomnivå 0 på ekvatorn för en datorskärm med 100 DPI

  • så poängen är att skalan beror på skärmens PPI och på latitud (på grund av Mercator-projicering)
  • för zoomnivå 1, skala är hälften av zoomnivån 0
  • för zoomnivå N, skalan är en hal f av zoomnivån N-1

Kolla även in: http://wiki.openstreetmap.org/wiki/FAQ#What_is_the_map_scale_for_a_particular_zoom_level_of_the_map.3F

Kommentarer

  • Skalan är faktiskt beroende av DPI för de genererade kartbilderna. De två mest använda upplösningarna är 96DPI (att ’ är vad Google-kartor är) och 72DPI.
  • Med 96DPI är skalan 591657550.500000 är nivå 0 enligt detta svar. Men enligt @CaptDragon är nivå 1. Jag bör överväga att börja från nivå 1 för att beräkna med Google Maps?

Svar

Inte så enkelt. Med tanke på projiceringen beror storleken på brickpixlarna på latitud för det område du är intresserad av. När det gäller att transformera brickpixelstorlek i skärmpixelstorlek beror det på skärmen och upplösningen som data visas, dpi som din skärm använder.

Kommentarer

Svar

Enkelt auktoritativt rätt svar:

591657550.500000 / 2^(level-1) 

det ger dig tabellen ovan och anger zoomnivån.

Prova det live på jsfiddle.net

Eftersom frågan endast gäller Google MAPS, inte EARTH, bryr sig OP inte om 3D-geometri. Google-kartor är ALLTID platta så att 1 pixel alltid är samma avstånd (i DEGREES, vilket är vad som gäller en google-karta), här och i ekuatorn som i polerna.

Förresten, gjorde du inse att någonstans inom den första pixelraden på en världskarta är skalan 1: 1?

Kommentarer

  • Vad betyder numret 591657550.500000 representera?
  • @Sergio varför inte bara 591657550.5?
  • ” Siffran kommer från att brickupplösningen är inställd på en multipel med 256 pixlar och från skärmupplösningen (96dpi) ” gis.stackexchange.com/a/111589/ 92997
  • Fungerar inte – det beror på Latitude, men din formel är inte

Svar

Det finns en sådan tabell i -dokumentationen för Virtal Earth Tile System från Microsoft . Men som sagt av GuillaumeC beror värdena på latitud och vidare skärmupplösningen. Tabellen ger värden uppmätta vid ekvatorn och med en skärmupplösning på 96 dpi.

PS: Inte säker på det, men zoomnivåerna från Microsoft kan förskjutas med 1 jämfört med zoomnivåerna med Google.Men de använder definitivt samma projektion så att värdena förblir korrekta för Google.

Svar

Radie @ Ekvatorn 6.378.137 meter exakt ( WGS-84)

Omkrets vid ekvatorn = 40.075.017 meter (2πr)

Zoomnivå 24 använder 2 till 32 (4 294 967 296) pixlar vid omkrets.

Ekvatorialomkrets / 2 32 = .009330692 meter per pixel

Enhet vid Latitude = (Cosine of Latitude) X (Enhet vid ekvatorn)

Zoomnivån fördubblar varje steg.

1 fot (internationell) = 0,3048 meter

Redigera

Jo, det är egentligen inte en legitim fråga till att börja med. Skalförhållanden är relativt tryckta dokument och inte datorskärmar. Vad du behöver för att dessa bilder ska kunna användas med vilken noggrannhet som helst är att känna till dimensionen för varje pixel och sedan skala bilden efter vad du överlagrar den med.

Så för 15-20 år sedan tog någon WGS- 84 som basdata. (notera i ett tidigare inlägg använde någon ett värde på 40.075.160 Jag har sett detta på Wikipedia några platser och det är felaktigt. Det korrekta värdet är 40.075.017

De tog sedan det och delade det med en hel 32-bitars heltal. Detta är ett logiskt val eftersom det ger global noggrannhet till ungefär en centimeter vilket är gott för flygbilder. 32-bitars heltal är också effektiva att lagra och bearbeta.

Varför detta är nivå 24 valdes Jag vet dock inte eftersom någon annan här räknade ut 0 får du ner till en 256 pixel sida för jorden.

Nu för ett exempel på hur du använder ovanstående data. Låt oss säga att jag har en bild vid zoomnivå 20 (så zoomad som de för närvarande låter dig få) Ta 0.009330692 (Zoom 24 vid ekvatorn) dubbla den för zoom 23, igen för zoom 22, igen för zoom 21 och en sista gång för zoom 20. Du borde nu ha 0.149231071 .

Låt oss nu säga att vår bild ligger på latitud 45. Ta Cosine av det (0,707106781) och multiplicera den med vår 0,149231071 och det ger dig 0,105564729 meter s. Det är längden och höjden på en pixel från en bild på latitud 45 vid zoomnivå 20. Om du skärmdumpar en 1000 x 1000 pixelbild av det området är dimensionen 105,56 meter kvadratisk. Om du vill att fötterna ska dela det 0,3048

När det gäller källor har jag huvudsakligen vänt teknik för ungefär 5 år sedan från olika information och dokumentation som jag hittade på webben, inklusive Googles och MS-webbplatser för kartläggningssupport.

Jag har använt hundra gånger och lagt över det med faktiska fältundersökningsdata och det har alltid varit korrekt. Kontrollera det mot någon av tabellerna som publiceras här så kommer siffrorna att matcha.

Kommentarer

  • I ’ jag är inte säker på hur detta svarar på frågan.
  • Jag håller med @Devdatta, kan du ge en källa och något sammanhang.
  • Inte säker på om dessa kommentarer fanns före eller efter redigera, men jag använde det här svaret och det fungerar bra

Svar

Bara gjorde några beräkningar och fick följande resultat:

Google Maps visar en linjal på 1 km (längst ned till vänster på kartan) som är 90 pixlar lång, vid zoomnivå 13. Vilket innebär följande:

Antar vi att skärmupplösningen är 96 dpi eller 36 dpcm, vid zoomnivå 13 har vi 0,4 km (från 36/90) i 1 cm, vilket ger en kartskala på 1: 40 000 för en 96 dpi-skärm.

För olika funktioner på skärmen det bästa är att ta 90 pixlar som grund, eftersom alla siffror kommer att vara runda på alla zoomnivåer, dvs.

  • Zoomnivå 12: 2 km i 90 pixlar
  • Zoomnivå l 11: 4 km i 90 pixlar
  • Zoomnivå 10: 8 km i 90 pixlar

och så vidare.

Observera att detta är en approximation som bör fungerar mer eller mindre bra på mindre skalor snarare än stora.

(Och Google gillar till slut runda nummer …)

Kommentarer

  • Om du tittar noga kommer du ’ att upptäcka att linjens längd ändras beroende på latitud för det område du ’ re visning.
  • Detta gäller endast vid en viss latitud, som @rcoup nämnde. Inte bara längden på skalningsfältet varierar utan också avståndet som den representerar. För att fortsätta detta exempel vid zoom 13 är avståndet som representeras av skalningsfältet 2 km i North Cape (71 ° latitud), 1 km runt 45 ° latitud och 500 m vid ekvator.

Svar

Baserat på all information som tillhandahålls , Jag har byggt en funktion som ger bästa z som tillämpas på en karta när du vill ha en horisontell linje som representerar N% av den visade kartan.

Den visade kartan kännetecknas av sin egen pixelbredd.

 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); }  

Svar

Jag kan inte lägga till en kommentar ännu men det här är en möjlig källa till Petes svar ovan: https://developers.google.com/maps/documentation/javascript/maptypes#MapCoordinates

[…] notera att varje ökande zoomnivå är dubbelt så stor i både x- och y-riktningarna. Därför innehåller varje högre zoomnivå fyra gånger så mycket upplösning som föregående nivå. Till exempel, på zoomnivå 1, består kartan av 4 256×256 pixlar, vilket resulterar i ett pixelutrymme från 512×512. Vid zoomnivå 19 kan varje x- och y-pixel på kartan refereras med ett värde mellan 0 och 256 * 2 19

Svar

Jag beräknade skalorna för fyra zoomnivåer:

Zoomnivå | Skala 20 1: 500 19 1: 1000 18 1: 2000 17 1: 4000

Det verkar som att skalan fördubblas när zoomnivån ökade med ett steg. Så jag hoppas att skalan för zoomnivå 16 blir 1: 8000 och så vidare.

Kommentarer

  • Välkommen till GIS.SE! Kan du ange en källa eller hur beräknades detta?

Svar

Hej, jag tror att jag har beräknat att 1 pixel = 11,627 km i rak linje; inte med hänsyn till jordens radie. Här länken till videon som förklarar hur: https://www.youtube.com/watch?v=Y3cvTeiMJqE&feature=youtu.be . Hoppas att det rensar dig.

Kommentarer

  • Det gör det inte. Värdet på en pixel beror på latitud.
  • Åh, jag förstår inte det komplexet.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *