Come ottenere la distanza e la direzione tra un punto e la parte più vicina di un poligono?


9

Sono abbastanza nuovo a scrivere SQL e ad usare PostGIS, quindi mi scuso se questo sembra un po 'semplice o ovvio. Ho una tabella di funzioni poligonali contenute in un database postGIS e ho bisogno di scrivere una query SQL per selezionare tutti gli attributi, la distanza e la direzione delle funzioni poligonali entro una certa distanza da un punto predefinito. Sono riuscito a selezionare le caratteristiche e calcolare la distanza (usando ST_Distance) ma non riesco a capire come ottenere il rilevamento.

Questo è lo script che sto usando finora:

SELECT *,
  ST_Distance (Geometry, ST_GeomFromText ('POINT(292596 90785)', 27700))
FROM mytable
WHERE
  ST_DWithin(
    Geometry,
    ST_GeomFromText('POINT(292596 90785)', 27700),
    250) 

Come posso calcolare il rilevamento delle caratteristiche e la distanza?

Risposte:


4

Puoi utilizzare ST_Azimuth per calcolare il rilevamento, ma ci vogliono solo geometrie punti come parametri, quindi devi decidere quale rilevamento vuoi veramente.

Puoi scegliere la linea più breve come suggerito da @Nicklas (è quella con la distanza che già calcoli), il che ha senso se hai bisogno della "direzione" più veloce per raggiungere il poligono. Per ogni altra cosa, ti suggerisco di calcolarlo rispetto al centroide poligonale (ST_Centroid), che dovrebbe dare risultati migliori per forme arbitrarie.


2

Uso

ST_Azimuth (ST_Shortestline (geom1, geom2))

modificare

Ho appena capito che ST_Azimuth non prende un linestring come argumetn, quindi dovrai assegnargli due punti.

Se una delle geometrie è un punto, è possibile utilizzarlo direttamente e utilizzare ST_ClosestPoint per ottenere il punto sul poligono.


1

ST_Azimuth è la funzione che desideri. Restituisce l'angolo in radianti in senso orario da nord. Come mostra l'esempio nella ST_Azimuth()pagina, semplicemente avvolgendolo nella degrees()funzione ti darà l'angolo in gradi se è quello che ti serve.

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.