Определение середины полигона
-
old_wolf_09
- Активный участник
- Сообщения: 105
- Зарегистрирован: 18 мар 2013, 22:59
- Репутация: 1
- Откуда: Казахстан
Определение середины полигона
Есть слой улиц на карте отрисованный как линия. Под этим слоем лежит другой слой (полигональный) обозначающий буферную зону этой самой улицы. Линия должна быть ровно по середине. Как произвести проверку расположения этой линии?
-
Elf
- Участник
- Сообщения: 51
- Зарегистрирован: 01 июл 2015, 17:46
- Репутация: 37
- Откуда: Черкассы
- Контактная информация:
Re: Определение середины полигона
Можно извлечь узлы из линейного слоя, затем из полигонального. С помощью инструмента Вектор/Анализ/Матрица расстояний найти расстояние от узлов линии до двух ближайших узлов полигона.
-
old_wolf_09
- Активный участник
- Сообщения: 105
- Зарегистрирован: 18 мар 2013, 22:59
- Репутация: 1
- Откуда: Казахстан
Re: Определение середины полигона
Нет такой метод не совсем подходит. Скорее что-нибудь вроде скрипта или какими нибудь встроенными инструментами.Elf писал(а):Можно извлечь узлы из линейного слоя, затем из полигонального. С помощью инструмента Вектор/Анализ/Матрица расстояний найти расстояние от узлов линии до двух ближайших узлов полигона.
-
Andrey Zhukov
- Гуру
- Сообщения: 838
- Зарегистрирован: 10 дек 2009, 23:24
- Репутация: 169
- Ваше звание: старик-гисовик
- Откуда: Москва
- Контактная информация:
Re: Определение середины полигона
Отрицательный буфер.
-
old_wolf_09
- Активный участник
- Сообщения: 105
- Зарегистрирован: 18 мар 2013, 22:59
- Репутация: 1
- Откуда: Казахстан
Re: Определение середины полигона
Отрицательный буфер строится от границ полигона внутрь. То есть если ширина одного полигона 10 метров а другого 1 метр то получится что анализа для большого полигона не будет. Как быть?Andrey Zhukov писал(а):Отрицательный буфер.
-
Andrey Zhukov
- Гуру
- Сообщения: 838
- Зарегистрирован: 10 дек 2009, 23:24
- Репутация: 169
- Ваше звание: старик-гисовик
- Откуда: Москва
- Контактная информация:
Re: Определение середины полигона
Значит, надо учитывать исходный буфер. Если такой информации нет, то печалька получается.
Но вопрос не особо новый. Можете попробовать решения отсюда: http://gis.stackexchange.com/questions/ ... ns-in-qgis
Но вопрос не особо новый. Можете попробовать решения отсюда: http://gis.stackexchange.com/questions/ ... ns-in-qgis
-
Александр Мурый
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 792
- Ваше звание: званий не имею
- Откуда: Москва
Re: Определение середины полигона
Если нужна срединная линия полигона, можете попробовать вот эту processing-модель для QGIS. Сделана мной "на коленке" немного для другой задачи. Там специфические параметры, поэтому, если будут вопросы — готов ответить.
P.S. для модели нужна установленная GRASS 7 и её работающие модули в Processing.
P.S. для модели нужна установленная GRASS 7 и её работающие модули в Processing.
Редактор материалов, модератор форума
-
gamm
- Гуру
- Сообщения: 4178
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: -445565593
- Ваше звание: программист
- Откуда: Казань
Re: Определение середины полигона
самое простое и надежное решение, как всегда, на растре:
1) снести линию на растр с размером ячеек, соответствующим требуемой точности
2) делаем дистанционное преобразование от полученного растра (без сопротивления, которое tension или cost в разных программах).
3) снимаем расстояния с растра на линии - границы буфера (вместе с координатами)
4) затаскиваем в стат.пакет (R и т.д.) и смотрим, что у нас с расстоянием (раз это буфер и если он одного размера, то должна получиться константа с точностью до размера ячеек растра; если ширина разная, то нужно сносить линию предполагаемой середины, и искать ближайших соседей - это должны быть точки по разные стороны).
5) про кнопки не знаю. И все, кроме дистанционного преобразования, можно сделать в R. Дистанционное преобразование тоже можно, если вызвать SAGA (может, и еще где есть - искать что-то типа cost surface, ditsance transform, cumulative cost), или GRASS (r.cost).
1) снести линию на растр с размером ячеек, соответствующим требуемой точности
2) делаем дистанционное преобразование от полученного растра (без сопротивления, которое tension или cost в разных программах).
3) снимаем расстояния с растра на линии - границы буфера (вместе с координатами)
4) затаскиваем в стат.пакет (R и т.д.) и смотрим, что у нас с расстоянием (раз это буфер и если он одного размера, то должна получиться константа с точностью до размера ячеек растра; если ширина разная, то нужно сносить линию предполагаемой середины, и искать ближайших соседей - это должны быть точки по разные стороны).
5) про кнопки не знаю. И все, кроме дистанционного преобразования, можно сделать в R. Дистанционное преобразование тоже можно, если вызвать SAGA (может, и еще где есть - искать что-то типа cost surface, ditsance transform, cumulative cost), или GRASS (r.cost).
-
old_wolf_09
- Активный участник
- Сообщения: 105
- Зарегистрирован: 18 мар 2013, 22:59
- Репутация: 1
- Откуда: Казахстан
Re: Определение середины полигона
Спасибо за помощь. К сожалению испробовать предложенные методы пока нет возможности но на днях это должно получится. По мере прогресса отпишусь.
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: Определение середины полигона
Есть вариант - построить буфер от линии такой же как тестируемый:
Потом сравнить с оригинальным:
Сделать с записью что-то согласно логике.
Код: Выделить всё
test_buff = line.Buffer(1.0, 3)Код: Выделить всё
if original_buff.Equal(test_buff):Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей