Ho tre serie (o tabelle) di punti in PostGIS che voglio confrontare. Vorrei sapere quanto è “vicina” ciascuna serie rispetto alle altre due. In altre parole avrei bisogno di qualche misura come la media della distanza media di ogni punto con tutte le altre (cioè la media della matrice delle distanze) … Sembra complicato, ma sono sicuro che esistono alcune statistiche comuni da confrontare serie di punti.
Come sarebbe la mia query?
Commenti
- Se selezioni come misura la distanza quadratica media radice tra i punti quindi la complessità del calcolo si riduce da O (N ^ 2) a O (N), perché la distanza RMSE è uguale a sqrt (2N / (N-1)) volte la distanza RMSE tra gli N punti e il loro baricentro.
- Se lo fai a modo tuo, ' ti ritroverai in una situazione in cui confrontare un insieme con se stesso finirà con una distanza diversa da zero. Ciò significa che confronterai quanto sono vicini i punti nellinsieme non solo tra due insiemi.
- @Jakub Un modo comune ed efficace per misurare il grado di raggruppamento allinterno di un insieme di punti che è stato partizionato in " cluster " consiste nellutilizzare una misura della distanza media allinterno di qualsiasi punto impostato. Confrontando la misura per lintero set con la somma (o qualche altra combinazione appropriata) delle misure dei cluster si valuta la quantità di clustering. Così il tuo commento, che potrebbe essere letto da alcuni come unobiezione alla ' procedura di Francesco, in realtà sottolinea perché è interessante e utile.
- I non so qual è lo scopo di questi calcoli, ma se vuoi solo sapere se i punti nel set A sono più vicini tra loro, allora i punti nel set B forse la soluzione sarà contare larea del loro scafo (ST_Area + ST_ConcaveHull )
- Cè un motivo per cui vuoi la media della media di TUTTE le distanze tra i punti? Ogni calcolo della media verrà distorta dalla distanza massima tra gli elementi, quando tutti gli insiemi di elementi possono essere piuttosto vicini tra loro.
Risposta
Come ho accennato in un commento, la distanza media sarà distorta dalle distanze maggiori tra i punti. Ad esempio, potresti avere una nuvola di punti di 100 km di diametro, che poi sposti lateralmente di 1 m per formare una nuova tabella. La distanza media da qualsiasi punto della tabella A alla tabella B sarà più vicina a 100 km che a 1 m. La distanza più vicina per qualsiasi punto dalla tabella A alla tabella B sarà 1 m e la distanza media più vicina sarà di 1 m.
A parte questo, mostrerò come calcolare la media della distanza più vicina, che puoi poi estendere a tuo piacimento.
SELECT DISTINCT ON(a.id) a.id AS a_id, b.id AS b_id, ST_DISTANCE(a.geom, b.geom) as distance INTO a_b_distances FROM a, b ORDER BY a.id, a.geom <-> b.geom
Quindi per calcolare la distanza media più vicina:
SELECT avg(distance) FROM a_b_distances
Commenti
- È fantastico! Come potrebbe essere esteso per trovare la distanza massima più vicina?
- Scambia
avg
permax
- Fantastico! Potrebbe essere scritto per tornare per restituire il massimo direttamente? Io ' lo sto facendo su tutte le mie righe
- A questo punto potresti porre la tua domanda e io ' saremo lieti di provare a rispondere, ' l Ottengo dettagli migliori di questo avanti e indietro nella sezione dei commenti
- Aggiunto qui (anche modificato) gis.stackexchange.com/questions/190237/…