Tôi đang trả lời câu hỏi của riêng tôi với một truy vấn được đề xuất.
select *, ABS(x_permit-x_station)+ABS(y_permit-y_station) as manhattan FROM (SELECT
longname AS NAME,
lines AS metadata,
T .slug,
ST_Distance (
T .geom,
ST_Transform (P .geometry, 3435)
) AS distance,
ST_X(ST_Transform(p.geometry, 3435)) as x_permit,
ST_Y(ST_Transform(p.geometry, 3435)) as y_permit,
ST_X(t.geom) as x_station,
ST_Y(t.geom) as y_station
FROM
permits P,
stations_cta T
WHERE
P .permit_ = '100533644'
ORDER BY
distance
LIMIT 2) as foo
Điều này dẫn đến kết quả sau với một số cột bị bắn ra:
Kedzie-Ravenswood Brown Line 3738.52830193659 3796.29623843171
Addison-O'Hare Blue Line 4105.37381385087 5790.20002649655
Cột được đánh số đầu tiên là khoảng cách (tính bằng feet, vì tôi đang sử dụng EPSG 3435) được tính bởi hàm ST_Distance PostGIS và cột được đánh số thứ hai là kết quả của công thức khoảng cách Manhattan.
Tôi đã kiểm tra kết quả thứ hai, nhận được khoảng cách đi bộ từ Google Maps giữa trạm CTA Addison Blue Line và tòa nhà tại 3226 W Belle Plaine Ave (ghi chú là '100533644' trong truy vấn). Google Maps outputted một 1,1 dặm đường đi bộ trong khi Postgres kết quả của 5790 chân = 1,09 dặm. Sự khác biệt là chấp nhận được cho mục đích của tôi.