Voiko kukaan antaa minulle linkin (tai joitain yksityiskohtia) Google Mapsin todellisesta suhteesta ”zoomaustasoon”?
esim Google Maps, taso 13 = 1: 20000
kommentit
- Tämän toiminnon tekemiesi ensimmäisten tietojen perusteella ehkä joku voisi käyttää sitä! function setZoomLevel (metriä) {//console.log(
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
Vastaa
Jos suunnittelet karttaa, jonka aiot peittää Google Mapsin tai virtuaalimaapallon yli ja luomalla laatoitusohjelma luulen, että mielestäni etsimäsi ovat kunkin zoomaustason asteikot, käytä näitä:
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
Lähde : http://webhelp.esri.com/arcgisserver/9.3/java/index.htm#designing_overlay_gm_mve.htm
Kommentit
- @capdragon Kiitos. Se ’ on tunnettu lähde (ESRI), mutta se saa meidät edelleen miettimään, miten he keksivät nämä asteikot.
- Järkevä on kenelle kriittinen? En näe ’ näe kysymyksessä mitään rationaalista mainintaa. Uskon, että hän haluaa suoraviivan vastauksen suoraan kysymykseensä.
- @ korkki ilman syytä ’ on vaikeaa tai mahdotonta erottaa oikea vastaus väärästä vastauksesta. Ilman syytä joudutaan luottamaan vastaajan auktoriteettiin. Olen ’ m melko varma, että syy, miksi muut tämän ketjun vastaukset äänestetään ja sinun ei ole ’ t ole juurikaan tekemistä oikeellisuus tai suoraviivaisuus – sinun on kaikkein arvovaltaisin ja suoraviivaisin joukko – mutta sillä on pikemminkin kaikki tekemistä muiden esittämien perustelujen kanssa. BTW En ole ’ äänestänyt teitä alas.
- Kiitos: +1. Olette luultavasti maantieteilijöitä tai kaukokartoitusguruja. Olen ’ vain GIS-kehittäjä, joka haluaa auttaa kaveria vastauksen saamiseen. Kollegani (PHD-tyyppi, kaksinkertainen MIT-pääaine) menee tunnin luentoon joka kerta, kun esitän hänelle yksinkertaisen kysymyksen, ja menettää minut matkan varrella. En kysy häneltä enää ’ (minulla on tieteen maisteri). Ymmärrän, että muut ihmiset haluavat päästä rationaalisen ja niin edelleen lihaan, mutta monet meistä ovat liian tietämättömiä tietääkseen mistä he puhuvat. IMHO he olivat hämmentäviä vastauksia, jotka eivät
t vastaa hänen kysymykseensä.
Vastaus
Löysin tämän Googlen työntekijän kirjoittaman vastauksen – tämä olisi todennäköisesti tarkin:
Tämä ei ole tarkka, koska kartan resoluutio merkatorin projektiolla (kuten Google maps) riippuu leveysasteesta.
Laskeminen on mahdollista tällä kaavalla:
metersPerPx = 156543.03392 * Math.cos(latLng.lat() * Math.PI / 180) / Math.pow(2, zoom)
Tämä perustuu oletukseen, että maapallon säde on 6378137m. Mikä on käytettävä arvo 🙂
otettu: https://groups.google.com/forum/#!topic/google-maps-js-api-v3/hDRO4oHVSeM
BTW – Oletan, että:
"latLng.lat()" = map.getCenter().lat() "zoom" = map.getZoom()
kommentit
- MITÄ vastaa kaavaasi? Kun tein sen lat = 2.92 ja zoomaus 13, sain 19.08. Mikä on 19.08 mitä?
- @Rodrigo metriä pikseliä kohti
- Voin todistaa, että tämä vastaus on edelleen oikea ja erittäin tarkka kolme vuotta myöhemmin. Tämän pitäisi olla hyväksytty vastaus.
- Koskeeko tämä vain x vai myös y ? Käyttääkö Google Maps Javascript-sovellusliittymän kautta samaa asteikkoa molemmille akseleille?
- @OldGeezer Kyllä, se toimii kaikkiin suuntiin. Lineaarinen vääristymä missä tahansa Mercatorin kohdassa on yhtä suuri kaikkiin suuntiin. ’ on yksi syy siihen, miksi sitä käytetään liukkaisiin karttoihin. Kun lähennät sisäänpäin, saat kohtuullisen pienen vääristymäkartan. kun kompensoit mittakaavaa, mitä tämä vastaus tekee.
Vastaa
Auttaa sinua ymmärtämään matematiikkaa (ei tarkka laskelma, se on vain havainnollistamista varten):
- Googlen verkkokarttaruudussa on 256 pikseliä leveyttä
-
sanotaan tietokonenäytössä on 100 pikseliä tuumalla (PPI). Tämä tarkoittaa, että 256 pikseliä on noin 6,5 cm. Ja että ”s 0,065 m .
-
zoomaustasolla 0 , koko 360 astetta pituusasteet ovat näkyvissä yhdessä ruudussa . Et voi tarkkailla tätä Google Mapsissa, koska se siirtyy automaattisesti zoomaustasolle 1, mutta näet sen OpenStreetMap -kartalla (siinä käytetään samaa laatoituskaaviota) ).
-
Päiväntasaajan 360 asteen alenema on yhtä suuri kuin Maan ympärysmitta, 40 075,16 km, joka on 40075160 m
-
jako 40075160 m kanssa 0,065 m ja saat 616313361 , joka on asteikko zoomaustasoa 0 päiväntasaajassa tietokoneelle, jossa on 100 DPI
- Joten asia on, että asteikko riippuu näytön PPI: stä ja leveydestä (Mercator-projektion takia).
- zoomaustasolla 1 asteikko on puolet zoomaustasosta 0
- …
- zoomaustasolle N asteikko on yksi puolikas f zoomaustasosta N-1
Katso myös: http://wiki.openstreetmap.org/wiki/FAQ#What_is_the_map_scale_for_a_particular_zoom_level_of_the_map.3F
Kommentit
- Mittakaava perustuu itse asiassa luotujen karttakuvien DPI-arvoon. Kaksi yleisimmin käytettyä päätöslauselmaa ovat 96DPI (’ s, mitä Google-karttaruudut ovat) ja 72DPI.
- 96DPI: llä asteikko
591657550.500000
on tämän vastauksen mukaan taso 0. Mutta @CaptDragon on tason 1 mukaan. Harkitsen aloittamista tasolta 1 laskeaksesi Google Mapsilla?
Vastaa
Ei niin helppoa. Kun otetaan huomioon projektio, ruutupikselien koko riippuu sinua kiinnostavan alueen leveysasteesta. Sitten ruutujen pikselikoon muuntamiseksi näytön pikselikoon mukaan se riippuu näytöstä ja näytön tarkkuudesta, dpi, jota näyttösi käyttää.
Kommentit
- Se on oikein, pallomainen merkkijono (google-projektio) ei ’ t säilytä yhtä suuri asteikko, kun siirryt päiväntasaajalta. Joitakin erinomaisia viitteitä varten: Mapnik ’ s Scale and Scale denominators Article: trac.mapnik.org/wiki/ScaleAndPpi ja myös OSM ’ s UKK: wiki.openstreetmap.org/ wiki / …
Vastaa
Suoraviivainen arvovaltainen oikea vastaus:
591657550.500000 / 2^(level-1)
se antaa yllä olevan taulukon ja antaa zoomaustason.
Kokeile suorana jsfiddle.net
Koska kysymys koskee vain Google MAPSia, ei maata, OP ei välitä 3D-geometriasta. Google Maps on jo litistetty, joten 1 pikseli on aina sama etäisyys (DEGREES, mikä koskee Google-karttaa), täällä ja ecuatorissa kuin pylväissä.
Muuten, Tiesitkö ymmärrätkö, että jossain maailman kartan ensimmäisen pikselirivin sisällä asteikko on 1: 1?
Kommentit
- Mitä numero 591657550.500000 edustaa?
- @Sergio miksi ei vain 591657550.5?
- ” Numero tulee siitä, että ruutujen tarkkuus asetetaan moninkertaiseksi 256 pikseliä ja näytön tarkkuudesta (96 dpi) ” gis.stackexchange.com/a/111589/ 92997
- Ei toimi – se riippuu Latitudesta, mutta kaava ei ole
Vastaa
Tällainen taulukko on Microsoftin Virtal Earth Tile System -dokumentaatiossa . Mutta kuten GuillaumeC sanoi, arvot riippuvat leveysaste ja edelleen näytön tarkkuus. Taulukko antaa arvot mitattuna päiväntasaajalla ja näytön tarkkuudella 96 dpi.
PS: En ole varma siitä, mutta Microsoftin zoomaustasoja voidaan siirtää yhdellä verrattuna zoomaustasoihin Google.Mutta he käyttävät lopullisesti samaa projektiota, jotta arvot pysyvät oikeina Googlelle.
Vastaus
Säde @ päiväntasaaja tarkka 6378137 metriä ( WGS-84)
Ympyrä päiväntasaajalla = 40 075 017 metriä (2πr)
Zoomaustaso 24 käyttää 2 – 32 tehopikseliä (4 294 967 296) kehällä.
Päiväntasaajan ympärysmitta / 2 32 = .009330692 metriä pikselissä
Yksikkö leveysasteella ((kosinin leveysaste) X (yksikkö päiväntasaajalla)
Zoomaustaso kaksinkertaistaa jokaisen lisäyksen.
1 jalka (kansainvälinen) = 0,3048 metriä. Mittasuhteet ovat suhteessa painettuihin asiakirjoihin, ei tietokoneen näyttöihin. Tarvitset, jotta näitä kuvia voidaan käyttää missä tahansa tarkkuudessa, on tietää jokaisen pikselin ulottuvuus ja skaalata sitten kuva sen mukaan, millainen se on.
Joten 15-20 vuotta sitten joku otti WGS- 84 perustietona. (huomaa edellisessä viestissä joku käytti arvoa 40 075 160, olen nähnyt tämän Wikipediassa muutamassa paikassa ja se on väärä. Oikea arvo on 40 075 017
He ottivat sen ja jakoivat sen kokonaisella 32-bittinen kokonaisluku. Tämä on looginen valinta, koska se tuottaa globaalin tarkkuuden noin senttimetriin, mikä riittää ilmakuville. 32-bittiset kokonaisluvut ovat myös tehokkaita tallentaa ja käsitellä.
Miksi tämä on taso 24, valittiin En kuitenkaan tiedä, että joku muu täällä selvittänyt 0 johtaa sinut yhteen 256 pikselin ruutuun maapallolle.
Nyt esimerkki yllä olevien tietojen käytöstä. Sanotaan, että minulla on kuva zoomaustasolla 20 (niin zoomaettuna kuin ne tällä hetkellä antavatkin) Ota 0.009330692 (zoomaus 24 päiväntasaajassa) kaksinkertainen zoomaukseen 23, jälleen zoomaukseen 22, jälleen zoomaukseen 21 ja viimeinen kerta zoomaukseen 20. Sinulla pitäisi nyt olla 0.149231071 .
Oletetaan nyt, että kuvamme on 45. leveysasteessa. Ota sen kosini (0,707106781) ja kerro se 0,149231071: llä, niin saat 0,105564729 metrin s. Se on yhden pikselin pituus ja korkeus 45: n leveysasteella olevasta kuvasta zoomaustasolla 20. Jos kuvakaappaat 1000 x 1000 pikselin kuvan tältä alueelta, ulottuvuus on 105,56 metriä neliö. Jos haluat jakaa jalat, että 0.3048
Lähteiden osalta olen kääntänyt insinöörin suunnilleen 5 vuotta sitten erilaisista tiedoista ja asiakirjoista, jotka löysin verkosta, mukaan lukien Googlen ja MS: n kartoitustukisivustot.
Olen käyttänyt tätä sataa kertaa ja päällekkäin sen tosiasiallisten kenttätutkimustietojen kanssa ja se on aina ollut oikein. Tarkista se mihin tahansa täällä lähetettyihin taulukoihin, ja numerot vastaavat toisiaan.
Kommentit
- I ’ En ole varma, miten tämä vastaa kysymykseen.
- Olen samaa mieltä @Devdatta kanssa. Voisitteko antaa lähteen ja jonkin kontekstin.
- Etkö ole varma, olivatko nämä kommentit ennen vai jälkeen muokkaus, mutta käytin tätä vastausta ja se toimii hyvin.
Vastaus
Suoritin juuri joitain laskelmia ja sain seuraavan tulokset:
Google Maps näyttää 1 km viivaimen (kartan vasemmassa alakulmassa), jonka pituus on 90 pikseliä, zoomaustasolla 13. Tämä tarkoittaa seuraavaa:
Oletetaan näytön tarkkuus on 96 dpi tai 36 dpcm, zoomaustasolla 13 meillä on 0,4 km (36/90) 1 cm: ssä, mikä antaa kartan mittakaavan 1: 40 000 96 dpi: n näytölle.
Näytön eri toimintoihin paras on ottaa perusta 90 kuvapistettä, koska kaikki numerot ovat pyöreät kaikilla zoomaustasoilla, ts.
- Zoom-taso 12: 2 km 90 kuvapisteen kanssa
- Zoom-leveys l 11: 4 km 90 kuvapisteessä
- Zoom-taso 10: 8 km 90 kuvapisteessä
ja niin edelleen.
Huomaa, että tämä on likiarvo, jonka pitäisi toimi enemmän tai vähemmän hienosti pienemmissä mittakaavoissa eikä suurissa.
(Ja Google pitää lopulta pyöreistä numeroista …)
Kommentit
- Jos katsot tarkkaan, ’ huomaat, että viivan pituus muuttuu sen alueen leveyspiiristä riippuen, ’ uudelleenkatselu.
- Tämä pätee vain tietyllä leveysasteella, kuten @rcoup mainitsi. Paitsi mittakaavan pituuden vaihtelee myös sen edustama etäisyys. Jatkaaksesi tätä esimerkkiä zoomauksessa 13, mittakaavapalkin edustama etäisyys on 2 km Pohjois-Kapissa (71 ° leveysaste), 1 km 45 ° leveysaste ja 500 m ekvatorissa.
Vastaa
Kaikkien annettujen tietojen perusteella , Olen rakentanut toiminnon, joka antaa parhaan z-kartan sovelluksen, kun haluat vaakasuoran viivan, joka edustaa N% näytetystä kartasta.
Esitetylle kartalle on ominaista oma pikselileveys.
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); }
vastaus
En voi vielä lisätä kommenttia, mutta tämä on mahdollinen Peten vastauksen lähde yllä: https://developers.google.com/maps/documentation/javascript/maptypes#MapCoordinates
[…] Huomaa, että jokainen nouseva zoomaustaso on kaksi kertaa suurempi sekä x- että y-suunnassa. Siksi jokainen korkeampi zoomaustaso sisältää neljä kertaa enemmän resoluutiota kuin edellinen taso. Esimerkiksi zoomaustasolla 1 kartta koostuu 4 256×256 pikselin ruudusta, jolloin pikselitila on 512×512. Zoomaustasolla 19 jokaiseen x ja y pikseliin kartalla voidaan viitata käyttämällä arvoa 0-256 * 2 19
vastaus
Laskin asteikot neljälle zoomaustasolle:
Zoom-taso | Skaala 20 1: 500 19 1: 1000 18 1: 2000 17 1: 4000
Näyttää siltä, että asteikko kaksinkertaistuu, kun zoomaustaso nousee yhdellä askeleella. Toivon siis, että zoomaustason 16 asteikko on 1: 8000 ja niin edelleen.
Kommentit
- Tervetuloa GIS.SE-sivustoon! Voitteko antaa lähteen tai miten tämä laskettiin?
Vastaus
Hei luulen, että olen laskenut sen 1 pikseli = 11,627 km suorassa linjassa; ei oteta huomioon maan sädettä. Tässä linkki videoon, joka selittää miten: https://www.youtube.com/watch?v=Y3cvTeiMJqE&feature=youtu.be . Toivottavasti se puhdistaa mielesi.
Kommentit
- Ei. Pikselin arvo riippuu leveysasteesta.
- Voi kyllä, ei sitä kompleksia, johon menin.