Poate cineva să-mi ofere un link (sau câteva detalii) privind raportul real cu cifrele „nivelului de zoom” pentru Google Maps?
de ex Google Maps Nivelul 13 = 1: 20000
Comentarii
Răspuns
Dacă proiectați o hartă, planificați suprapunerea peste google maps sau virtual earth și creând o schemă de plăci, atunci cred că ceea ce căutați sunt scalele pentru fiecare nivel de zoom, utilizați următoarele:
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
Sursă : http://webhelp.esri.com/arcgisserver/9.3/java/index.htm#designing_overlay_gm_mve.htm
Comentarii
- @capdragon Mulțumim. ‘ este o sursă cunoscută (ESRI), dar ne lasă încă ne întrebăm cum au venit cu aceste scale.
- Rațional este critic pentru cine? Nu ‘ nu văd nicio mențiune de rațional în întrebare. Cred că vrea un răspuns direct la întrebarea sa directă.
- @ capac Fără un motiv, este ‘ dificil sau imposibil de distins un răspuns corect dintr-unul incorect. Fără un motiv, cineva trebuie să se bazeze pe autoritatea celui care răspunde. Sunt ‘ destul de sigur că motivul pentru care celelalte răspunsuri din acest thread sunt votate și al tău nu are ‘ t are prea puțin de-a face cu corectitudinea sau simplitatea – a ta este cea mai autoritară și directă din grup – dar mai degrabă are totul de-a face cu raționamentul oferit de ceilalți. BTW ‘ nu am votat în jos pe al tău.
- Mulțumesc: +1. Băieți sunteți probabil geografi sau guru de teledetecție. ‘ sunt doar un dezvoltator GIS care vrea să-l ajute pe tip să-și găsească răspunsul. Un coleg de-al meu (de tip PHD, dublu MIT major) intră într-o oră de curs de fiecare dată când îi pun o întrebare simplă și mă pierde pe parcurs. Nu ‘ nu-i mai pun întrebări (am un master în știință). Înțeleg că altor oameni le place să intre în carnea raționalului și așa mai departe, dar mulți dintre noi suntem prea ignoranți pentru a ști despre ce vorbesc. IMHO erau răspunsuri confuze care nu ‘ nu răspund la întrebarea sa.
- Cântarele au fost alese astfel încât să poată fi împărțite uniform de dale raster care se află la baza 2 , (de ex. 128, 512 …). Bing o face în mod similar msdn.microsoft.com/en-us/library/bb259689.aspx
Răspuns
Am găsit acest răspuns – scris de un angajat Google – acesta ar fi probabil cel mai corect:
Acest lucru nu va fi corect, deoarece rezoluția unei hărți cu proiecția mercator (cum ar fi Google Maps) depinde de latitudine.
Este posibil să se calculeze folosind această formulă:
metersPerPx = 156543.03392 * Math.cos(latLng.lat() * Math.PI / 180) / Math.pow(2, zoom)
Aceasta se bazează pe presupunerea că raza pământului este de 6378137m. Care este valoarea pe care o folosim 🙂
preluat de la: https://groups.google.com/forum/#!topic/google-maps-js-api-v3/hDRO4oHVSeM
BTW – Bănuiesc că:
"latLng.lat()" = map.getCenter().lat() "zoom" = map.getZoom()
Comentarii
- CE ESTE egal cu formula dvs.? Făcând-o pentru lat = 2.92 și zoom 13 am primit 19.08. Ce este 19.08 ce?
- @Rodrigo metri pe pixel
- Pot să mărturisesc că acest răspuns este încă corect și foarte precis trei ani mai târziu. Acesta ar trebui să fie răspunsul acceptat.
- Se aplică acest lucru numai pentru x sau, de asemenea, pentru y ? Folosește Google Maps prin API Javascript aceeași scală pentru ambele axe?
- @OldGeezer Da, funcționează în toate direcțiile. Distorsiunea liniară în orice punct din Mercator este egală în toate direcțiile. Acesta este ‘ unul dintre motivele pentru care este folosit pentru hărțile alunecoase. Când vă apropiați, veți obține o hartă cu distorsiuni rezonabile. odată ce compensați scala, ceea ce face acest răspuns.
Răspuns
Pentru a vă ajuta să înțelegeți matematica (nu este un calcul precis, este doar pentru ilustrare):
- Placă de hărți web Google are 256 de lățimi
-
să spunem monitorul computerului are 100 de pixeli pe inch (PPI). Aceasta înseamnă că 256 de pixeli au o lungime de aproximativ 6,5 cm. Și „s 0,065 m .
-
pe nivel de zoom 0 , întregul 360 de grade de longitudine sunt vizibile într-o singură țiglă . Nu puteți observa acest lucru în Google Maps, deoarece acesta se mută automat la nivelul de zoom 1, dar îl puteți vedea pe harta OpenStreetMap (utilizează aceeași schemă de plăci ).
-
360 degrese pe ecuator sunt egale cu circumferința Pământului, 40.075,16 km, care este 40075160 m
-
divide 40075160 m cu 0,065 m și veți obține 616313361 , care este o scară a nivelului de zoom 0 de pe ecuator pentru un monitor de computer cu 100 DPI
- așa că punctul este că scala depinde de PPI-ul monitorului și de latitudine (datorită proiecției Mercator)
- pentru nivelul de zoom 1, scala este o jumătate din cea a nivelului de zoom 0
- …
- pentru nivelul de zoom N, scala este de o jumătate f din cel al nivelului de zoom N-1
Verificați și: http://wiki.openstreetmap.org/wiki/FAQ#What_is_the_map_scale_for_a_particular_zoom_level_of_the_map.3F
Comentarii
- Scala se bazează de fapt pe DPI al imaginilor generate de hartă. Cele două rezoluții cele mai frecvent utilizate sunt 96DPI (care sunt ‘ s ceea ce reprezintă plăcile Google Maps) și 72DPI.
- Cu 96DPI scara
591657550.500000
este nivelul 0 conform acestui răspuns. Dar conform @CaptDragon este nivelul 1. Ar trebui să iau în considerare să încep de la nivelul 1 pentru a calcula cu Google Maps?
Răspuns
Nu atât de ușor. Având în vedere proiecția, dimensiunea pixelilor țiglelor depinde de latitudinea zonei care vă interesează. Apoi, în ceea ce privește transformarea dimensiunii pixelilor țiglelor în dimensiunea pixelilor ecranului, depinde de ecran și de rezoluția pe care sunt afișate datele, dpi pe care îl folosește ecranul dvs.
Comentarii
- Este corect, mercher sferic (proiecție google) nu ‘ t păstrați scara egală pe măsură ce vă îndepărtați de ecuator. Pentru câteva referințe excelente: Mapnik ‘ s Scala și Scala denumitori articol: trac.mapnik.org/wiki/ScaleAndPpi și, de asemenea, OSM ‘ FAQ: wiki.openstreetmap.org/ wiki / …
Răspuns
Direct răspuns corect autoritar:
591657550.500000 / 2^(level-1)
vă oferă tabelul de mai sus, introducând nivelul de zoom.
Încercați-l live pe jsfiddle.net
Deoarece întrebarea este doar pentru Google MAPS, nu pentru PĂMÂNT, OP nu-i pasă de geometria 3D. Hărțile Google sunt DEJA aplatizate, astfel încât 1 pixel este întotdeauna la aceeași distanță (în DEGREES, care este ceea ce privește o hartă Google), aici și în ecuator ca în poli.
Apropo, ai realizați că undeva în interiorul primului rând de pixeli al unei hărți a lumii, scara este 1: 1?
Comentarii
- Ce înseamnă numărul 591657550.500000 reprezintă?
- @Sergio de ce nu doar 591657550.5?
- ” Numărul provine din rezoluția țiglelor fiind setată la un multiplu de 256 pixeli și din rezoluția ecranului (96 dpi) ” gis.stackexchange.com/a/111589/ 92997
- Nu funcționează – depinde de Latitude, dar formula dvs. nu este
Răspuns
Există un astfel de tabel în documentația a sistemului Virtal Earth Tile de la Microsoft . Dar, după cum a spus GuillaumeC, valorile depind de latitudine și mai departe rezoluția ecranului. Tabelul oferă valori măsurate la ecuator și la o rezoluție a ecranului de 96 dpi.
PS: Nu sunt sigur de acest lucru, dar nivelurile de zoom de la Microsoft ar putea fi deplasate cu 1 în comparație cu nivelurile de zoom cu Google.Dar ei folosesc definitiv aceeași proiecție, astfel încât valorile să rămână corecte pentru Google.
Răspuns
Raza @ Ecuatorul 6.378.137 metri exact ( WGS-84)
Circumferința la ecuator = 40.075.017 metri (2πr)
Nivelul de zoom 24 utilizează 2 până la 32 de puteri (4.294.967.296) pixeli la circumferință.
Circumferența ecuatorială / 2 32 = .009330692 metri pe pixel
Unitate la latitudine = (Cosinus de latitudine) X (unitate la ecuator)
Nivelul de zoom dublează fiecare increment.
1 picior (internațional) = 0,3048 metri
Edit
Ei bine, nu este o întrebare legitimă pentru început. Raporturile de scală sunt relative la documentele tipărite, nu la ecranele computerului. Ceea ce aveți nevoie pentru ca aceste imagini să fie utilizate cu orice precizie este să cunoașteți dimensiunea fiecărui pixel, apoi scalați imaginea în funcție de ceea ce ați suprapus-o.
Deci, în urmă cu 15-20 de ani, cineva a luat WGS- 84 ca date de bază. (rețineți într-o postare anterioară că cineva a folosit o valoare de 40.075.160. Am văzut asta în Wikipedia în câteva locuri și este incorect. Valoarea corectă este 40.075.017
Au luat-o apoi și l-au împărțit la o valoare completă Număr întreg de 32 de biți. Aceasta este o alegere logică, deoarece oferă o precizie globală de aproximativ un centimetru, ceea ce este suficient pentru imagini aeriene. Numerele întregi de 32 de biți sunt, de asemenea, eficiente pentru stocare și procesare.
De ce a fost ales nivelul 24 Nu știu, totuși, deoarece altcineva a lucrat aici 0 te reduce la o placă de 256 pixeli pentru pământ.
Acum, pentru un exemplu de utilizare a datelor de mai sus. Să spunem că am o imagine la nivelul de zoom 20 (la fel de mare, așa cum vă permit să obțineți în prezent) Faceți 0,009330692 (Zoom 24 la ecuator) dublați-l pentru zoom 23, din nou pentru zoom 22, din nou pentru zoom 21 și ultima dată pentru zoom 20. Acum ar trebui să aveți 0,149231071 .
Acum să spunem că imaginea noastră se află la latitudinea 45. Luați Cosinusul acelei (0.707106781) și multiplicați-l cu 0.149231071 și vă va da 0.105564729 metru s. Aceasta este lungimea și înălțimea unui pixel dintr-o imagine la latitudine 45 la nivelul de zoom 20. Dacă capturați pe ecran o imagine de 1000 x 1000 pixeli din acea zonă, dimensiunea este de 105,56 metri pătrați. Dacă vreți picioarele, împărțiți 0,3048
În ceea ce privește sursele, eu am inversat inginerul în urmă cu aproximativ 5 ani, din diverse informații și documentație pe care le-am găsit pe web, inclusiv site-uri de asistență pentru cartografierea Google și MS.
Am folosit această sută de timp și l-am suprapus cu date de sondaj de teren și au fost întotdeauna corecte. Verificați-l cu oricare din tabelele postate aici și numerele se vor potrivi.
Comentarii
- I ‘ Nu sunt sigur cum va răspunde la întrebare.
- Sunt de acord cu @Devdatta, ați putea furniza o sursă și un anumit context.
- Nu sunt sigur dacă aceste comentarii au fost înainte sau după editați, dar am folosit acest răspuns și funcționează excelent
Răspuns
Doar am făcut câteva calcule și am obținut următoarele rezultate:
Google Maps arată o riglă de 1 km (în partea stângă jos a hărții) care are o lungime de 90 de pixeli, la nivelul de zoom 13. Ceea ce înseamnă următoarele:
Presupunând rezoluția ecranului este de 96 dpi sau 36 dpcm, la nivelul de zoom 13 avem 0,4 km (de la 36/90) în 1cm, ceea ce produce o scară a hărții de 1: 40.000 pentru un ecran de 96 dpi.
Pentru diverse operații pe ecran cel mai bun este să luați 90px ca bază, deoarece toate numerele vor fi rotunde la toate nivelurile de zoom, adică
- Nivel de zoom 12: 2km în 90px
- Zoom nivel l 11: 4km în 90px
- Nivel de zoom 10: 8km în 90px
și așa mai departe.
Rețineți că aceasta este o aproximare care ar trebui funcționează mai mult sau mai puțin bine pe scări mai mici decât pe cele mari.
(Și Google îi place numerele rotunde la final …)
Comentarii
- Dacă priviți cu atenție, ‘ veți descoperi că lungimea liniei se schimbă în funcție de latitudinea zonei pe care ‘ re viewing.
- Acest lucru este valabil doar la o anumită latitudine, așa cum a menționat @rcoup. Nu numai lungimea barei de scară variază, ci și distanța pe care o reprezintă. Pentru a continua acest exemplu la zoom 13, distanța reprezentată de bara de scară este de 2 km în North Cape (71 ° latitudine), 1 km în jur de 45 ° latitudine și 500 m la ecuator.
Răspuns
Pe baza tuturor informațiilor furnizate , Am construit o funcție care oferă cel mai bun z aplicat unei hărți atunci când doriți să aveți o linie orizontală care să reprezinte N% din harta afișată.
Harta afișată se caracterizează prin propria lățime a pixelilor.
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); }
Răspuns
Încă nu pot adăuga un comentariu, dar aceasta este o posibilă sursă de răspuns Pete de mai sus: https://developers.google.com/maps/documentation/javascript/maptypes#MapCoordinates
[…] rețineți că fiecare nivel de zoom în creștere este de două ori mai mare atât în direcția x, cât și în cea a y. Prin urmare, fiecare nivel de zoom mai mare conține o rezoluție de patru ori mai mare decât nivelul precedent. De exemplu, la nivelul de zoom 1, harta este formată din 4 dale de 256×256 pixeli, rezultând un spațiu de pixeli de la 512×512. La nivelul de zoom 19, fiecare pixel x și y de pe hartă poate fi referit folosind o valoare între 0 și 256 * 2 19
Răspuns
Am calculat scalele pentru patru niveluri de zoom:
Nivel zoom | Scala 20 1: 500 19 1: 1000 18 1: 2000 17 1: 4000
Se pare că scara se dublează pe măsură ce nivelul de zoom a crescut cu un pas. Așadar, sper că scala pentru nivelul de zoom 16 va fi 1: 8000 și așa mai departe.
Comentarii
- Bine ați venit la GIS.SE! Puteți furniza o sursă sau cum a fost calculat acest lucru?
Răspuns
Bună, cred că am calculat asta 1 pixel = 11,627 km în linie dreaptă; neavând în vedere raza pământului. Aici linkul videoclipului care explică cum: https://www.youtube.com/watch?v=Y3cvTeiMJqE&feature=youtu.be . Sper că asta îți curăță mintea.
Comentarii
- Nu. Valoarea unui pixel depinde de latitudine.
- Înțeleg, nu în complexul în care am intrat.
Zoom level set meters: ${meters}
); var zoomfactor = 1; if (metri < 1128) {zoomfactor = 15; } else if ((metri > 1128) & & (metri < 2256)) {zoomfactor = 14; } else if ((metri > 2256) & & (metri < 4513)) {zoomfactor = 13; } else if ((metri > 4513) & & (metri < 9027)) {zoomfactor = 12; } else if ((metri > 9027) & & (metri < 18055)) {zoomfactor = 11; } else if ((metri > 18055) & & (metri < 36111)) {zoomfactor = 10; } else if ((metri > 36111) & & (metri < 72