Ik heb drie reeksen (of tabellen) punten in PostGIS die ik wil vergelijken. Ik zou graag willen weten hoe “dichtbij” elke reeks is in vergelijking met de andere twee. Met andere woorden, ik zou een maat nodig hebben, zoals het gemiddelde van de gemiddelde afstand van elk punt met alle andere (dat wil zeggen, het gemiddelde van de afstandsmatrix) … Klinkt ingewikkeld, maar ik weet zeker dat er een aantal algemene statistieken bestaan om te vergelijken reeks punten.
Hoe zou mijn zoekopdracht eruit zien?
Opmerkingen
- Als u de gemiddelde kwadraatafstand tussen de punten dan neemt de complexiteit van de berekening af van O (N ^ 2) naar O (N), omdat de RMSE-afstand gelijk is aan sqrt (2N / (N-1)) maal de RMSE-afstand tussen de N-punten en hun zwaartepunt.
- Als je het op jouw manier doet, ' kom je in een situatie terecht waarin het vergelijken van een set met zichzelf zal eindigen met een afstand die niet nul is. Dat wil zeggen dat je zult vergelijken hoe dicht de punten in de set niet alleen tussen twee sets zijn.
- @Jakub Een veelgebruikte en effectieve manier om de mate van clustering te meten binnen een set punten die is onderverdeeld in " clusters " is om een bepaalde gemiddelde afstand binnen een puntenset te gebruiken. Door de maat voor de hele set te vergelijken met de som (of een andere geschikte combinatie) van de maten van de clusters, wordt de mate van clustering beoordeeld. Dus je opmerking, die door sommigen kan worden gelezen als een bezwaar tegen de procedure van Francesco ', geeft in feite aan waarom het interessant en nuttig is.
- I weet niet wat het punt is van deze berekeningen, maar als je alleen wilt weten of punten in set A al dan niet dichter bij elkaar liggen dan punten in set B, is de oplossing misschien om het gebied van hun romp te tellen (ST_Area + ST_ConcaveHull )
- Is er een reden waarom u het gemiddelde wilt van het gemiddelde van ALLE afstanden tussen punten? Elke gemiddelde berekening wordt vertekend door de maximale afstand tussen objecten, wanneer alle sets objecten vrij dicht bij elkaar kunnen liggen.
Answer
Zoals ik in een opmerking al zei, wordt de gemiddelde afstand vervormd door de grootste afstanden tussen punten. U kunt bijvoorbeeld een puntenwolk hebben van 100 km breed, die u vervolgens 1 m lateraal verschuift om een nieuwe tafel te vormen. De gemiddelde afstand voor elk punt op tabel A tot tabel B zal dichter bij 100 km dan 1 m zijn. De dichtstbijzijnde afstand voor elk punt in tabel A naar tabel B is 1 m, en de gemiddelde dichtstbijzijnde afstand zal 1 m zijn.
Afgezien daarvan laat ik zien hoe ik het gemiddelde van de dichtstbijzijnde afstand kan berekenen, die u vervolgens kunt verlengen zoals u wilt.
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
En dan om de gemiddelde dichtstbijzijnde afstand te berekenen:
SELECT avg(distance) FROM a_b_distances
Reacties
- Dit is geweldig! Hoe kan dit worden uitgebreid om de maximale dichtstbijzijnde afstand te vinden?
- Verwissel
avg
voormax
- Geweldig! Zou dit kunnen zijn geschreven om terug te keren om direct de max te retourneren? Ik ' doe dit op al mijn regels
- Op dit punt wil je misschien je eigen vraag stellen en ik ' Ik zal het graag proberen te beantwoorden, we ' l Ik krijg meer details dan dit heen en weer in de commentarensectie
- Hier toegevoegd (ook bewerkt) gis.stackexchange.com/questions/190237/…