Измерение расстояний от точки до полигона

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
golubev-86@mail.ru
Новоприбывший
Сообщения: 1
Зарегистрирован: 07 дек 2009, 06:54
Репутация: 0

Измерение расстояний от точки до полигона

Сообщение golubev-86@mail.ru » 07 дек 2009, 07:09

Помогите решить задачу, пожалуйста.
Есть 2000 точек и чуть меньше полигонов, каждая точка принадлежит своему полигону, но может в нем находиться и не находиться. Надо измерить расстояние от каждой точки до своего полигона(автоматически).

Mitrich
Активный участник
Сообщения: 184
Зарегистрирован: 15 сен 2006, 16:15
Репутация: 10
Откуда: Москва

Re: Измерение расстояний от точки до полигона

Сообщение Mitrich » 07 дек 2009, 13:50

ArcToolBox -> Analysis Tools -> Proximty -> Generate near Table (снять галочку find only closest features)
получите таблицу расстояний от точки до ВСЕХ полигонов, потом отберете нужные по известному вам признаку "свой-чужой" полигон

Jose
Новоприбывший
Сообщения: 8
Зарегистрирован: 11 дек 2009, 10:41
Репутация: 0

Re: Измерение расстояний от точки до полигона

Сообщение Jose » 11 дек 2009, 11:08

Подскажите, пожалуйста, как изменить порядок действий, если точек не 2000, а 20-60 тыс и полигонов порядка 1000.
Решая напрямую тем же способом получил dbf на 1 Gb с полумиллионом записей и 22 минуты вычислений.
Этап поледующей обработки тоже вызвал затруднения - в запросах я не силен...
Ещё хочется, чтобы не приходилось задавать эти действия вручную поочередно, а объединит в один процесс.
Полагаю, что вычисления будут проходить оптимальнее, если из обоих слоев сделать выборки "своих точек" и "своих полигонов" по соответствующим значениям атрибутов, и для каждой такой выборки выполнить ArcToolBox -> Analysis Tools -> Proximty -> Near (Ближайший объект). Лишних рассчетов станет гораздо меньше.

geologic
Гуру
Сообщения: 852
Зарегистрирован: 15 сен 2005, 13:19
Репутация: 6
Откуда: москва
Контактная информация:

Re: Измерение расстояний от точки до полигона

Сообщение geologic » 11 дек 2009, 13:09

Разбейте полигоны на точки, все загрузите в базу данных, напишите запрос поиска минимального расстояния точка-точка как func(dx, dy). Если его ограничить заранее по ID полигона, будет работать быстро. Если создать индексы по x,y - еще быстрее.

AndreyL
Завсегдатай
Сообщения: 483
Зарегистрирован: 17 авг 2006, 14:04
Репутация: 0
Откуда: Новосибирск

Re: Измерение расстояний от точки до полигона

Сообщение AndreyL » 11 дек 2009, 15:21

Mitrich писал(а):ArcToolBox -> Analysis Tools -> Proximty -> Generate near Table
А у меня в 9.2 такой нету. Это в 9.3 появилось?

Mitrich
Активный участник
Сообщения: 184
Зарегистрирован: 15 сен 2006, 16:15
Репутация: 10
Откуда: Москва

Re: Измерение расстояний от точки до полигона

Сообщение Mitrich » 11 дек 2009, 17:13

AndreyL писал(а):Это в 9.3 появилось?
у меня в 9.3 есть.
geologic писал(а):Разбейте полигоны на точки
я кстати не помню считает модуль расстояние от точки до центроида полигона или до ближайшей грани. Если надо до грани - то перевод в точку полигона не подходит.
Jose писал(а):если точек не 2000, а 20-60 тыс
скидывать в базу - ограничивать по радиусу поиска - не бояться миллиона записей :)
ну или программировать - не факт,, что на круг быстрее выйдет, если задача одноразовая

Jose
Новоприбывший
Сообщения: 8
Зарегистрирован: 11 дек 2009, 10:41
Репутация: 0

Re: Измерение расстояний от точки до полигона

Сообщение Jose » 11 дек 2009, 18:00

Благодарю за оперативность.
Mitrich писал(а):я кстати не помню считает модуль расстояние от точки до центроида полигона или до ближайшей грани. Если надо до грани - то перевод в точку полигона не подходит.
Разбивать не надо. Требуется учесть геометрию полигона.
Generate near Table считает расстояние до точки или до линии. Это меня устраивает.
Mitrich писал(а):скидывать в базу - ограничивать по радиусу поиска - не бояться миллиона записей :)
Ограничивать радиус не подходит. Хочу найти расстояния для всех "своих точек". Задача как раз выявить далеко расположенные. Близкие особого интереса не представляют.
Я ошибся. Получилось не пол-миллиона записей, а 27 млн. в dbf-файле размером 1 Гб.
При попытке DMT -> Joins -> Join Field добавить пару полей из таблицы с точками в GNT-таблицу ArcGIS ворочал файл 40-50 минут, файл вырос до 3,6 Гб. После этого начался процесс отсчета выполнения задания от 0%. Процесс прекратил.
Был ещё другой вариант: вне ArcGIS'а выполнить запрос и скрестить 3 таблицы. Этим бы я смог избежать обработки таблицы соответствия через просчет всех вариантов сочетаний объектов, ограничившись перебором только "своих". На этом пути выявилась ещё загвоздка. ArcGIS создал соответствие по полям FID одного и FID другого слоя. Другие (известные мне) программы не могут обратиться напрямую к номеру записи в файле, а в самом ArcGIS'е поле FID нелзя извлечь и продублировать в другом поле.
Mitrich писал(а):ну или программировать - не факт, что на круг быстрее выйдет, если задача одноразовая
Задача не штучная, а повторяющаяся. Поэтому хочется связать все в единый автономный процесс.

Может ли посодействовать Model Builder?
Выделить "свои объекты" и выполнить ArcToolBox -> Analysis Tools -> Proximty -> Near для выборки.
Повторить эти действия для всех возможных выборок с накоплением результатов.

AndreyL
Завсегдатай
Сообщения: 483
Зарегистрирован: 17 авг 2006, 14:04
Репутация: 0
Откуда: Новосибирск

Re: Измерение расстояний от точки до полигона

Сообщение AndreyL » 11 дек 2009, 18:16

Jose писал(а):Generate near Table считает расстояние до точки или до линии. Это меня устраивает.
А как у вас учитывается тот случай, когда точка лежит внутри полигона?

Jose
Новоприбывший
Сообщения: 8
Зарегистрирован: 11 дек 2009, 10:41
Репутация: 0

Re: Измерение расстояний от точки до полигона

Сообщение Jose » 11 дек 2009, 18:42

AndreyL писал(а):А как у вас учитывается тот случай, когда точка лежит внутри полигона?
Эти точки всегда можно отфильтровать путем отбора или обнуления параметра дистанции для попадания в "свой полигон".

AndreyL
Завсегдатай
Сообщения: 483
Зарегистрирован: 17 авг 2006, 14:04
Репутация: 0
Откуда: Новосибирск

Re: Измерение расстояний от точки до полигона

Сообщение AndreyL » 11 дек 2009, 22:29

Есть у меня подозрение, что такая задачка легко и непринужденно решается в какой-нибудь более-менее божеской СУПБД, типа PostGIS. Изучение PostGIS, как я понял, занятие не для ленивых, а АркГИС как был, так пока и остается не более, чем продвинутым визуализатором, не поддерживающим даже обыкновенного SQL, не говоря уже о пространственном.

Konstantin Tokar
Активный участник
Сообщения: 178
Зарегистрирован: 16 июл 2008, 09:56
Репутация: 1
Откуда: Москва

Re: Измерение расстояний от точки до полигона

Сообщение Konstantin Tokar » 12 дек 2009, 03:00

AndreyL писал(а):Есть у меня подозрение, что такая задачка легко и непринужденно решается в какой-нибудь более-менее божеской СУПБД, типа PostGIS. Изучение PostGIS, как я понял, занятие не для ленивых, а АркГИС как был, так пока и остается не более, чем продвинутым визуализатором, не поддерживающим даже обыкновенного SQL, не говоря уже о пространственном.
Если координаты декартовы, то легко. А если координаты в градусах, а расстояние надо получить в метрах?

AndreyL
Завсегдатай
Сообщения: 483
Зарегистрирован: 17 авг 2006, 14:04
Репутация: 0
Откуда: Новосибирск

Re: Измерение расстояний от точки до полигона

Сообщение AndreyL » 12 дек 2009, 07:27

Ну, начнем с того, что перевод из географических координат в проекцию сейчас не представляет труда, а СУПБД, по идее, должны делать это на лету. Даже АркГИС умеет считать длину линии в метрах, даже если эта линия задана в географических координатах.

Jose
Новоприбывший
Сообщения: 8
Зарегистрирован: 11 дек 2009, 10:41
Репутация: 0

Re: Измерение расстояний от точки до полигона

Сообщение Jose » 14 дек 2009, 17:41

Возможность решить в других программах, конечно, приятна, но сейчас въезжаю конкретно в ArcGIS и перепрыгивать на изучение других вариантов решения затруднительно.

Можно ли в ArcGIS'е автоматизировать перебор всех "своих пар" и результаты свести воедино:
1) выбрать все точки соответствующие Polygon_1
2) вычислить расстояния от "своих точек" до выделенного "своего полигона"
3) перебрать все варианты Polygon_2, 3, 4... и повторить пункт 2).
Рузультат накопить в семантике слоя точек.
(Объемы вычислений сократятся в десятки тысяч раз).

Запросы в ArcGIS'е, действительно, не похожи на другие виды SQL.
Как можно вызвать стандартные команды для выборки, а не для целого слоя? Если это возможно средствами VB или другими, прошу подкинуть ссылку на раздел хелпа, где есть пример такого кода.

dart
Интересующийся
Сообщения: 40
Зарегистрирован: 05 авг 2009, 13:11
Репутация: 0

Re: Измерение расстояний от точки до полигона

Сообщение dart » 17 дек 2009, 16:42

AndreyL писал(а):Есть у меня подозрение, что такая задачка легко и непринужденно решается в какой-нибудь более-менее божеской СУПБД, типа PostGIS. Изучение PostGIS, как я понял, занятие не для ленивых, а АркГИС как был, так пока и остается не более, чем продвинутым визуализатором, не поддерживающим даже обыкновенного SQL, не говоря уже о пространственном.
Это у вас только подозрение. Считайте трудозатраты и поймете, что универсального инструмента не существует - везде необходим мозг специалиста.

AndreyL
Завсегдатай
Сообщения: 483
Зарегистрирован: 17 авг 2006, 14:04
Репутация: 0
Откуда: Новосибирск

Re: Измерение расстояний от точки до полигона

Сообщение AndreyL » 20 дек 2009, 21:30

dart писал(а):Считайте трудозатраты и поймете, что универсального инструмента не существует - везде необходим мозг специалиста.
Весьма ценное замечание, но не будем вдаваться в философию.

Можно выделить один полигон и найти расстояния точек до этого полигона. По крайней мере, у меня инструмент Near работает только с выделенной линией, если она была выделена. После этого можно выбрать из таблицы только те точки, в которых совпадают идентификатор полигона и атрибут точки. Так для каждого полигона, получим отдельные слои, которые потом объединить. Если набор полигонов не меняется, можно написать модель, иначе макрос с циклом.

Ответить

Вернуться в «ArcGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость