Инструмент Создать случайную точку способен генерировать определенное количество точек внутри полигонов. Мне интересно, учитывая ограничивающий прямоугольник, есть ли способ, которым я могу генерировать случайные точки за пределами этого многоугольника?
Лично мне не нравится алгоритм случайных точек в ArcGIS. В качестве альтернативы используйте функцию Geospatial Modeling Environment (GME) genrandompnts. Вы сможете идентифицировать определенные полигоны, где случайные точки будут исключены (см. Выделенную область в прикрепленном .jpg). Лучше всего это программное обеспечение бесплатно.
GME предоставляет вам набор инструментов для анализа и моделирования, начиная от небольших «строительных блоков», которые вы можете использовать для создания сложного рабочего процесса, до полностью автономных программ анализа. Он также использует чрезвычайно мощное программное обеспечение с открытым исходным кодом R в качестве статистического механизма для управления некоторыми инструментами анализа. Одной из сильных сторон R является то, что она имеет открытый исходный код, полностью прозрачна и хорошо документирована: важные характеристики для любого научно-аналитического программного обеспечения.
Можете ли вы дать дополнительную информацию о том, почему вам не нравится алгоритм случайных точек по умолчанию и почему GME более оптимален?
Стивен Lead
@ Аарон Хороший! Я не пробовал это, так как это были инструменты моделирования Hawth - мне придется скачать его и дать трещину!
om_henners
3
@ Stefhen В течение последнего месяца я генерировал случайные точки в четырех классах. Я столкнулся с несколькими проблемами: 1) ArcGIS создал несколько точек за пределами моих входных полигонов 2) Arc было трудно работать с областями, слишком маленькими для моих входных параметров (например, минимально допустимое расстояние = 50 м и точек = 50), тогда как GME обрабатывал их проблемы, возникающие из-за появления случайных точек до тех пор, пока правила не были нарушены, и затем не появилось предупреждающее сообщение. 3) RPG Arc медленнее, чем у GME, вероятно, из-за использования R локальной памяти.
Аарон
Хороший! Имеет ли он границы Python, чтобы я мог выполнить некоторую пакетную обработку @Aaron?
Вам нужно будет создать кольцевой многоугольник с дыркой от бублика, представляющей внутреннее неточечное пространство, и некоторый пространственный экстент, представляющий ограничивающую область многоугольной области.
Просто дополнение: с лицензией ArcInfo вы можете сделать это с помощью инструмента Erase
om_henners
3
Извините, я просто не могу устоять. Поскольку всегда полезно знать, что происходит под капотом с чем-то вроде 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.
Вам нужно будет создать кольцевой многоугольник с дыркой от бублика, представляющей внутреннее неточечное пространство, и некоторый пространственный экстент, представляющий ограничивающую область многоугольной области.
источник
Извините, я просто не могу устоять. Поскольку всегда полезно знать, что происходит под капотом с чем-то вроде GME, вот решение в реальном коде R.
Этот подход, вероятно, сильно отличается от того, как это делает GME, но использует собственные пространственные классы R sp и довольно новую библиотеку топологий, что делает код очень эффективным. Это также дает пример, который можно легко обернуть в цикл for.
источник