Sto usando PostGIS per calcolare i vicini più vicini di poligoni. Quello che voglio calcolare è la distanza minima da ciascun poligono al poligono più vicino.
Finora ho ricevuto un grande aiuto dalla risposta di Mike Toews (che cito con una piccola modifica) qui:
SELECT
a.hgt AS a_hgt,
b.hgt AS b_hgt,
ST_Distance(a.the_geom, b.the_geom) AS distance_between_a_and_b
FROM
public."TestArea" AS a, public."TestArea" AS b
WHERE
a.hgt != b.hgt AND ST_Distance(a.the_geom, b.the_geom) < 400
Quindi ho calcolato il minimo:
SELECT a_hgt, MIN(distance_between_a_and_b)
FROM public."lon_TestArea"
GROUP BY a_hgt
Tuttavia, la mia sfida è calcolare questo per un gran numero di poligoni (1.000.000). Dato che il calcolo sopra riportato confronta ogni poligono con ogni altro poligono, mi chiedevo come avrei potuto migliorare il calcolo in modo da non dover eseguire calcoli 10 ^ 12.
Pensavo di dover bufferizzare ogni poligono, quindi calcolare i vicini più vicini di tutti i valori all'interno del buffer per quel poligono e registrare il minimo. Non sono sicuro se questo sia l'approccio migliore o se in PostGIS sia presente una funzione che dovrei utilizzare.
EDIT: Utilizzando uno dei suggerimenti di Nicklas, sto sperimentando ST_Dwithin()
:
CREATE TABLE mytable_withinRange AS SELECT
a.hgt AS a_hgt,
b.hgt AS b_hgt,
ST_DWithin(a.the_geom, b.the_geom, 400)
FROM
public."lon_TestArea" AS a, public."lon_TestArea" AS b
Ciò restituisce una tabella dell'ID di ciascun poligono e se si trova entro una certa distanza o meno. È possibile costruire un'istruzione di IF/ELSE
tipo usando SQL? (Ho letto sull'uso della CASE
condizione) O dovrei provare a unire la tabella che produco alla tabella originale e quindi eseguire nuovamente la query usando ST_Distance?