Страница 1 из 2

Найти расстояние от пиксела до границы полигона

Добавлено: 13 сен 2013, 12:11
Voin
Добрый день!

Проблема:

допустим есть растр и есть шейп с полигонами. Надо найти расстояние от каждого пиксела до ближайшей границы полигона внутри которого этот пиксел.

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

Заранее благодарен

Re: Найти расстояние от пиксела до границы полигона

Добавлено: 13 сен 2013, 12:32
novia
вряд ли вы решите эту задачу без генерации точечного слоя.

тем более что задача будет сильно упрощена, когда вы исключите из поиска точки, которые не покрыты полигонами.

как вариант, можно перед конвертацией в точки, извлечь растр по маске из этих полигонов.

Re: Найти расстояние от пиксела до границы полигона

Добавлено: 13 сен 2013, 12:53
Voin
novia писал(а):вряд ли вы решите эту задачу без генерации точечного слоя.

тем более что задача будет сильно упрощена, когда вы исключите из поиска точки, которые не покрыты полигонами.

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

Задача состоит в расчете веса каждого пиксела в зависимости от его удаления от границы. Допустим есть растровая маска застройки города (urban footprint) и векторная граница этого города. Есть условные зоны удаления от границы (500 м, 1 км, 5 км и т.д.), вес пиксела должен расчитываться исходя от его попадания в какую-либо зону.

Может есть идеи другого подхода?

Re: Найти расстояние от пиксела до границы полигона

Добавлено: 13 сен 2013, 13:07
novia
почему бы просто не построить растр евклидова расстояния от города? а потом на его основе сделать растр весов.
в настройках геообработки указать параметры расположения пикселов как в растре, с которым потом нужно проводить вычисления.

Re: Найти расстояние от пиксела до границы полигона

Добавлено: 13 сен 2013, 14:51
Voin
не получается... города у меня в виде набора полигонов. Когда загружаю его в Euclidean Distance - весь набор городов воспринимается как один объект, и выходной растр - просто одноцветная картинка перекрывающую всю область полигонального шейпа

Re: Найти расстояние от пиксела до границы полигона

Добавлено: 13 сен 2013, 14:58
novia
значит что-то вы не так настроили... давайте, рассказывайте по пунктам
какая СК у данных векторных и растровых?
какие параметры указали для инструмента?

Re: Найти расстояние от пиксела до границы полигона

Добавлено: 13 сен 2013, 14:59
Maka
Voin писал(а): Есть условные зоны удаления от границы (500 м, 1 км, 5 км и т.д.), вес пиксела должен расчитываться исходя от его попадания в какую-либо зону.

Может есть идеи другого подхода?
так у вас зоны? т.е для всех пикселов в зоне 1 км вес будет одинаков или в формуле важно индивидуальное расстояние от пиксела до границы?
просто зоны сильно все упрощают

Re: Найти расстояние от пиксела до границы полигона

Добавлено: 13 сен 2013, 15:05
Voin
Maka писал(а):
Voin писал(а): Есть условные зоны удаления от границы (500 м, 1 км, 5 км и т.д.), вес пиксела должен расчитываться исходя от его попадания в какую-либо зону.

Может есть идеи другого подхода?
так у вас зоны? т.е для всех пикселов в зоне 1 км вес будет одинаков или в формуле важно индивидуальное расстояние от пиксела до границы?
просто зоны сильно все упрощают
да, пока в каждой конкретной зоне вес одинаков, но количество зон варьируется в зависимости от размера города

Re: Найти расстояние от пиксела до границы полигона

Добавлено: 13 сен 2013, 15:13
Maka
Voin писал(а):
Maka писал(а):
Voin писал(а): Есть условные зоны удаления от границы (500 м, 1 км, 5 км и т.д.), вес пиксела должен рассчитываться исходя от его попадания в какую-либо зону.

Может есть идеи другого подхода?
так у вас зоны? т.е для всех пикселов в зоне 1 км вес будет одинаков или в формуле важно индивидуальное расстояние от пиксела до границы?
просто зоны сильно все упрощают
да, пока в каждой конкретной зоне вес одинаков, но количество зон варьируется в зависимости от размера города
ну тогда бы я пошла таким путем:
- построила зоны командой multiple ring buffer
- удалила ненужные по весу города
- конвертнула в грид
- и далее через spatial analyst tool\math рассчитывала

Re: Найти расстояние от пиксела до границы полигона

Добавлено: 13 сен 2013, 15:19
Voin
novia писал(а):значит что-то вы не так настроили... давайте, рассказывайте по пунктам
какая СК у данных векторных и растровых?
какие параметры указали для инструмента?
СК одинакова, Deutsches_Hauptdreiecksnetz_Transverse_Mercator. Данные дасположены в персональной базе геоданных PGDB.

полигон населенных пунктов, в каждом НП предполагается данное "зонирование". Регионы извлечены путем векторизации растра, это необходимо так как каждый регион тоже имеет свой вес в зависимости от размера и расположения.
scr1.png
scr1.png (46.98 КБ) 5013 просмотров
То что я получил на выходе Euclidean Distance
scr2.png
scr2.png (187.15 КБ) 5013 просмотров

Re: Найти расстояние от пиксела до границы полигона

Добавлено: 13 сен 2013, 15:24
Voin
Как видно, Euclidean Distance считает расстояние до города, а мне нужно внутри каждого конкретного до его границы

Re: Найти расстояние от пиксела до границы полигона

Добавлено: 13 сен 2013, 15:34
Voin
грубо говоря деление должно быть таким
zones.png
zones.png (12.53 КБ) 5008 просмотров
Maka писал(а): ну тогда бы я пошла таким путем:
- построила зоны командой multiple ring buffer
- удалила ненужные по весу города
- конвертнула в грид
- и далее через spatial analyst tool\math рассчитывала
наверное в этом направлении и пойду. Сначала классифицировать и сделать выборку по площади/кол-ву зон, потом multiple ring buffer

Re: Найти расстояние от пиксела до границы полигона

Добавлено: 13 сен 2013, 17:48
gamm
Voin писал(а):так и сделал... но расчеты идут часами... и это только на одну область/регион, а в будущем нужно считать на всю Европу. Думал может есть вариант работы напрямую с растром.
конечно есть, причем тривиальный, и именно для этого случая. Просто переносите ваши контура на растр, и делаете дистанционное преобразование (кнопку найдете, оно там должно быть, в ArcView 3.1 даже было). После чего получаете растр с ответом. Начальное значение на контуре положите половине размера ячейки, не сильно ошибетесь.

Re: Найти расстояние от пиксела до границы полигона

Добавлено: 13 сен 2013, 18:42
Maka
а дистанционное преобразование это arctoolbox\spatial analyst tools \distаnce \euclidean distance?

Re: Найти расстояние от пиксела до границы полигона

Добавлено: 14 сен 2013, 06:39
gamm
Maka писал(а):а дистанционное преобразование это arctoolbox\spatial analyst tools \distаnce \euclidean distance?
по картинке похоже, нужно доки читать. Если ячейки слишком крупные, и мелкие контура обрабатываются неверно, то растр можно сгустить в 3 раза, а потом взять значения в центрах (для надежности можно еще забить NA вне контуров).