2010-09-19 12 views
5

Mam współrzędne geograficzne (latidute & długość geograficzna) niektórych miast i chciałbym uzyskać współrzędne x, y, aby można je wykreślić na mapie.geo współrzędne geograficzne (lat, lng) do mapowania (x, y)

Mapa jest standardowa, na przykład http://www.wordtravels.com/images/map/Spain/Fuerteventura_map.jpg.

Próbowałem kilka z formularza znalazłem, ale nie wydaje się naprawdę działa :(. Prosty kod javascript lub rubinowy byłoby najlepsze :)

Odpowiedz

2

oprócz powyższych odpowiedzi, dostępna jest biblioteka proj4js z otwartym źródłem, która wykonuje przekształcenia między różnymi rzutami map.jest on używany wewnętrznie przez OpenLayers do tego rodzaju rzeczy i obsługuje wiele popularnych projekcji i układów współrzędnych.

+1

Myśląc dalej, zakładając, że jest to standardowy bitmapy projekcja, to powinno działać, ale trzeba by określić własne parametry projekcji (południk, skalowanie, itp). To powinno być możliwe, ale może nie być dla nowicjusza z projekcją mapy. – winwaed

+1

Dzięki, udało mi się wyodrębnić potrzebne formuły ze wspomnianej biblioteki :) – gucki

0

Nie znajdziesz to łatwe, chyba że pracujesz na bardzo mały skali (i blisko równika). Wikipedia Geographic coordinate system to dobry początek ...

Łatwiejszą ścieżką może być użycie czegoś takiego jak web mapping i trzymanie się szerokości i długości geograficznej.

3

Istnieje wiele sposobów podejścia do tego problemu z różnym stopniem dokładności. Wszystkie jednak sprowadzają się do wykonania projekcji odpowiadającej mapie.

Jeśli wiesz, że twoja mapa jest odmianą odwzorowania Mercatora, to współrzędne długie/długie mogą być po prostu traktowane jako X/Y, skalowane i odpowiednio przetłumaczone. Oznacza to, że znajdziesz prosty ax + b oraz cy + d, które wykonają zadanie.

Jeśli twoja mapa nie jest projekcją Mercatora (prawdopodobnie nie jest tak, jeśli stara się uzyskać spójność skali, tak jak to się wydaje), najlepiej jest założyć, że jest to rzut "ziemia-styczna" . (To działa dobrze dla małych landmas.) W takim przypadku musisz najpierw rzutować Lat/Long w trójwymiarowy układ współrzędnych.

z=sin(lat) 
x=cos(lat)*sin(long) 
y=cos(lat)*cos(long) 

Pozytywne punkty z na biegunie północnym. Pozytywne punkty y do 0, 0 i dodatnie x punkty do lat 0 długie 90 (wschód) i dodatnie szerokości/długie to północ i wschód. Oczywiście najpierw musisz zamienić na radiany.

Wszystko to zakłada kulistą Ziemię, co nie jest do końca prawdą, ale jest wystarczająco blisko, chyba że strzelasz dalekimi pociskami moździerzowymi.

W każdym razie, gdy już masz swój XYZ, musisz obrócić i skalować mapę. Aby obrócić wokół osi Z, po prostu odejmij długość bazową przed rzutowaniem na trzy wymiary. Zrób to, aby wyśrodkować mapę na zerowej długości geograficznej, aby była najłatwiejsza do matematyki.

Po wykonaniu tej czynności wystarczy obrócić globus do przodu, dopóki oryginalna mapa nie będzie widoczna z przodu. Wykonaj to z obrotem 2-d na osi y-z. Użyj http://en.wikipedia.org/wiki/Coordinate_rotations_and_reflections, aby obliczyć tę część.

Wreszcie, twoje współrzędne x, z będą dobrze dopasowane do współrzędnych x, y twojej mapy, dla odpowiedniej skali/translacji, jak opisano wcześniej.

Powiązane problemy