J'utilise la fonction ST_Distance pour calculer la distance entre deux géométries (une gare et un bâtiment) Puisque je sais que tous les bâtiments et toutes les gares sont à Chicago, qui a une excellente / complète grille de rue, j'aimerais utiliser Manhattan (ou taxi) distance .
La formule générique pour cela est la différence de X plus la différence de Y, donc Abs (X1-X2) + Abs (Y1-Y2).
Quelle requête PostgreSQL ferait fonctionner cela?
postgis
postgresql
distance
stevevance
la source
la source
Réponses:
Je réponds à ma propre question avec une requête proposée.
Cela se traduit par ce qui suit avec certaines colonnes coupées:
La première colonne numérotée est la distance (en pieds, car j'utilise EPSG 3435) calculée par la fonction ST_Distance PostGIS, et la deuxième colonne numérotée est le résultat de la formule de distance de Manhattan.
J'ai vérifié le deuxième résultat, obtenant la distance de marche de Google Maps entre la station CTA Addison Blue Line et le bâtiment au 3226 W Belle Plaine Ave (noté «100533644» dans la requête). Google Maps a généré un itinéraire de marche de 1,1 mile tandis que le résultat Postgres de 5790 pieds = 1,09 miles. La différence est acceptable à mes fins.
la source
Je pense que j'ai également trouvé une solution légèrement plus élégante qui utilise la trigonométrie et la
ST_Azimuth
fonction intégrée et l'encapsulé dans une belle fonction:la source