Jak rozdzielić przestrzennie wiele punktów?


9

Mam dane lokalizacyjne klientów, z ponad 130 milionami rekordów, rozproszonymi po całym kraju. To jest tabela przestrzenna w PostGIS

Chcę teraz podzielić cały kraj na „obszary usług”, tak aby każdy obszar usług miał:

  • Co najmniej 30 klientów
  • Jest najwyżej 1000 km2.

Przebadałem narzędzie agregujące ArcGIS, ale nie spełnia ono moich kryteriów, ponieważ:

  • Nie bierze pod uwagę minimalnej liczby
  • Mam do dyspozycji tylko Qgis & Grass.

Jakiego narzędzia / procesu mogę użyć, aby to osiągnąć?

Odpowiedzi:


4

Przeprowadziłem mały eksperyment:

  • wygenerował 900 losowych punktów
  • połączono je za pomocą drzewa opinającego o minimalnym rozmiarze
  • wybrałem zlew gdzieś pośrodku

wprowadź opis zdjęcia tutaj

  • przerzucił łącza, aby utworzyć wykres kierunkowy, tj. każdy węzeł ostatecznie wyładowuje się do tego samego zlewu

wprowadź opis zdjęcia tutaj

  • uruchomiłem skrypt, którego używam do agregowania mniejszych zlewni w większe, próbując uzyskać średni „rozmiar” 30.

WYNIK:

wprowadź opis zdjęcia tutaj

Daj mi znać, jeśli jest to interesujące, mogę wykopać skrypt (jest już opublikowany gdzieś na tej stronie) lub wyjaśnić przebieg pracy bardziej szczegółowo. Użyłem ArcGIS.

-------------------------------------

** AKTUALIZACJA wrzesień 2017 r

Jest bardzo podobny do powyższego, ale używa narzędzi podejścia rastrowego, Odległości i Hydrologii firmy ArcGIS. Niełatwa część polega na stworzeniu minimalnego drzewa opinającego i znalezieniu gniazd „zlewni” w formacie rastrowym.

Oto kroki, które wykonałem:

  • Węzły triangulacyjne (punkty do klastra), ekstrakcja trójkątnych krawędzi sieci, konwersja węzłów do rastra WAGA :

wprowadź opis zdjęcia tutaj

  • Oblicz pole w tabeli krawędzi: używam (ShapeLength ^ 3 / 1e6). Konwertuj na raster, wypełnij luki o bardzo wysokiej wartości, aby utworzyć raster KOSZT . To zachęca do przepływu między punktami blisko siebie. Oczekuje się, że ścieżki przepływu będą wyglądać podobnie do minimalnego drzewa opinającego (MST) zamiast znajdować się w pobliżu linii prostych zmierzających w kierunku zlewu.
  • Wybierz dowolny węzeł (OUTLET / SINK) i utwórz raster kosztu zwrotnego, używając powierzchni KOSZT i ZLEW jako źródła. Konwertuj raster linku wstecznego na przyzwoity raster kierunku przepływu za pomocą Int(Power(2,"backlink"-1)). Kumulować przepływ przy użyciu kierunku przepływu i rastra masy. Jak widać sztuczka z przypisaniem kosztów naprawdę daje coś podobnego do MST:

wprowadź opis zdjęcia tutaj

Postanowiłem pogrupować punkty po 50. Mając na uwadze fraktalną strukturę sieci, ustaliłem limit nieco niższych punktów INLET na początku „High Flow Streams”, tj. Con („FlowAccum”> 45,1). Wloty zdefiniowane jako komórki gdzie

Istnieje wysoki przepływ i statystyki ogniskowej = 2, a komórka nie jest SINK (brak wartości danych w kierunku przepływu) :

wprowadź opis zdjęcia tutaj

Użyj punktów wlotowych jako punktów krzepnięcia i kierunku przepływu w celu zdefiniowania zlewni. Zdjęcie pokazuje 115 zlewni:

wprowadź opis zdjęcia tutaj

Ich statystyki: średnia = 50,33, min = 46 i max = 74.

Aby uzyskać drugi zestaw zlewni, wystarczy wymazać WAGA rastra pod już zdefiniowanymi zlewniami, obliczyć próżnię przepływu itp.

Metoda będzie działać dla milionów punktów, ponieważ jest oparta na rastrze, triangulacja tej liczby punktów również nie będzie problemem.


1
Nie wiem, czy będzie to dla mnie przydatne, ale wygląda interesująco jak cholera. Proszę, opublikuj skrypt, jeśli możesz.
Devdatta Tengshe,

Napiszę scenariusz później dzisiaj lub w poniedziałek, wziąłem dzień wolny od pracy. Tymczasem rzuć okiem na gis.stackexchange.com/questions/179559/…, gdzie opisałem pomysł
FelixIP

Przetestowałem to na 100 000 punktów przez noc. Ostatnim krokiem trwało blisko 6 godzin, a to sprawia, że nie iść podejście, a nie w ArcGIS przynajmniej. Nie wspominając już o tym, że musiałem sam kodować MST, ponieważ utknęło mi narzędzie autorstwa Pattersona.
FelixIP

Czy udało ci się to rozwiązać? Wygląda na to, że zastosowałem podejście rastrowe, mogę opublikować przepływ pracy, jeśli jest to interesujące /
FelixIP

Proszę zrób. Rozwiązałem go metodą Bruteforce, która była wystarczająca do moich celów; Ale jestem pewien, że inni mogliby skorzystać z twojego nowego podejścia.
Devdatta Tengshe,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.