Finden Sie den nächsten Längen- und Breitengrad im Array?

8

Ich habe eine Länge und Breite als String in PHP wie unten

%Vor%

Und ich möchte das nehmen und in eine Reihe von Werten schauen, um den nächsten zu finden. Das Array sieht wie

aus %Vor%

Ich möchte das Array zurückgeben, das am nächsten und längsten ist. In diesem Fall wäre es der erste (und ja ich weiß, -400 ist kein möglicher Wert).

Gibt es einen schnellen und einfachen Weg, dies zu tun? Ich habe versucht Array-Suche, aber das hat nicht funktioniert.

Differenzcode

%Vor%     
Steven 06.03.2012, 17:50
quelle

4 Antworten

20

Sie müssen zuerst den Abstand jedes Elements zum Bezugspunkt zuordnen.

Dann sortieren Sie die Karte und dann können Sie sagen, welche die niedrigste (oder höchste, wenn Sie die Suche umkehren) Entfernung:

%Vor%

Ausgabe:

%Vor%

Passen Sie auf, dass Sie die richtige Reihenfolge von lat und long haben.

Die Entfernungsfunktion (nur die Kopfzeile wurde leicht geändert und die Einheiten wurden gelöscht):

%Vor%     
hakre 06.03.2012, 18:08
quelle
4

Wenn Sie das Kosinusgesetz für die Entfernung verwenden, können Sie die Approximation für flache Erde verwenden. Die Gleichungen für flache Erde reduzieren die Anzahl der Triggerfunktionen in der Berechnung. Die Δlat, Δlon ist die Differenz zwischen Ihrem Referenzpunkt und dem Testpunkt.

Diese Formel wäre für die Langstrecken-Navigation (Tausende von Meilen) nicht genau, aber für dieses spezielle Problem interessiert Sie nicht die genaue Entfernung, aber wer ist der nächste Punkt für mich. Dies ist eine einfachere Formulierung, die Ihnen das geben sollte.

%Vor%

Referenz: Ссылка

Distanzcode

%Vor%     
TreyA 06.03.2012 20:54
quelle
1

Es gibt keine schnelle und einfache Möglichkeit, das zu tun. Sie müssen alle Elemente durchlaufen und den Abstand zwischen ihnen und dem Startpunkt berechnen, das Ergebnis speichern und wiederholen und das Ergebnis nur speichern, wenn es niedriger als vorher ist.

    
dev-null-dweller 06.03.2012 17:56
quelle
0

Iteriere durch das Array und vergleiche Werte mit dem, was du hast. Wenn der Wert kleiner als der aktuell gespeicherte Wert ist (oder wenn Sie keinen aktuell gespeicherten Wert haben), speichern Sie diesen Wert stattdessen, andernfalls werfen Sie ihn weg.

%Vor%

Das wird natürlich dadurch erschwert, dass Breite und Länge auf einer Kugel liegen und die Längen 179 und -179 näher als 90 und 179 sind.

    
Chris Sobolewski 06.03.2012 17:59
quelle

Tags und Links