Інструмент Create Random Point здатний генерувати певну кількість точок у полігонах. Мені цікаво, з огляду на обмежувальний ящик, чи є можливість створити випадкові точки поза цим полігоном?
Інструмент Create Random Point здатний генерувати певну кількість точок у полігонах. Мені цікаво, з огляду на обмежувальний ящик, чи є можливість створити випадкові точки поза цим полігоном?
Відповіді:
Особисто мені не подобається алгоритм випадкової точки в ArcGIS. Крім того, використовуйте функцію навколишнього середовища геопросторового моделювання (GME) genrandompnts
. Ви зможете ідентифікувати конкретні багатокутники, де випадкові точки будуть виключені (див. Виділену область у додатку .jpg). Найкраще це програмне забезпечення є безкоштовним.
GME надає вам набір інструментів для аналізу та моделювання, починаючи від невеликих "будівельних блоків", які можна використовувати для побудови складного робочого потоку, до повністю автономних програм аналізу. Він також використовує надзвичайно потужне програмне забезпечення з відкритим кодом R як статистичний двигун для управління деякими інструментами аналізу. Однією з багатьох сильних сторін R є те, що він є відкритим кодом, повністю прозорим і добре задокументованим: важливі характеристики будь-якого наукового аналітичного програмного забезпечення.
Вам потрібно буде створити багатокутник з пончиками з отворотом для пончиків, що представляє внутрішній неточковий простір і деяку просторову міру, що представляє межу площі полігональної області.
Вибач, я просто не можу чинити опір. Оскільки завжди добре знати, що відбувається під кришкою з чимось на зразок GME, ось рішення у фактичному коді 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)
Цей підхід, ймовірно, дуже відрізняється від того, як це робить GME, але використовує натурні просторові класи R sp та досить нову бібліотеку топології, що робить код дуже ефективним. Це також дає приклад, який легко можна загорнути в цикл for.