Я хочу создать точечный векторный набор данных из 10000 точек (или больше) внутри двоичного растра, где точки должны быть ограничены областями, где значение растра равно 1.
Я попробовал следующие шаги.
- Многоугольный растр
- QGIS: Вектор -> Инструменты исследования -> Случайные точки
Это прекрасно работает до 2000 очков, но все, что выше, просто вызывает сбой QGIS.
Есть ли способ создать набор векторных данных с большим количеством точечных объектов, ограниченных двоичным растром (или его полигональной версией)?
Следующие инструменты находятся в моем распоряжении, ранжируются от самых неблагоприятных: QGIS, Python, R, ArcGIS
Это то, к чему я стремлюсь, только с 10-кратными точечными функциями.
qgis
arcgis-desktop
python
r
point-in-polygon
Керстен
источник
источник
Ответы:
Вот способ в R:
Создайте тестовый растр, 20х30 ячеек, сделайте 1/10 из ячеек, установленных на 1, построите график:
Для существующего растра в файле, например, geoTIFF, вы можете просто сделать:
Теперь возьмите матрицу координат xy ячеек 1, нарисуйте эти точки, и мы увидим, что у нас есть центры клеток:
Шаг 1. Создайте 1000 (xo, yo) пар, которые центрированы на 0 в коробке размером с одну ячейку. Обратите внимание на использование,
res
чтобы получить размер ячейки:Шаг 2. Определите, в какую ячейку входит каждая из вышеперечисленных точек, путем случайной выборки 1000 значений от 1 до числа 1:
Наконец, вычислите координату, добавив центр ячейки к смещению. Участок для проверки:
Вот 10000 точек (замените 1000 выше на 10000), построенных с помощью
pch="."
:Практически мгновенно для 10000 точек на растре 200x300 с половиной точек как единица. Думаю, со временем они будут линейно увеличиваться с тем, сколько в растре.
Чтобы сохранить как шейп-файл, преобразуйте его в
SpatialPoints
объект, задайте ему правильную ссылку на систему координат (так же, как и в растре) и сохраните:Это создаст шейп-файл, который включает номер ячейки и смещения в качестве атрибутов.
источник
Всякий раз, когда я работаю с большими наборами данных, мне нравится запускать инструменты / команды вне QGIS, например, из автономного скрипта или из оболочки OSGeo4W . Не столько потому, что QGIS дает сбой (даже если он говорит «Не отвечает», возможно, он все еще обрабатывает данные, которые вы можете проверить из диспетчера задач ), а потому, что для обработки данных доступно больше ресурсов ЦП, таких как ОЗУ. Сам QGIS потребляет изрядную часть памяти для запуска.
В любом случае, чтобы запустить инструмент вне QGIS ( вам необходимо установить QGIS через установщик OSGeo4W ), выполните первые 2 шага, как описано @gcarrillo в этом посте: Проблема с импортом qgis.core при написании автономного скрипта PyQGIS (Я предлагаю скачать и использовать его .bat файл).
Как только ПУТИ установлены, введите
python
в командной строке. Для удобства скопируйте следующий код в текстовый редактор, такой как «Блокнот», отредактируйте параметры, такие как путь к вашему шейп-файлу и т. Д., А затем вставьте все это в командную строку, щелкнув правой кнопкой мыши> Вставить :Используя скрипт, я запустил инструмент Случайные точки в границах слоев для довольно большого шейп-файла, и для генерации 10 тыс. Точек потребовалось менее 20 секунд. Запуск его внутри QGIS занял почти 2 минуты, так что, по крайней мере, для меня есть существенная разница.
источник
Вы также можете использовать GRASS GIS непосредственно для этой работы - Стратифицированная случайная выборка: случайная выборка из векторной карты с пространственными ограничениями :
https://grass.osgeo.org/grass72/manuals/v.random.html#stratified-random-sampling:-random-sampling-from-vector-map-with-spatial-constraints
Кроме того, в команде реализована случайная выборка из векторной карты по атрибуту и несколько других методов.
Примечание. Версия v.random, представленная в QGIS посредством обработки, отражает не полную функциональность, а просто упрощенное представление.
источник