Estoy usando la función ST_Distance para calcular la distancia entre dos geometrías (una estación de tren y un edificio) Como sé que todos los edificios y todas las estaciones de tren están en Chicago, que tiene una cuadrícula de calles excelente / completa, me gustaría usar Manhattan (o taxi) distancia .
La fórmula genérica para esto es la diferencia en X más la diferencia en Y, entonces Abs (X1-X2) + Abs (Y1-Y2).
¿Qué consulta PostgreSQL haría que esto funcione?
postgis
postgresql
distance
stevevance
fuente
fuente
Respuestas:
Estoy respondiendo mi propia pregunta con una consulta propuesta.
Esto da como resultado lo siguiente con algunas columnas recortadas:
La primera columna numerada es la distancia (en pies, porque estoy usando EPSG 3435) calculada por la función ST_Distance PostGIS, y la segunda columna numerada es el resultado de la fórmula de distancia de Manhattan.
Verifiqué el segundo resultado, obteniendo la distancia a pie de Google Maps entre la estación de CTA de la Línea Azul de Addison y el edificio en 3226 W Belle Plaine Ave (anotado como '100533644' en la consulta). Google Maps generó una ruta de caminata de 1.1 millas mientras que el resultado de Postgres de 5,790 pies = 1.09 millas. La diferencia es aceptable para mis propósitos.
fuente
Creo que también encontré una solución un poco más elegante que utiliza trigonometría y la
ST_Azimuth
función integrada y la encapsuló en una función agradable:fuente