Jeszcze

Jak mogę wygenerować określoną liczbę losowych punktów w wielokącie za pomocą PostGIS?

Jak mogę wygenerować określoną liczbę losowych punktów w wielokącie za pomocą PostGIS?


Mam tabelę postgis, do której przesłałem plik kształtu, ten plik kształtu zawiera ponad 200 wierszy wielokątów z kilkoma kolumnami liczb całkowitych.

To, co chciałbym zrobić, jest podobne do funkcji „losowych punktów w wielokątach” QGIS, z wyjątkiem liczb, które są znacznie większe. Moje początkowe podejście do QGIS załamało się przy próbie dodania ~500 000 losowych punktów do każdego wielokąta - potrzebuję liczby losowych punktów, aby pochodziły z powiązanej kolumny liczb całkowitych.

Po kilku poszukiwaniach, zindeksowana baza danych postgis jest drogą do zrobienia. Ale nie jestem pewien, jak wygenerować losowe punkty w wielokącie dla każdego wielokąta w mojej tabeli i aby liczba punktów, które są generowane losowo, pochodziła z odpowiedniej kolumny.

Nowy w Postgres i postgis, ale zaznajomiony z mysql, QGIS, ArcGIS i pojęciami geograficznymi.

EDYTOWAĆ:

Oto zdjęcie, aby lepiej pokazać, co chciałbym osiągnąć. Każdy wielokąt ma powiązaną wartość PNTSneeded, oznaczyłem wielokąty na zrzucie ekranu tą liczbą (pokazaną również w tabeli atrybutów). Muszę wygenerować taką ilość punktów, losowo rozłożonych w każdym rzędzie wielokąta.

Musiałbym to zrobić tylko raz, więc nie byłby to ciągły proces, chociaż być może będę musiał wykonać ten sam proces dla różnych zestawów wielokątów w przyszłości (jestem pewien, że mógłbym odtworzyć kroki).

W przypadku, gdy jest to rzeczywiście za dużo punktów do wygenerowania, zawsze mogę uruchomić go dwa razy na połowie liczby, a następnie po prostu połączyć pliki w jeden (może dodać dodatkowy poziom losowości). Ale wolałbym móc to zrobić za jednym zamachem.


Powinieneś wypróbować funkcję 'RandomPointsInPolygon(geom geometry, num_points integer)'.

Dodaj dodatkową kolumnę geometrii i zaktualizuj ją za pomocą RandomPointsInPolygon. Pierwszy parametr to istniejąca geometria, a drugi to kolumna PNTSneeded.

Istnieją dwa pytania dotyczące SO związane z RandomPointsInPolygon:

Jak tworzyć losowe punkty w wielokącie w PostGIS

Losowy punkt Postgisa wewnątrz wielokąta

Jeśli to możliwe, zacznij od mniejszej próbki, używając klauzuli WHERE w instrukcji UPDATE.

Rzeczywisty kod byłby następujący:

-- skopiuj i wklej funkcję RandomPointsInPolygon CREATE OR REPLACE FUNCTION RandomPointsInPolygon(geom geometry, num_points integer) ZWRACA SETOF geometrii AS $BODY$DECLARE (… ) -- jeśli używasz EPSG:4326 SELECT AddGeometryColumn('wielokąty', 'punkty', 4326, 'WIELOPUNKTOWY', 2); -- zaktualizuj wielokąty tabeli, używając istniejących geom i PNTSneeded UPDATE polygons SET points = (SELECT ST_Union(wiele punktów) FROM RandomPointsInPolygon("geom", "PNTSneeded") AS manypoints);

Postgis w wersji 2.3.0 i nowszych mają nową funkcję do generowania punktów w wielokąt ST_GeneratePoints.


Obejrzyj wideo: Excel - Liczenie liczb w przedziałach - Tabele przestawne - widzowie #23