Я использую функцию ST_Distance для расчета расстояния между двумя геометриями (железнодорожный вокзал и здание). Поскольку я знаю, что все здания и все железнодорожные станции находятся в Чикаго, который имеет превосходную / полную сетку улиц, я хотел бы использовать Манхэттен (или такси) расстояние .
Общая формула для этого - разница в X плюс разница в Y, поэтому Abs (X1-X2) + Abs (Y1-Y2).
Какой запрос PostgreSQL сделает эту работу?
postgis
postgresql
distance
stevevance
источник
источник
Ответы:
Я отвечаю на свой вопрос предложенным запросом.
Это приводит к следующему с некоторыми вырезанными столбцами:
Первый пронумерованный столбец - это расстояние (в футах, потому что я использую EPSG 3435), рассчитанное функцией PostGIS ST_Distance, а второй пронумерованный столбец - результат формулы расстояния Манхэттена.
Я проверил второй результат, получив расстояние пешком от Google Maps между станцией CTA Addison Blue Line и зданием по адресу: Belle Plaine Ave, 3226 W (в запросе отмечен как «100533644»). Карты Google вывели пешеходный маршрут протяженностью 1,1 мили, а результат Postgres - 5790 футов = 1,09 мили. Разница приемлема для моих целей.
источник
Я думаю, что я также нашел немного более элегантное решение, которое использует тригонометрию и встроенную
ST_Azimuth
функцию и заключил ее в красивую функцию:источник