Jak tworzyć losowe punkty poza wielokątami?

11

Narzędzie Utwórz losowy punkt jest w stanie wygenerować określoną liczbę punktów w wielokątach. Zastanawiam się, biorąc pod uwagę obwiednię, czy jest jakiś sposób na wygenerowanie losowych punktów poza tym wielokątem?

Widziany
źródło

Odpowiedzi:

13

Osobiście nie lubię algorytmu losowego punktu w ArcGIS. Alternatywnie użyj funkcji środowiska modelowania geoprzestrzennego (GME) genrandompnts. Będziesz mógł zidentyfikować określone wielokąty, w których losowe punkty zostaną wykluczone (patrz podświetlony obszar w załączonym pliku .jpg). Najlepsze ze wszystkich tego oprogramowania jest bezpłatne.

GME zapewnia zestaw narzędzi do analizy i modelowania, od małych „elementów konstrukcyjnych”, których można użyć do stworzenia zaawansowanego przepływu pracy, po całkowicie niezależne programy analityczne. Wykorzystuje także niezwykle wydajne oprogramowanie open source R jako silnik statystyczny do sterowania niektórymi narzędziami analitycznymi. Jedną z wielu zalet R jest to, że jest open source, całkowicie przejrzysty i dobrze udokumentowany: ważne cechy każdego naukowego oprogramowania analitycznego.

wprowadź opis zdjęcia tutaj

Aaron
źródło
1
Czy możesz podać dalsze informacje, dlaczego nie podoba Ci się domyślny algorytm losowych punktów i dlaczego GME jest bardziej optymalny?
Stephen Lead,
@Aaron Nice one! Nie próbowałem tego, ponieważ były to Narzędzia do modelowania Hawtha - będę musiał go pobrać i dać mu crack!
om_henners,
3
@Stephen W ciągu ostatniego miesiąca generowałem losowe punkty w czterech klasach. Zetknąłem się z kilkoma problemami: 1) ArcGIS wytworzył kilka punktów poza wielobokami wejściowymi 2) Arc miał trudności z radzeniem sobie z obszarami zbyt małymi dla moich parametrów wejściowych (np. Minimalna dozwolona odległość = 50m i punkty = 50), podczas gdy GME je obsługiwało problemy, generując losowe punkty aż do naruszenia reguł, a następnie wyświetlając komunikat ostrzegawczy. 3) RPG Arc jest wolniejszy niż GME, prawdopodobnie z powodu użycia pamięci lokalnej przez R.
Aaron
Niezłe! Czy ma on ograniczenia w języku Python, dzięki czemu mogę wykonać przetwarzanie wsadowe @Aaron?
Widziano
2
@Seen zapoznaj się z sekcją dotyczącą automatyzacji i przetwarzania wsadowego (p10) w dokumencie pomocniczym: spatialecology.com/gme/images/SpatialEcologyGME.pdf
Aaron
4

Będziesz musiał stworzyć wielokąt pączka z otworem pączka reprezentującym wewnętrzną przestrzeń niepunktową i pewien zasięg przestrzenny reprezentujący obszar ograniczający obszar wielokąta.


źródło
Tylko dodatek: z licencją ArcInfo możesz to zrobić za pomocą narzędzia Erase
om_henners,
3

Przepraszam, po prostu nie mogę się oprzeć. Ponieważ zawsze dobrze jest wiedzieć, co się dzieje pod maską GME, oto rozwiązanie rzeczywistego kodu R.

require(sp)
require(rgeos)

# Create example polygon data
x <- readWKT("POLYGON ((0 0, 0 10, 10 10, 10 0, 0 0))")
y <- readWKT("POLYGON ((3 3, 7 3, 7 7, 3 7, 3 3))")

# Calculate difference in polygon geometries to create null polygon
d <- gDifference(x,y)

# Create random sample in non-null polygon
rs <- spsample(d, 20, type="random")  

# Plot results  
plot(d, col="red")
  plot(rs,pch=19,col="black",add=TRUE)

Podejście to prawdopodobnie bardzo różni się od sposobu, w jaki robi to GME, ale wykorzystuje natywne klasy przestrzenne R i całkiem nową bibliotekę topologii, dzięki czemu kod jest bardzo wydajny. Daje to również przykład, który można łatwo owinąć w pętlę for.

Jeffrey Evans
źródło