Estou usando a função ST_Distance para calcular a distância entre duas geometrias (uma estação de trem e um prédio) Como sei que todos os prédios e todas as estações de trem estão em Chicago, que possui uma excelente / completa malha viária, eu gostaria de usar Manhattan distância (ou táxi) .
A fórmula genérica para isso é a diferença em X mais a diferença em Y, então Abs (X1-X2) + Abs (Y1-Y2).
Que consulta do PostgreSQL faria isso funcionar?
postgis
postgresql
distance
stevevance
fonte
fonte
Respostas:
Estou respondendo minha própria pergunta com uma consulta proposta.
Isso resulta no seguinte com algumas colunas cortadas:
A primeira coluna numerada é a distância (em pés, porque estou usando o EPSG 3435) calculada pela função ST_Distance PostGIS, e a segunda coluna numerada é o resultado da fórmula da distância de Manhattan.
Eu verifiquei o segundo resultado, obtendo uma curta distância do Google Maps entre a estação CTA da Addison Blue Line e o prédio na 3226 W Belle Plaine Ave (anotada como '100533644' na consulta). O Google Maps produziu uma rota a pé de 1,1 milhas, enquanto o Postgres resulta de 5.790 pés = 1,09 milhas. A diferença é aceitável para meus propósitos.
fonte
Eu acho que também encontrei uma solução um pouco mais elegante que usa trigonometria e a
ST_Azimuth
função incorporada e a encapsulou em uma boa função:fonte