Mam trzy serie (lub tabele) punktów w PostGIS, które chcę porównać. Chciałbym wiedzieć, jak „blisko” jest każda seria w porównaniu z pozostałymi dwoma. Innymi słowy, potrzebowałbym jakiejś miary, takiej jak średnia średniej odległości każdego punktu ze wszystkimi innymi (to znaczy średnia macierzy odległości) … Brzmi skomplikowanie, ale jestem pewien, że istnieje kilka wspólnych statystyk do porównania seria punktów.
Jak będzie wyglądać moje zapytanie?
Komentarze
- Jeśli jako miara wybierzesz średnią kwadratową odległość między punktów, wtedy złożoność obliczeń zmniejsza się z O (N ^ 2) do O (N), ponieważ odległość RMSE jest równa sqrt (2N / (N-1)) razy odległość RMSE między punktami N a ich centroidą.
- Jeśli zrobisz to po swojemu, ' skończysz w sytuacji, w której porównywanie zestawu do samego siebie zakończy się niezerową odległością. Oznacza to, że porównasz, jak blisko punkty w zestawie znajdują się nie tylko między dwoma zestawami.
- @Jakub Powszechny i skuteczny sposób pomiaru stopnia skupienia w zestawie punktów, który został podzielony na " klastry " mają używać jakiejś miary średniej odległości w dowolnym zestawie punktów. Porównanie miary dla całego zestawu z sumą (lub inną odpowiednią kombinacją) miar klastrów pozwala ocenić wielkość klastrów. Twój komentarz, który może być odczytany przez niektórych jako sprzeciw wobec procedury Francesco ', w rzeczywistości wskazuje, dlaczego jest interesujący i przydatny.
- Ja nie wiem jaki jest sens tych obliczeń, ale jeśli chcesz tylko wiedzieć, czy punkty w zestawie A są bliżej siebie, to punkty w zestawie B może rozwiązaniem będzie policzenie powierzchni ich kadłuba (ST_Area + ST_ConcaveHull )
- Czy istnieje powód, dla którego chcesz otrzymać średnią ze WSZYSTKICH odległości między punktami? Każde średnie obliczenie będzie zniekształcone przez maksymalną odległość między obiektami, gdy wszystkie zestawy cech mogą znajdować się raczej blisko siebie.
Odpowiedź
Jak wspomniałem w komentarzu, średnia odległość będzie zniekształcona przez największe odległości między punktami. Na przykład, możesz mieć chmurę punktów o średnicy 100 km, którą następnie przesuniesz w bok o 1 m, aby utworzyć nową tabelę. Średnia odległość dla dowolnego punktu w tabeli A do tabeli B będzie bliżej 100 km niż 1 m. najbliższa odległość dla dowolnego punktu w tabeli A do tabeli B będzie wynosić 1 m, a średnia najbliższa odległość wyniesie 1 m.
Pomijając to, pokażę, jak obliczyć średnią z najbliższego dystansu, którą następnie możesz przedłużyć według własnego uznania.
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
A następnie, aby obliczyć średnią najbliższą odległość:
SELECT avg(distance) FROM a_b_distances
Komentarze
- To świetnie! Jak można to przedłużyć, aby znaleźć najbliższą maksymalną odległość?
- Zamień
avg
dlamax
- Super! Czy to może być napisano, aby powrócić i bezpośrednio zwrócić maksimum? Ja ' robię to we wszystkich moich wierszach
- W tym momencie możesz zadać własne pytanie, a ja ' Z przyjemnością spróbujemy odpowiedzieć, ' l W sekcji komentarzy znajduję się bardziej szczegółowe informacje niż te.
- Dodane tutaj (również edytowane) gis.stackexchange.com/questions/190237/…