2011-12-21 12 views
9

W moim projekcie muszę znaleźć współrzędne (szerokość geograficzną) z jednego punktu w odległości 500 metrów (może to być dowolna współrzędna losowa lub tablica współrzędnych wokół mojego punktu). Jak mogę to zrobić?Konwertuj mierniki na długość geograficzną z dowolnego punktu

Uwaga: Potrzebuję tego, aby znaleźć wiele ścieżek między punktami innymi niż najkrótsze, które są nam zwracane przez Google Maps Directions Api..Tak używając mojej metody, zdefiniuję środek drogi od A do B, a następnie znajdź pewne współrzędne poniżej i powyżej tej centralnej pozycji i użyj tego jako innego punktu drogi do przejścia z punktu A do punktu B - Myślę, że to może mi pomóc znaleźć wiele ścieżek ...

Jakieś sugestie od profesjonalistów GIS?

EDIT: UTM konwersja jest najbardziej korzystne jeden dla tych obliczeń, a ja utworzyliśmy klasy UTM Java jeśli ktoś potrzebuje ..

Odpowiedz

5

Jeśli rozumiem pytanie rację masz znanym punktem w Lat/Długa i musisz obliczyć "Lat/Long" innego punktu lub punkt 500m od punktu startowego.

Jeśli to robisz, masz kilka opcji, z których większość obejmuje specjalistyczne interfejsy API GIS. Jednak domyślam się, że jesteś programistą/matematykiem, a nie Geografem, więc możesz zdecydować się na użycie formuły Haversine. Możesz znaleźć dyskusję na ten temat here plus formuła.

Jedynym ograniczeniem jest to, że praca, z którą pracujesz (500m jest dość mała) i że Ziemia jest daleka od idealnej kuli, a nawet lekko spłaszczonej sferoidy. Jest lokalnie "nierówny" i może wyłożyć twoje obliczenia. Jeśli potrzebujesz większej dokładności, będziesz musiał wziąć pod uwagę te niedoskonałości, używając odpowiedniego lokalnego Datum (model Ziemi - jest ich wiele np. Patrz EPSG list), a do tego prawdopodobnie będziesz musiał zacząć korzystać z bibliotek GIS, jak matematyka bardzo szczegółowe inaczej.

+0

Wygląda na to, że jest to dobra metoda. Wiedzę, że próbuję to samo, używając UTM do metody obliczania [szerokości, długości] i odwrotnie, aby znaleźć odpowiednie współrzędne i długości, długie podczas obliczeń. Myślę, że ta metoda jest taka sama jak twoja, ale tylko formuły są różne, ale czytałem, że formuły UTM mogą konwertować lokalizacje dokładnie w centymetrach ... Btw wielkie dzięki za odpowiedź! –

+2

UTM już uwzględnia lokalną deformację powierzchni Ziemi, dzieląc Ziemię na dużą liczbę stref, z których każda ma własny punkt odniesienia. Dlatego jest znacznie dokładniejsza niż, powiedzmy, WGS, który wykorzystuje pojedynczą projekcję dla całej Ziemi. Jeśli potrzebujesz narzędzi do konwersji na współrzędne kartezjańskie - obliczyć punkty i przekonwertować z powrotem na długość/długość bez martwienia się o matematykę, sprawdź GDAL/OGR (a zwłaszcza OSR - który jest interfejsem API odwołującym się do przestrzeni) – MappaGnosis

0

Jest to kod używany przez google mapy (SphericalUtil.java)

// from SphericalUtil.java 
    // compile 'com.google.maps.android:android-maps-utils:0.4.4' 
    public static LatLng computeOffset(LatLng from, double distance, double heading) { 
    distance /= 6371009.0D; //earth_radius = 6371009 # in meters 
    heading = Math.toRadians(heading); 
    double fromLat = Math.toRadians(from.latitude); 
    double fromLng = Math.toRadians(from.longitude); 
    double cosDistance = Math.cos(distance); 
    double sinDistance = Math.sin(distance); 
    double sinFromLat = Math.sin(fromLat); 
    double cosFromLat = Math.cos(fromLat); 
    double sinLat = cosDistance * sinFromLat + sinDistance * cosFromLat * Math.cos(heading); 
    double dLng = Math.atan2(sinDistance * cosFromLat * Math.sin(heading), cosDistance - sinFromLat * sinLat); 
    return new LatLng(Math.toDegrees(Math.asin(sinLat)), Math.toDegrees(fromLng + dLng)); 
} 

go używać, po prostu trzeba wprowadzić centerLatLng, odległość w metrach, a nagłówek w stopniach od centerLatLng.

możesz zmienić formułę na język swoich preferencji.

Powiązane problemy