Come posso calcolare il rilevamento tra due punti in PostGIS?


19

Come posso trovare il rilevamento tra due punti in PostGIS?

Specificare nella risposta se il metodo produce o meno un cuscinetto sullo sferoide o un cuscinetto planare.

Risposte:


21

Utilizzando ST_Azimuth

Il cuscinetto planare può essere calcolato usando ST_Azimuth:

SELECT ST_Azimuth(ST_MakePoint(1,2), 
           ST_MakePoint(3,4))/(2*pi())*360 as degAz,
       ST_Azimuth(ST_MakePoint(3,4), 
           ST_MakePoint(1,2))/(2*pi())*360 As degAzrev

degaz   degazrev
------  ---------
45      225

Per azimut sferico (citando il gruppo utenti potgis ):

La funzione azimut PostGIS sembra utilizzare una semplice funzione arctan per determinare l'azimut. Se converti le tue coordinate in un sistema di coordinate proiettato e quindi esegui la query, i tuoi risultati saranno molto più vicini ai risultati del sito FCC.
Ecco una rapida conversione in UTM Zone 31:

select degrees(azimuth(
'POINT(634714.442133176 5802006.052402816)',
'POINT(634731.2410598891 5801981.648284801)'
));

che produce un azimut di 145.457858825445. I punti al centro della zona UTM o una proiezione più adatta darebbero risultati migliori.

Utilizzo delle funzioni trigonometriche e ST_distance_sphere

Questa è la soluzione che ho scelto quando ho dovuto affrontare questi problemi, principalmente per motivi legacy (avevo una funzione Python che calcola l'azimut). Innanzitutto, dobbiamo trovare una funzione che ci indichi la distanza esatta tra due punti. Citando il manuale di PostGIS :

ST_distance_sphere (punto, punto) Restituisce la distanza lineare in metri tra due punti lat / lon. Utilizza una terra sferica e un raggio di 6370986 metri. Più veloce di distance_spheroid (), ma meno preciso. Implementato solo per punti.

Misurare la distanza di longitudine e latitudine tra i punti e utilizzare la arctanfunzione per recuperare l'angolo.


Proverò a pubblicare il codice Python in seguito, e forse farò alcuni confronti tra i metodi - Se riesco a trovare quel codice legacy ...
Adam Matan,

Puoi chiarire come andare da una distanza ad un angolo con atan? Il mio trigonmetry è un po 'confuso ...
fmark

11

Per chiunque si trovi di fronte a questa domanda ora - PostGIS supporta ST_Azimuth sulla geografia (sferoide) a partire dalla 2.0.0.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.