Sådan beregnes den gennemsnitlige afstand mellem sæt af punkter som mål for nærhed

Jeg har tre serier (eller tabeller) af punkter i PostGIS, som jeg vil sammenligne. Jeg vil gerne vide, hvor “tæt” hver serie er sammenlignet med de to andre. Med andre ord ville jeg have brug for et mål, som gennemsnittet af den gennemsnitlige afstand for hvert punkt med alle de andre (det vil sige gennemsnittet for afstandsmatrixen) … Det lyder kompliceret, men jeg er sikker på, at der findes en fælles statistik til sammenligning række punkter.

Hvordan ville min forespørgsel se ud?

Kommentarer

  • Hvis du vælger som din målestok, skal rodets gennemsnitlige kvadratafstand mellem point reduceres derefter beregningens kompleksitet fra O (N ^ 2) til O (N), fordi RMSE-afstanden er lig med sqrt (2N / (N-1)) gange RMSE-afstanden mellem N-punkterne og deres centroid.
  • Hvis du gør det på din måde, vil du ' ende i en situation, hvor sammenligning af et sæt med sig selv ender med en afstand uden nul. Det vil sige, at du vil sammenligne, hvor tæt punkterne i sættet ikke kun er mellem to sæt.
  • @Jakub En almindelig og effektiv måde at måle graden af klyngedannelse inden for et sæt punkter, der er opdelt i " klynger " er at bruge et mål for den gennemsnitlige afstand inden for ethvert sæt sæt. Ved at sammenligne målingen for hele sættet med summen (eller en anden passende kombination) af klyngens mål vurderes mængden af klynger. Din kommentar, som nogle måske kan læse som en indsigelse mod Francesco ' s procedure, påpeger faktisk, hvorfor det er interessant og nyttigt.
  • I ved ikke, hvad der er meningen med disse beregninger, men hvis du kun vil vide, om punkter i sæt A er tættere på hinanden eller ikke, så er punkter i sæt B måske løsningen at tælle område af deres skrog (ST_Area + ST_ConcaveHull )
  • Er der en grund til, at du vil have gennemsnittet af gennemsnittet af ALLE afstandene mellem punkter? Hver gennemsnitlige beregning forvrænges af den maksimale afstand mellem funktioner, når alle sæt funktioner kan være ret tæt på hinanden.

Svar

Som jeg nævnte i en kommentar, vil den gennemsnitlige afstand blive forvrænget med de største afstande mellem punkter. For eksempel kan du have en punktsky, der er 100 km på tværs, som du derefter skifter lateralt med 1 m for at danne en ny tabel. gennemsnitsafstand for ethvert punkt i tabel A til tabel B vil være tættere på 100 km end 1 m. nærmeste afstand for ethvert punkt i tabel A til tabel B vil være 1 m, og gennemsnitlig nærmeste afstand vil være 1 m.

Med det til side vil jeg vise, hvordan man beregner gennemsnittet af den nærmeste afstand, som du derefter kan udvide som du vil.

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 

Og derefter beregne den gennemsnitlige nærmeste afstand:

SELECT avg(distance) FROM a_b_distances 

Kommentarer

  • Dette er fantastisk! Hvordan kunne dette udvides til at finde den maksimale nærmeste afstand?
  • Byt ud avg til max
  • Awesome! Kunne dette være skrevet for at vende tilbage for at returnere max direkte? Jeg ' m gør dette på alle mine linjer
  • På dette tidspunkt vil du måske stille dit eget spørgsmål, og jeg ' Vi prøver gerne at svare på det, vi ' l Jeg får bedre detaljer end dette frem og tilbage i kommentarfeltet
  • Tilføjet her (også redigeret) gis.stackexchange.com/questions/190237/…

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *