Bitte beachten Sie das Beispiel und das entsprechende Bild.
Ich möchte Folgendes erreichen: Geben Sie zwei Standorte (lat / lng) an, die im Folgenden als A und B dargestellt sind . Daraus würde eine virtuelle Linie gezogen und dann der Abstand zwischen dieser Linie und C berechnet (bei jeder Messung).
Ich habe dies derzeit in Google Maps API v3 erreicht, möchte dies aber auch hinter den Kulissen in der Sprache meiner Wahl durchführen können. Alle Tipps / Ideen wäre sehr dankbar!
geolocation
mathematics
Häftling
quelle
quelle
Antworten:
Die kürzeste Länge ist die Entfernung, die Sie benötigen, es sei denn, ich irre mich?
quelle
None
wenn eine legitime Lösung vorhanden ist. Das Problem ist, dass die letzte Bedingung X1 <X2 und Y1 <Y2 annimmt, was nicht immer sichergestellt werden kann. Ein besserer Test der Übereinstimmung ist erforderlich.Vielleicht mache ich es zu kompliziert, aber was Sie wollen, ist die Entfernung von einem Punkt zu einer Linie. Dies ist der Abstand von einem Punkt entlang AB, der AB mit C mit einer zu AB orthogonalen Linie verbindet. Dieser Vektor senkrecht zu AB ist gegeben durch
(Ich habe die eckigen Klammern verwendet, um einen Vektor oder ein Array mit zwei Elementen zu definieren.) Der Abstand zwischen C [xp, yp] und Punkt A beträgt
Der Abstand zwischen der Linie und C ist nur die Projektion von u auf v. Wenn wir mod (v) = 1 annehmen (nur normalisieren), dann
Die einzige Schwierigkeit besteht darin, dass Sie wahrscheinlich sicherstellen möchten, dass Ihre Koordinaten keine WGS84-Lat / Log-Paare sind, sondern projiziert (oder geodätische Koordinaten verwenden). Sie können hierfür OGR oder Proj4 verwenden .
quelle
Da ich all dieser Mathematik auch ein bisschen abgeneigt bin, würde ich es aus einem anderen Blickwinkel betrachten. Ich würde es zu einer "tatsächlichen" Linie und nicht zu einer virtuellen Linie machen und dann vorhandene Tools verwenden.
Wenn A und B ein Attribut gemeinsam haben, können Sie sie verbinden, indem Sie eine Linie zeichnen. Sobald Sie die Linien haben, gibt Ihnen eine Nahfunktion auf der C-Punkt-Ebene die Entfernung zur Linie an. Lassen Sie die Software die Mathematik für Sie erledigen!
quelle
Wenn Sie Java auf Android verwenden, ist es nur eine Zeile mit der Bibliotheksfunktion
distanceToLine:
Berechnet den Abstand auf der Kugel zwischen dem Punkt p und dem Ende des Liniensegments.
Parameter: p - der zu messende Punkt
start - der Anfang des Liniensegments
Ende - das Ende des Liniensegments
Rückgabe: die Entfernung in Metern (unter der Annahme einer sphärischen Erde)
Fügen Sie einfach eine Bibliothek zu Ihrer hinzu
quelle