Измерение расстояний от точки до полигона
-
- Новоприбывший
- Сообщения: 1
- Зарегистрирован: 07 дек 2009, 06:54
- Репутация: 0
Измерение расстояний от точки до полигона
Помогите решить задачу, пожалуйста.
Есть 2000 точек и чуть меньше полигонов, каждая точка принадлежит своему полигону, но может в нем находиться и не находиться. Надо измерить расстояние от каждой точки до своего полигона(автоматически).
Есть 2000 точек и чуть меньше полигонов, каждая точка принадлежит своему полигону, но может в нем находиться и не находиться. Надо измерить расстояние от каждой точки до своего полигона(автоматически).
-
- Активный участник
- Сообщения: 184
- Зарегистрирован: 15 сен 2006, 16:15
- Репутация: 10
- Откуда: Москва
Re: Измерение расстояний от точки до полигона
ArcToolBox -> Analysis Tools -> Proximty -> Generate near Table (снять галочку find only closest features)
получите таблицу расстояний от точки до ВСЕХ полигонов, потом отберете нужные по известному вам признаку "свой-чужой" полигон
получите таблицу расстояний от точки до ВСЕХ полигонов, потом отберете нужные по известному вам признаку "свой-чужой" полигон
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 11 дек 2009, 10:41
- Репутация: 0
Re: Измерение расстояний от точки до полигона
Подскажите, пожалуйста, как изменить порядок действий, если точек не 2000, а 20-60 тыс и полигонов порядка 1000.
Решая напрямую тем же способом получил dbf на 1 Gb с полумиллионом записей и 22 минуты вычислений.
Этап поледующей обработки тоже вызвал затруднения - в запросах я не силен...
Ещё хочется, чтобы не приходилось задавать эти действия вручную поочередно, а объединит в один процесс.
Полагаю, что вычисления будут проходить оптимальнее, если из обоих слоев сделать выборки "своих точек" и "своих полигонов" по соответствующим значениям атрибутов, и для каждой такой выборки выполнить ArcToolBox -> Analysis Tools -> Proximty -> Near (Ближайший объект). Лишних рассчетов станет гораздо меньше.
Решая напрямую тем же способом получил dbf на 1 Gb с полумиллионом записей и 22 минуты вычислений.
Этап поледующей обработки тоже вызвал затруднения - в запросах я не силен...
Ещё хочется, чтобы не приходилось задавать эти действия вручную поочередно, а объединит в один процесс.
Полагаю, что вычисления будут проходить оптимальнее, если из обоих слоев сделать выборки "своих точек" и "своих полигонов" по соответствующим значениям атрибутов, и для каждой такой выборки выполнить ArcToolBox -> Analysis Tools -> Proximty -> Near (Ближайший объект). Лишних рассчетов станет гораздо меньше.
-
- Гуру
- Сообщения: 852
- Зарегистрирован: 15 сен 2005, 13:19
- Репутация: 6
- Откуда: москва
- Контактная информация:
Re: Измерение расстояний от точки до полигона
Разбейте полигоны на точки, все загрузите в базу данных, напишите запрос поиска минимального расстояния точка-точка как func(dx, dy). Если его ограничить заранее по ID полигона, будет работать быстро. Если создать индексы по x,y - еще быстрее.
-
- Завсегдатай
- Сообщения: 483
- Зарегистрирован: 17 авг 2006, 14:04
- Репутация: 0
- Откуда: Новосибирск
Re: Измерение расстояний от точки до полигона
А у меня в 9.2 такой нету. Это в 9.3 появилось?Mitrich писал(а):ArcToolBox -> Analysis Tools -> Proximty -> Generate near Table
-
- Активный участник
- Сообщения: 184
- Зарегистрирован: 15 сен 2006, 16:15
- Репутация: 10
- Откуда: Москва
Re: Измерение расстояний от точки до полигона
у меня в 9.3 есть.AndreyL писал(а):Это в 9.3 появилось?
я кстати не помню считает модуль расстояние от точки до центроида полигона или до ближайшей грани. Если надо до грани - то перевод в точку полигона не подходит.geologic писал(а):Разбейте полигоны на точки
скидывать в базу - ограничивать по радиусу поиска - не бояться миллиона записейJose писал(а):если точек не 2000, а 20-60 тыс

ну или программировать - не факт,, что на круг быстрее выйдет, если задача одноразовая
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 11 дек 2009, 10:41
- Репутация: 0
Re: Измерение расстояний от точки до полигона
Благодарю за оперативность.
Generate near Table считает расстояние до точки или до линии. Это меня устраивает.
Я ошибся. Получилось не пол-миллиона записей, а 27 млн. в dbf-файле размером 1 Гб.
При попытке DMT -> Joins -> Join Field добавить пару полей из таблицы с точками в GNT-таблицу ArcGIS ворочал файл 40-50 минут, файл вырос до 3,6 Гб. После этого начался процесс отсчета выполнения задания от 0%. Процесс прекратил.
Был ещё другой вариант: вне ArcGIS'а выполнить запрос и скрестить 3 таблицы. Этим бы я смог избежать обработки таблицы соответствия через просчет всех вариантов сочетаний объектов, ограничившись перебором только "своих". На этом пути выявилась ещё загвоздка. ArcGIS создал соответствие по полям FID одного и FID другого слоя. Другие (известные мне) программы не могут обратиться напрямую к номеру записи в файле, а в самом ArcGIS'е поле FID нелзя извлечь и продублировать в другом поле.
Может ли посодействовать Model Builder?
Выделить "свои объекты" и выполнить ArcToolBox -> Analysis Tools -> Proximty -> Near для выборки.
Повторить эти действия для всех возможных выборок с накоплением результатов.
Разбивать не надо. Требуется учесть геометрию полигона.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 для выборки.
Повторить эти действия для всех возможных выборок с накоплением результатов.
-
- Завсегдатай
- Сообщения: 483
- Зарегистрирован: 17 авг 2006, 14:04
- Репутация: 0
- Откуда: Новосибирск
Re: Измерение расстояний от точки до полигона
А как у вас учитывается тот случай, когда точка лежит внутри полигона?Jose писал(а):Generate near Table считает расстояние до точки или до линии. Это меня устраивает.
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 11 дек 2009, 10:41
- Репутация: 0
Re: Измерение расстояний от точки до полигона
Эти точки всегда можно отфильтровать путем отбора или обнуления параметра дистанции для попадания в "свой полигон".AndreyL писал(а):А как у вас учитывается тот случай, когда точка лежит внутри полигона?
-
- Завсегдатай
- Сообщения: 483
- Зарегистрирован: 17 авг 2006, 14:04
- Репутация: 0
- Откуда: Новосибирск
Re: Измерение расстояний от точки до полигона
Есть у меня подозрение, что такая задачка легко и непринужденно решается в какой-нибудь более-менее божеской СУПБД, типа PostGIS. Изучение PostGIS, как я понял, занятие не для ленивых, а АркГИС как был, так пока и остается не более, чем продвинутым визуализатором, не поддерживающим даже обыкновенного SQL, не говоря уже о пространственном.
-
- Активный участник
- Сообщения: 178
- Зарегистрирован: 16 июл 2008, 09:56
- Репутация: 1
- Откуда: Москва
Re: Измерение расстояний от точки до полигона
Если координаты декартовы, то легко. А если координаты в градусах, а расстояние надо получить в метрах?AndreyL писал(а):Есть у меня подозрение, что такая задачка легко и непринужденно решается в какой-нибудь более-менее божеской СУПБД, типа PostGIS. Изучение PostGIS, как я понял, занятие не для ленивых, а АркГИС как был, так пока и остается не более, чем продвинутым визуализатором, не поддерживающим даже обыкновенного SQL, не говоря уже о пространственном.
-
- Завсегдатай
- Сообщения: 483
- Зарегистрирован: 17 авг 2006, 14:04
- Репутация: 0
- Откуда: Новосибирск
Re: Измерение расстояний от точки до полигона
Ну, начнем с того, что перевод из географических координат в проекцию сейчас не представляет труда, а СУПБД, по идее, должны делать это на лету. Даже АркГИС умеет считать длину линии в метрах, даже если эта линия задана в географических координатах.
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 11 дек 2009, 10:41
- Репутация: 0
Re: Измерение расстояний от точки до полигона
Возможность решить в других программах, конечно, приятна, но сейчас въезжаю конкретно в ArcGIS и перепрыгивать на изучение других вариантов решения затруднительно.
Можно ли в ArcGIS'е автоматизировать перебор всех "своих пар" и результаты свести воедино:
1) выбрать все точки соответствующие Polygon_1
2) вычислить расстояния от "своих точек" до выделенного "своего полигона"
3) перебрать все варианты Polygon_2, 3, 4... и повторить пункт 2).
Рузультат накопить в семантике слоя точек.
(Объемы вычислений сократятся в десятки тысяч раз).
Запросы в ArcGIS'е, действительно, не похожи на другие виды SQL.
Как можно вызвать стандартные команды для выборки, а не для целого слоя? Если это возможно средствами VB или другими, прошу подкинуть ссылку на раздел хелпа, где есть пример такого кода.
Можно ли в ArcGIS'е автоматизировать перебор всех "своих пар" и результаты свести воедино:
1) выбрать все точки соответствующие Polygon_1
2) вычислить расстояния от "своих точек" до выделенного "своего полигона"
3) перебрать все варианты Polygon_2, 3, 4... и повторить пункт 2).
Рузультат накопить в семантике слоя точек.
(Объемы вычислений сократятся в десятки тысяч раз).
Запросы в ArcGIS'е, действительно, не похожи на другие виды SQL.
Как можно вызвать стандартные команды для выборки, а не для целого слоя? Если это возможно средствами VB или другими, прошу подкинуть ссылку на раздел хелпа, где есть пример такого кода.
-
- Интересующийся
- Сообщения: 40
- Зарегистрирован: 05 авг 2009, 13:11
- Репутация: 0
Re: Измерение расстояний от точки до полигона
Это у вас только подозрение. Считайте трудозатраты и поймете, что универсального инструмента не существует - везде необходим мозг специалиста.AndreyL писал(а):Есть у меня подозрение, что такая задачка легко и непринужденно решается в какой-нибудь более-менее божеской СУПБД, типа PostGIS. Изучение PostGIS, как я понял, занятие не для ленивых, а АркГИС как был, так пока и остается не более, чем продвинутым визуализатором, не поддерживающим даже обыкновенного SQL, не говоря уже о пространственном.
-
- Завсегдатай
- Сообщения: 483
- Зарегистрирован: 17 авг 2006, 14:04
- Репутация: 0
- Откуда: Новосибирск
Re: Измерение расстояний от точки до полигона
Весьма ценное замечание, но не будем вдаваться в философию.dart писал(а):Считайте трудозатраты и поймете, что универсального инструмента не существует - везде необходим мозг специалиста.
Можно выделить один полигон и найти расстояния точек до этого полигона. По крайней мере, у меня инструмент Near работает только с выделенной линией, если она была выделена. После этого можно выбрать из таблицы только те точки, в которых совпадают идентификатор полигона и атрибут точки. Так для каждого полигона, получим отдельные слои, которые потом объединить. Если набор полигонов не меняется, можно написать модель, иначе макрос с циклом.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость