Ich verwende die ST_Distance-Funktion, um den Abstand zwischen zwei Geometrien (einem Bahnhof und einem Gebäude) zu berechnen. Da ich weiß, dass sich alle Gebäude und alle Bahnhöfe in Chicago befinden, das über ein ausgezeichnetes / vollständiges Straßenraster verfügt, möchte ich Manhattan verwenden (oder Taxi) Entfernung .
Die generische Formel hierfür ist die Differenz in X plus die Differenz in Y, also Abs (X1-X2) + Abs (Y1-Y2).
Mit welcher PostgreSQL-Abfrage würde dies funktionieren?
postgis
postgresql
distance
stevevance
quelle
quelle
Antworten:
Ich beantworte meine eigene Frage mit einer vorgeschlagenen Anfrage.
Dies führt zu Folgendem, wobei einige Spalten herausgeschnitten wurden:
Die erste nummerierte Spalte ist die Entfernung (in Fuß, da ich EPSG 3435 verwende), die von der ST_Distance PostGIS-Funktion berechnet wurde, und die zweite nummerierte Spalte ist das Ergebnis der Manhattan-Entfernungsformel.
Ich habe das zweite Ergebnis vor Ort überprüft und den Fußweg von Google Maps zwischen der CTA-Station Addison Blue Line und dem Gebäude in der Belle Plaine Ave 3226 W (in der Abfrage als "100533644" angegeben) ermittelt. Google Maps gab eine Wanderroute von 1,1 Meilen aus, während das Postgres-Ergebnis 5,790 Fuß = 1,09 Meilen betrug. Der Unterschied ist für meine Zwecke akzeptabel.
quelle
Ich denke, ich habe auch eine etwas elegantere Lösung gefunden, die Trigonometrie und die eingebaute
ST_Azimuth
Funktion verwendet und sie in eine schöne Funktion eingekapselt hat:quelle