Obecnie rozwijam witrynę mapowania OpenLayers. Pomiary można wykonać za pomocą narzędzia linii i narzędzia obszaru. Oba są obecnie ustawione do obliczania pomiarów geodezyjnych zgodnie z interfejsem API OpenLayers .
Używam pomiarów geodezyjnych, a nie płaskich, ponieważ podczas testowania przez użytkowników ludzie kwestionowali pomiary narzędzia dla odległości, które już znali (takich jak jazda między miastami).
Nową funkcją witryny jest możliwość narysowania okręgu na mapie o określonym promieniu. OpenLayers pozwala tylko rysować koła przy użyciu odległości planarnych, więc gdy użytkownik mierzy okrąg za pomocą narzędzia do pomiaru geodezyjnego, wartości nie są zgodne. Na zdjęciu poniżej promień planety okręgu wynosi 10 km, ale pomiar linii geodezyjnej dla średnicy wynosi 12 km.
Wyraźnie pozostawi to użytkownikowi (i mnie) zastanawianie się, co jest poprawne.
Patrząc na tę odpowiedź , wydaje się, że większość komputerowych systemów GIS „ignoruje” ten problem i zwraca płaskie pomiary i odległości. Więc jaka jest najlepsza praktyka pod względem interfejsu użytkownika i dokładności w zakresie pomiarów planarnych i geodezyjnych?
Aktualizacja
Znalazłem ten przykład Google, który ilustruje problem promieni i projekcji Mercatora:
http://maps.forum.nu/gm_sensitive_circle2.html
Kod JavaScript do narysowania okręgu jest następujący:
var lat1 = (PI/180)* center.lat(); // radians
var lng1 = (PI/180)* center.lng(); // radians
for (var a = 0 ; a < 361 ; a++ ) {
var tc = (PI/180)*a;
var y = asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc));
var dlng = atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(y));
var x = ((lng1-dlng+PI) % (2*PI)) - PI ; // MOD function
var point = new GLatLng(parseFloat(y*(180/PI)),parseFloat(x*(180/PI)));
circlePoints.push(point);
bounds.extend(point);
}
Czy ten okrąg uwzględnia krzywiznę ziemi?
Ostatnia aktualizacja
Kod roboczy opublikowany na stronie http://geographika.co.uk/creating-a-geodesic-circle-in-openlayers
źródło
Odpowiedzi:
Jeśli przygotowujesz domowe przeglądanie w przeglądarce, możesz uzyskać „koło” (nie będzie okrągłe na ekranie z powodu projekcji; raczej przybliżone przez wielokąt w / tyle punktów, ile chcesz narysować), użyj bezpośrednia forma obliczeń geodezyjnych: dany punkt, kierunek (azymut) i odległość daje wynikowy punkt. Szczegóły Gory: http://en.wikipedia.org/wiki/Vincenty%27s_formulae#Direct_Method
Wygląda na to, że ktoś już wykonał tłumaczenie javascript: http://www.movable-type.co.uk/scripts/latlong-vincenty-direct.html . Szczęściarz!
Aby zakończyć:
Twoje zdrowie!
źródło
Aby uzyskać okrąg geodezyjny, możesz użyć operacji buforowania w usłudze geometrii ESRI.
Dostępny jest dostępny tutaj .
źródło