Jag har tre serier (eller tabeller) av punkter i PostGIS som jag vill jämföra. Jag skulle vilja veta hur ”nära” varje serie är jämfört med de andra två. Med andra ord skulle jag behöva ett visst mått som genomsnittet av det genomsnittliga avståndet för varje punkt med alla andra (det vill säga genomsnittet för avståndsmatrisen) … Låter komplicerat, men jag är säker på att det finns någon gemensam statistik att jämföra serie poäng.
Hur skulle min fråga se ut?
Kommentarer
- Om du väljer som mått kommer det genomsnittliga rotavståndet mellan poäng minskar sedan komplexiteten i beräkningen från O (N ^ 2) till O (N), eftersom RMSE-avståndet är lika med sqrt (2N / (N-1)) gånger RMSE-avståndet mellan N-punkterna och deras centrum.
- Om du gör det på ditt sätt kommer du ' att hamna i en situation där en jämförelse mellan en uppsättning och sig själv får ett avstånd som inte är noll. Det är att du kommer att jämföra hur nära punkterna i uppsättningen inte bara är mellan två uppsättningar.
- @Jakub Ett vanligt och effektivt sätt att mäta graden av kluster inom en uppsättning punkter som har uppdelats i " kluster " är att använda ett mått på genomsnittligt avstånd inom valfri punktuppsättning. Att jämföra måttet för hela uppsättningen med summan (eller någon annan lämplig kombination) av måtten i klusterna bedömer mängden kluster. Din kommentar, som kan läsas av vissa som invändningar mot Francesco ' s procedur, påpekar faktiskt varför den är intressant och användbar.
- I vet inte vad som är poängen med dessa beräkningar, men om du bara vill veta om punkter i uppsättning A är närmare varandra eller inte är punkter i uppsättning B kanske lösningen att räkna arean på deras skrov (ST_Area + ST_ConcaveHull )
- Finns det en anledning till att du vill ha genomsnittet av genomsnittet för ALLA avstånden mellan punkter? Varje genomsnittlig beräkning kommer att förvrängas av det maximala avståndet mellan funktioner, när alla uppsättningar funktioner kan vara ganska nära varandra.
Svar
Som jag nämnde i en kommentar kommer snittavståndet att förvrängas med de största avstånden mellan punkter. Till exempel kan du ha ett punktmoln som är 100 km över, som du sedan flyttar i sidled med 1 m för att bilda en ny tabell. medelavståndet för vilken punkt som helst i tabell A till tabell B kommer att vara närmare 100 km än 1 m. närmaste avstånd för vilken punkt som helst i tabell A till tabell B är 1 m och genomsnittlig närmaste sträcka kommer att vara 1 m.
Utöver detta visar jag hur man beräknar medelvärdet för närmaste avstånd, som du sedan kan utöka som du vill.
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
Och sedan beräkna det genomsnittliga närmaste avståndet:
SELECT avg(distance) FROM a_b_distances
Kommentarer
- Det här är jättebra! Hur kan detta utökas för att hitta det maximala närmaste avståndet?
- Byt ut
avg
förmax
- Fantastiskt! Kan det här vara skriven för att återvända för att returnera max direkt? Jag ' gör detta på alla mina rader
- Vid det här tillfället kanske du vill ställa din egen fråga och jag ' Vi försöker gärna svara på det, vi ' l Jag får bättre detaljer än detta fram och tillbaka i kommentarsektionen
- Tillagt här (även redigerad) gis.stackexchange.com/questions/190237/…