Proszę odnieść się do przykładu i odpowiedniego obrazu.
Ja zamierzamy uzyskać następujące: dostarczenie dwóch miejscach (łac / ng), które są pokazane poniżej jako A i B . Na tej podstawie zostanie narysowana linia wirtualna, a następnie obliczona zostanie odległość między tą linią a C (w dowolnym pomiarze).
Osiągnąłem to obecnie w Google Maps API v3, ale chciałbym również móc to zrobić za kulisami w moim wybranym języku. Wszelkie wskazówki / pomysły będą mile widziane!
geolocation
mathematics
Więzień
źródło
źródło
Odpowiedzi:
Najkrótsza długość to wymagany dystans, chyba że się mylę?
źródło
None
gdy istnieje uzasadnione rozwiązanie. Problem polega na tym, że ostatni warunek zakłada X1 <X2 i Y1 <Y2, czego nie zawsze można zapewnić. Potrzebny jest lepszy test wzajemności.Może robię to zbyt skomplikowane, ale to, czego chcesz, to odległość od punktu do linii. Jest to odległość od punktu wzdłuż AB, który łączy AB z C linią prostopadłą do AB. Ten wektor prostopadły do AB podano przez
(Użyłem nawiasów kwadratowych do zdefiniowania wektora lub tablicy dwuelementowej). Odległość między C [xp, yp] a punktem A wynosi
Odległość między linią a C jest tylko rzutem u na v. Jeśli założymy mod (v) = 1 (po prostu normalizujemy), to
Jedyną komplikacją jest to, że prawdopodobnie chcesz się upewnić, że twoje współrzędne nie są parami lat / log WGS84, ale są rzutowane (lub używasz współrzędnych geodezyjnych). Możesz do tego użyć OGR lub Proj4 .
źródło
Będąc trochę niechętnym całej tej matematyce, podchodziłbym do tego z innej perspektywy. Uczyniłbym to „rzeczywistą” linią, a nie linią wirtualną, a następnie używałbym istniejących narzędzi.
Jeśli A i B mają wspólny atrybut, możesz połączyć je poprzez narysowanie linii (Kosmo GIS ma narzędzie, które utworzy linie z punktów, i sądzę, że jest do tego również wtyczka QGIS). Po uzyskaniu linii funkcja „near” na warstwie punktowej „C” da ci odległość do linii. Niech oprogramowanie zajmie się matematyką!
źródło
Jeśli korzystasz z java na Androidzie, jest to tylko jedna linia z funkcją biblioteki
distanceToLine:
Oblicza odległość na kuli między punktem p a segmentem linii zaczynającym się kończyć.
Parametry: p - punkt, który należy zmierzyć
start - początek odcinka linii
end - koniec segmentu linii
Zwraca: odległość w metrach (przy założeniu kulistej ziemi)
Po prostu dodaj bibliotekę do swojego
źródło