2008-08-05 10 views
22

Mam kilka par szerokości/długości geograficznej, które odwzorowują znane współrzędne X/Y na mapie (z geograficznie zniekształconą).Jak zmapować szerokość/długość geograficzną na zniekształconą mapę?

Następnie mam jeszcze jedną parę długości/szerokości geograficznej. Chcę go narysować na mapie, jak to tylko możliwe. Jak mam to zrobić?

Najpierw zdecydowałem się na stworzenie układu równań liniowych dla trzech najbliższych punktów długich/długich i obliczyć z nich transformację, ale to nie działa dobrze. Ponieważ jest to system liniowy, nie mogę też używać więcej pobliskich punktów.

Nie można założyć, że na północy jest więcej: wszystko, co masz, to istniejące mapowania lat/długie-> x/y.

EDYCJA: to nie jest projekcja Mercatora, ani nic w tym stylu. Jest arbitralnie zniekształcony dla czytelności (pomyśl o mapie metra). Chcę użyć tylko najbliższych od 5 do 10 mapowań, aby zniekształcenie w innych częściach mapy nie miało wpływu na mapowanie, które próbuję obliczyć.

Co więcej, cała mapa znajduje się na bardzo małym obszarze geograficznym, więc nie trzeba się martwić o kulę ziemską - założenia dotyczące płaskich powierzchni ziemi są wystarczająco dobre.

+0

czy próbowałeś http://trimaps.com? – Gilbou

Odpowiedz

8

Czy są jakieś bardziej szczegółowe informacje na temat tego rodzaju zniekształceń? Jeśli na przykład twoje szerokości i długości geograficzne są "zniekształcone" na mapie 2D za pomocą projekcji Mercator, matematyka konwersji to readily available.

Jeśli mapa jest zniekształcona arbitralnie, istnieje wiele rzeczy, które można wypróbować, ale najprostszym byłoby prawdopodobnie obliczenie weighted average z istniejących mapowań punktów. Twoje ciężary mogą być kwadratem odwrotnym do odległości x/y od nowego punktu do każdego z istniejących punktów.

Niektóre pseudokod:

estimate-latitude-longitude (x, y) 

    numerator-latitude := 0 
    numerator-longitude := 0 
    denominator := 0 

    for each point, 
     deltaX := x - point.x 
     deltaY := y - point.y 
     distSq := deltaX * deltaX + deltaY * deltaY 
     weight := 1/distSq 

     numerator-latitude += weight * point.latitude 
     numerator-longitude += weight * point.longitude 
     denominator += weight 

    return (numerator-latitude/denominator, numerator-longitude/denominator) 

Kod ten daje stosunkowo proste przybliżenie. Jeśli możesz być bardziej precyzyjny na temat sposobu, w jaki projekcja zniekształca współrzędne geograficzne, prawdopodobnie możesz zrobić o wiele lepiej.

0

Problem polega na tym, że kula może być zniekształcona na wiele sposobów i powiedzmy, że wszystkie te punkty na równiku, powiedzmy, nie pomogą ci odłożyć punktów dalej.

Potrzebujesz lepszych punktów "zamknij", wtedy możesz założyć, że te trzy punkty znajdują się na płaszczyźnie czwartej i interpolować - wiedząc, że odległość długości jest funkcją, a nie stałą.

0

Ummm. Być może brakuje mi czegoś na temat tego pytania, ale jeśli masz długie/lat informacji, masz również kierunek na północ?

Wygląda na to, że trzeba odwzorować współrzędne geodezyjne na rzutowany układ współrzędnych. Na przykład osgb do wgs84.

Zajęcia matematyczne są nietrywialne, ale kod wychodzi tylko z kilku linii. Gdybym miał więcej czasu, dodałbym więcej, ale potrzebuję prysznica, więc będę nudny i link do wpisu wikipedia, który jest całkiem niezły.

Uwaga: Zmontowano prysznic pod prysznicem.

2

W porządku. Z teoretycznego punktu widzenia, biorąc pod uwagę, że zniekształcenie jest "arbitralne", a każde rozwiązanie wymaga od ciebie modelowania tego arbitralnego zniekształcenia, oczywiście nie możesz uzyskać "odpowiedzi".Jednak każde rozwiązanie będzie wymagało narzucenia (zwykle niejawnie) jakiegoś modelu zniekształcenia, które może, ale nie musi, odzwierciedlać rzeczywistość sytuacji.

Ponieważ wydaje się, że jesteś najbardziej zainteresowany modelami, które zakładają jakąś lokalną ciągłość mapowania zniekształceń, najbardziej oczywistym wyborem jest ten, który już wypróbowałeś: interpolacja liniowa pomiędzy najbliższymi punktami. Wykraczanie poza to wymagać będzie bardziej wyrafinowanej wiedzy z zakresu analizy matematycznej i numerycznej.

Są jednak niepoprawne, zakładając, że nie można rozszerzyć tego do większej liczby punktów. Możesz za pomocą metody najmniejszych kwadratów błąd. Znajdź liniową odpowiedź, która minimalizuje błąd innych punktów. Jest to prawdopodobnie najprostsze rozszerzenie. Innymi słowy, weź 5 najbliższych punktów i spróbuj wymyślić liniową aproksymację, która minimalizuje błąd tych punktów. I użyj tego. Chciałbym spróbować tego w następnej kolejności.

Jeśli to nie zadziała, wówczas założenie liniowości w obszarze N punktów zostaje zerwane. W tym momencie musisz uaktualnić do modelu kwadratowego lub sześciennego. W tym momencie matematyka stanie się gorączkowa.

Powiązane problemy