Mercatorova projekcia

kulo

Mercatorova projekcia
« kdy: 27. 11. 2015, 13:15:47 »
Mate niekto skusenosti s mercatorovou projekciou? Potrebujem ziskat z pixlov na obrazku koordinaty. Z google si natiahnem obrazok a zobrazim ho v nejakej kontrolke - v mojom pripade Image, co ma WPF. Skusil som pouzit algoritmus, ktory je na nete na prevod pixlov do Lat a Long ale neuspesne, dava to zle vysledky. Velkost kontrolky je tak velka ako velkost mapy, ktoru som zadal do parametrov. V evente kontrolky Image si odchytavam poziciu mysky a X a Y podsuvam do algoritmu na vypocet. Zial to nefunguje. :(


Sten

Re:Mercatorova projekcia
« Odpověď #1 kdy: 27. 11. 2015, 15:50:24 »
Google používá Web Mercator, převodní vztahy jsou na Wikipedii

kulo

Re:Mercatorova projekcia
« Odpověď #2 kdy: 27. 11. 2015, 17:13:05 »
cize ked to budem chciet pouzit v desktop aplikacii, tak to nebude fungovat? mam to chapat tak? wikipediu som pozeral, aj som skusil nejake implementacie, ktore boli na nete. jednoducho neviem, ci velkost kontrolky musi zodpovedat rozmeru mapy, aku mi vrati google

Sten

Re:Mercatorova projekcia
« Odpověď #3 kdy: 27. 11. 2015, 20:40:19 »
cize ked to budem chciet pouzit v desktop aplikacii, tak to nebude fungovat? mam to chapat tak? wikipediu som pozeral, aj som skusil nejake implementacie, ktore boli na nete. jednoducho neviem, ci velkost kontrolky musi zodpovedat rozmeru mapy, aku mi vrati google

Web Mercator je varianta zobrazení Mercator, který se díky jednoduchému zoomování prosadil u webových map, takže ty vzorce jsou trošku jiné (a je nekonformní). Fungovat ale bude klidně i v atlasu.

Ty vzorce na Wiki jsou pro svět o rozměrech 256×256 „pixelů“, pro jiné rozměry je potřeba to převést pomocí vhodných koeficientů. (A pro výpočet λ a φ je samozřejmě potřeba je ještě převrátit.)

Nevím, jestli velikost kontrolky musí odpovídat nahlášenému rozměru mapy. Ale to jde snad jednoduše ověřit ze screenshotu, ne?

Zdenek Henek nereg

Re:Mercatorova projekcia
« Odpověď #4 kdy: 27. 11. 2015, 21:15:37 »
Ahoj,

zkus misto vlastniho reseni nejaky framework Openlayers
http://dev.openlayers.org/examples/web-mercator.js

nebo http://leafletjs.com/

muze ti to usetrit spoustu dalsi prace
 vice prikladu http://dev.openlayers.org/examples/

nebo aspon google api http://stackoverflow.com/questions/7905733/google-maps-api-3-get-coordinates-from-right-click

pokud trvas na vlastnim reseni
tak musis prevest pozici kliku v pixelech na google mercator souradnice a pak transformovat na lat long

google mercator (http://epsg.io/3857) ma souradnice -20026376.39 -20048966.10 20026376.39 20048966.10
napr.
pokud mas celou mapu ve 100 pixelech, tak kazdy pixel reprezentuje 2 * 20048966.10 / 100 metru
a nezapomen, ze web mercator (google mercator ....) nema konstantni scale i kdyz je jednotka jeden metr => k vypoctu vzdalenosti web mercator nepouzivej. Delame to tak, ze prevedeme souradnice do epsg:4326 a pocitame Great circle.

Dalsi projek, ktery by te mohl zajimat je http://proj4js.org/


kulo

Re:Mercatorova projekcia
« Odpověď #5 kdy: 28. 11. 2015, 11:06:46 »
Zdenek Henek:
dakujem za pomoc, len nechapem jednej veci. Ako by som mal pouzit tie existujuce frameworky v mojej WPF aplikacii. To co si mi poslal, vyuziva javascript. Ja to mam tak spravene, ze si natiahnem obrazok do kontrolky a tu poziciu, na ktoru kliknem s myskou, to by som rad previedol do Lat a Long. asi sa stale tocim dookola, kedze nemozem brat do uvahy polohu X a Y mysky, kde som klikol. Alebo existuje nejaky prevod?

kulo

Re:Mercatorova projekcia
« Odpověď #6 kdy: 28. 11. 2015, 17:09:57 »
som z toho nejaky zmateny. Skusil som urobit prevod zo zemepisnej sirky a dlzky na pixle. Toto je Lat: 48.9533881, a toto Long = 18.1742164...vyslo  mi to pre X=577224 a Y=360311. Mapa ma velkost 512x512. no ale to neodpoveda tym bodom X a Y. to by som potreboval premenit, aby som to mohol zobrazit na mape.

Zdenek Henek nereg

Re:Mercatorova projekcia
« Odpověď #7 kdy: 28. 11. 2015, 18:48:07 »
Zdenek Henek:
dakujem za pomoc, len nechapem jednej veci. Ako by som mal pouzit tie existujuce frameworky v mojej WPF aplikacii. To co si mi poslal, vyuziva javascript. Ja to mam tak spravene, ze si natiahnem obrazok do kontrolky a tu poziciu, na ktoru kliknem s myskou, to by som rad previedol do Lat a Long. asi sa stale tocim dookola, kedze nemozem brat do uvahy polohu X a Y mysky, kde som klikol. Alebo existuje nejaky prevod?

Bohuzel nevim co je WPF, ano openlayers i leaflet jsou javascriptove frameworky. Tak nejak jsem predpokladal pouziti na webu.
Sorry.

Musis vedet jakou oblast ten obrazek reprezentuje, pak muzes prevadet pixel x,y na mercator x,y a pak mercator x,y na long,lat

Jak jsem psal v predchozi odpovedi. Pokud mas 512 pixelu ktere odpovidaji treba 5000 metru v merkatoru (max x - min x) pak jeden pixel je 5000/512 a podle toho kam kliknes muzes provest prepocet pixel -> merkator a teprve potom muzes provest prevod merkator -> long, lat

ehmmm

Re:Mercatorova projekcia
« Odpověď #8 kdy: 28. 11. 2015, 19:50:34 »
A co takhle vzit tuzku, papir, nakreslit si to a zkusit si to odvodit sam?

Kolik ti je reku? Uz jste meli ve skole sin, cos, tg, cotg?

kulo

Re:Mercatorova projekcia
« Odpověď #9 kdy: 28. 11. 2015, 20:44:24 »
take mudre reci nepotrebujem. zdrz sa takych komentarov, ked nemas poradit

kulo

Re:Mercatorova projekcia
« Odpověď #10 kdy: 29. 11. 2015, 17:23:44 »
asi kaslem nato, nepodarilo sa mi to nejak rozchodit. prevod mercator pixels na koordinaty a opacne mam, ale ani za tu svinu nemozem najst nikde na nete, ziadny vzorec na prevod z pozicie mysky na mercator pixels.

nobody

Re:Mercatorova projekcia
« Odpověď #11 kdy: 29. 11. 2015, 21:21:33 »
Ale vždyť má pravdu s tím, že je to učivo základní školy. Jednodušší projekce než spherical mercator neexistuje, navíc každý zoomlevel je 2^zoom dlaždic.

Všechny zoom levely tedy mají 1x1, 2x2, 4x4, 8x8, 16x16 atd. dlaždic, a každá dlaždice má 256x256 pixelů. Všechny dlaždice reprezentují povrch koule o poloměru 6378137m. Jednodušší už ten přepočet být nemůže !

http://wiki.openstreetmap.org/wiki/Mercator
http://wiki.openstreetmap.org/wiki/Tiles

kulo

Re:Mercatorova projekcia
« Odpověď #12 kdy: 30. 11. 2015, 10:43:15 »
no okej, tomu rozumiem. Ale ked si ja dam kontrolku s rozmermi 300x200, tak to predsa nebude sediet, ked google mi vrati na zaklade takejto URL: https://maps.googleapis.com/maps/api/staticmap?center=48.9533881,18.1742164&zoom=12&size=512x512 , obrazok s velkostou 512x512

ehmmm

Re:Mercatorova projekcia
« Odpověď #13 kdy: 30. 11. 2015, 11:55:38 »
Ze by trojclenka? Vhodny framwerok neporadim.

vbl

Re:Mercatorova projekcia
« Odpověď #14 kdy: 30. 11. 2015, 12:17:14 »
Podival jsem se na odkazovany obrazek a uz chapu, v cem je problem: obrazek je pohled na vyrez mapy, kde je udany stred (lat/lon) a velikost vyrezu.

Jedine, co je potreba, je mapovat pozici ve vyrezu (tj. pozici mysi nad obrazkem) na pixelovou pouzici v globalni mape. Staci prevest lat/lon stredu (center v URL) na globalni pixelove souradnice v mape. K temto souradnicim se pak jen pripocte vzdalenost "mysi" od stredu obrazku a je hotovo.