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?
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?
Odpowiedzi:
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.
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.
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.