Выбрать все точки в слое по расстоянию

0 голосов
спросил 19 Март, 10 от Worker (22,480 баллов) в категории Программные продукты Esri
Доброго дня!

Такая задача, а я торможу :) есть точечный слой. Мне необходимо выбрать все точки, которые находятся близко друг к другу (скажем, 1 км). Затем создать для каждой группы выбранных точек центровые точки (т.е., центроид), которые будут экспортированы в новый слой.


12 Ответы

0 голосов
ответил 19 Март, 10 от pooperec (10,820 баллов)
Правильно заданный вопрос - половина ответа =)
Model Builder или программно?

0 голосов
ответил 19 Март, 10 от Worker (22,480 баллов)
:) стандартными средствами ArcGIS лучше всего (инструменты какие геообработки). Программно тоже можно, но если можно проще, то чего уж.. :)
0 голосов
ответил 19 Март, 10 от pooperec (10,820 баллов)
Ну с Model Builder`om работал слегка,  и посему постараюсь поучавствовать...

Как я понял задачу. Алгоритм:
1. Получаем регулярную сеть полигонов х на у условных единиц.
2. Находим и выделяем подмножество точек которые попадают в ячейку .
3. На основе подмножества ищем центральную точку. Добавляем её на выход.
4. Повторяем с п.2 пока не "кончиться" размеченная территория.

Итог:
Имеем центра подмножеств, согласно регулярной сетки (кластеризация).
(если я где-то не прав - поправьте)

Как я сделал (ArcGIS 9.3.1):
1. Create Fishnet (на вход слой точек - для определения правильного экстента, и параметрі сетки).
2. Feature to polygon (на входе созданая сетка). Получаем набор полигонов.
3. Select (на вход слой полигонов и условие "OBJECTID = %i%+1", где %и% - номер итерации).
4. Select Layer By Location (intersect выделенного полигона и всех точек которые на нём находяться, switch selection).
5. Central Feature (на вход выделенные в п.4 точки) - выход центральная точка.

Количество итераций = количество полигонов.

0 голосов
ответил 19 Март, 10 от TDenis (42,620 баллов)
Попробуйте ещё инструмент "Integrate" (Интегрировать).
0 голосов
ответил 20 Март, 10 от pooperec (10,820 баллов)
И, пожалуйста, напишите что получилось (не получилось), очень интересно...
0 голосов
ответил 22 Март, 10 от Worker (22,480 баллов)
Приветствую

Спасибо за помощь. Все нормуль получается, pooperec, спасибо большое. Вот только в модели в конструкторе запросов не пойму никак как указать, чтобы он все объекты из грида полигонов перебрал.. проверил на одном полигоне, все работает отлично.

TDenis , а в каком контексте инструмент Интегрировать здесь следует использовать?
0 голосов
ответил 22 Март, 10 от TDenis (42,620 баллов)
Инструмент разбивает точки на группы (кластеры), как раз на основании заданного ограничения по расстоянию. После чего определяет центр каждой группы и перемещает все точки группы в этот центр.
Не то?
0 голосов
ответил 22 Март, 10 от Worker (22,480 баллов)
Да, TDenis, то :-) чего-то не думал, что в таком случае тоже можно использовать интегрировать. pooperec, с конструктором вопрос открытый :-)
0 голосов
ответил 22 Март, 10 от pooperec (10,820 баллов)
Метод кривой, но если кто-то знает более красивый - прошу подсказать.

В свойствах модели задаете количество итераций равное количеству записей в слое-сетке.

Далее:
3. Select (на вход слой полигонов и условие "OBJECTID = %n%+1", где %N% - номер итерации).
4. Select Layer By Location (intersect выделенного полигона и всех точек которые на нём находяться, new_selection).

И в после Central Feature (или предложенном Integrate), название выходного слоя формируете как *_%n%.

Запускаете процес. После выполнения делаете всем слоям (а их будет столько сколько было итераций) Union.

З.Ы. Простите за поздний ответ - упустил ветку из виду...
0 голосов
ответил 22 Март, 10 от Worker (22,480 баллов)
pooperec, спасибо за отзыв. Все действия понятны, все корректно. Вот только в конструкторе такой SQL я ведь не могу написать, "OBJECTID" = %n%+1 , ругается при верификации :-)
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...