Создание случайных полигонов в пределах заданной границы шейп-файлов в R - PullRequest
2 голосов
/ 03 апреля 2012

У меня есть шейп-файл, который является национальной границей Чили.Если возможно, я бы хотел генерировать случайным образом, например, 1000 полигонов в этой области.Я задаюсь вопросом, что будет лучшим способом сделать это в R?Я подумал, может быть, загрузить шейп-файл с помощью пакета 'shapefiles', а затем создать набор точечных данных, используя что-то, доступное в 'spatstat'.Тогда я мог бы создать круговые многоугольники, основанные вокруг этих точек ... Это в основном гипотетически, и я не знаю, возможно ли это.

У меня есть некоторый опыт в R, но я на самом деле никогда не пробовал никакого пространственного анализа.

Любые мысли и предложения будут оценены.

Ответы [ 2 ]

3 голосов
/ 03 апреля 2012

Можете ли вы работать с растровыми полигонами?

Создайте точную сетку (меньшую, чем ваша целевая область многоугольника) над полигоном шейп-файла, затем выберите случайный «начальный» квадрат сетки и «увеличьте» его, добавив ближайшийячейки сетки постепенно, пока это не будет нужный размер.Таким образом, вы получите приблизительно круглые многоугольники внутри страны и полукруглые многоугольники, если начнете с прибрежной ячейки.

То, подходит ли вам растровое представление, зависит от того, что вы планируете делать, когда создали эти полигоны, но похоже, что вы просто собираетесь наложить их на другие данные о землепользовании, что можно сделать с помощьюрастры на растрах или растры на многоугольниках.

Должны быть все выполнимы в растровом пакете.

1 голос
/ 03 апреля 2012

Это действительно сложная проблема, так как вам нужно беспокоиться о некоторых вещах.Многоугольники могут быть простыми выпуклыми предметами или более сложными «вогнутыми» формами или многоразветвленными формами, состоящими из множества «островков» и озер.Я бы сразу понял эту часть, поскольку, если вам нужен только простой случай, лучше.

1) Выпуклые многоугольники легко генерировать из случайных точек, поскольку вам просто нужна выпуклая оболочка - порядок расположения точек не влияет на результат.Для реальных полигонов очень важен порядок, в котором вы связываете их вместе как границу, иначе вы получите бессмысленные формы с искривленными границами.Но есть пакет alphahull для генерации более умных оболочек из невыпуклых точек.

2) Если ни одна часть многоугольника не может превысить основную границу, то вам нужно, чтобы каждая вершина была как внутри границы, так и чтобы ни один соединяющий их сегмент не пересекал основную границу.Представьте себе многоугольник, вершины которого находятся внутри национальной границы, но один отрезок пересекает вход в реку.Есть функции выборки для получения точек в пределах многоугольника (spsample в sp, csr в splancs), и есть геометрические тесты в rgeos, которые можно использовать, чтобы убедиться, что пересечений нет - все же это лишнееработать, поскольку вы тестируете на предмет сбоя набора точек выборки, определяющих многоугольник, а не генерирующих известные "хорошие случаи".

Если вы можете ослабить некоторые из ограничений, это может быть вполне выполнимо.Вы упоминаете «круговые многоугольники», действительно ли вы имеете в виду круги (или приблизительные круги), поскольку в таком случае некоторые тесты могут стать намного проще.

Я был бы склонен копаться в ваших целях и посмотреть, действительно ли это то, чем вы хотите заниматься, или можете ли вы упростить вещи еще больше.

...