Определите точки в шейп-файле, которые не имеют других точек в пределах x км с помощью QGIS

11

Вероятно, это наивный вопрос, но я борюсь как новый пользователь QGIS.

У меня очень большой шейп-файл (275 000 точек, но я могу разбить его на 10 субрегионов, если это необходимо для более быстрой обработки).

Я хочу идентифицировать все точки, которые не имеют других точек в пределах 200 метров, а затем кодировать каждую из этих точек со значением «уникальное» в поле файла.

Для всех остальных точек, которые являются частью локальных кластеров, я хочу закодировать их как «кластеризованные».

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

В настоящее время мне не удается выполнить шаг 1, поэтому любая помощь будет приветствоваться.

Ли Беттене
источник

Ответы:

0

Вы также можете попробовать самостоятельное соединение, используя плагин NNJoin в QGIS.

Для каждого объекта входного слоя он найдет ближайший объект (исключая себя в случае самостоятельного соединения) и включит расстояние и все атрибуты ближайшего объекта в сгенерированном наборе данных. Это займет некоторое время для вашего набора данных (я попытался с набором точечных данных с около 175000 объектов, и это занимает несколько минут ...).

Ховард Твите
источник
9

Вы можете использовать Вектор> Инструменты анализа> Матрица расстояний и объединение, чтобы добиться того, что вы просите.

Я буду использовать слой аэропорта данных образца qgis , чтобы проиллюстрировать это. Это небольшой набор данных, поэтому я не уверен, как он будет работать с шейп-файлом с 275000 точек.

1. Создайте матрицу расстояний, используя ваш слой как пункт назначения и цель.

Не забудьте поставить галочку «Использовать только ближайшие (k) целевые точки» и установить 1.

введите описание изображения здесь

2. Откройте CSV с добавлением текстового слоя с разделителями

Выберите «Запятая» в качестве разделителя, и установите определение геометрии как отсутствие геометрии

введите описание изображения здесь

3. Создайте соединение в исходном слое с вновь созданной таблицей.

введите описание изображения здесь

4. Используйте Калькулятор поля, чтобы заполнить поле нужными значениями.

Благодаря объединению у нас теперь есть доступ к значениям таблицы расстояний из таблицы атрибутов airport, поэтому довольно легко создать новое поле и заполнить его «кластеризованными» и «уникальными» значениями в зависимости от значений матрицы расстояний. , из-за данных моего примера я использовал значение 1200000 (1200 км), вы должны адаптировать его к своему случаю (200).

введите описание изображения здесь

В конце ваш слой должен иметь новое поле с именем point_type с различными значениями в соответствии с минимальным расстоянием до ближайшей точки.

введите описание изображения здесь

Александр Нето
источник
Это выглядит как элегантное решение. Однако у меня есть одно осложнение. Я знаю, что есть некоторые точки, которые имеют ИДЕНТИЧНЫЕ местоположения (это результат синонимов имени во время первоначального сбора данных). В одном случае я идентифицировал 3 по одной и той же точке. Я думаю, что ваше решение предполагает (разумно), что все точки расположены уникально. Есть ли какой-то очевидный способ, которым я могу проверить свое покрытие, чтобы сначала устранить точки с тем же местоположением?
Ли Беттене
@LeighBettenay Если этот ответ касается вашего первоначального вопроса, то я думаю, что вы должны принять его (зеленая галочка), чтобы вознаградить ответчиков, и исследовать / представить ваше дополнительное требование как новый вопрос. +1 за отличный первый вопрос!
PolyGeo
@PolyGeo Извините, я новичок в этом форуме и не знаю протокола. Рад "зеленой галочке" прекрасный ответ, но, к сожалению, не знаю как !!
Ли Беттене
Просто щелкните по серой галочке под вопросом о голосовании (в левом углу вопроса). Спасибо
Александр Нето