Преобразование линий в точки

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
KartaBY
Активный участник
Сообщения: 101
Зарегистрирован: 16 июл 2011, 09:15
Репутация: 6

Преобразование линий в точки

Сообщение KartaBY » 15 май 2012, 12:15

Добрый день.
Подскажите как можно преобразовать линию в точку?
Существующий инструмент "извлечение узлов" создает точки на концах линии, а мне надо создать одну точку на центре линии.
:oops:
Спасибо.
Последний раз редактировалось KartaBY 23 май 2012, 08:40, всего редактировалось 1 раз.

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 792
Ваше звание: званий не имею
Откуда: Москва

Re: Преобразование линий в точки

Сообщение Александр Мурый » 15 май 2012, 13:05

В "чистом" QGIS, боюсь, никак. Можно с помощью GRASS Tools (модуль v.to.points).
Редактор материалов, модератор форума

KartaBY
Активный участник
Сообщения: 101
Зарегистрирован: 16 июл 2011, 09:15
Репутация: 6

Re: Преобразование линий в точки

Сообщение KartaBY » 15 май 2012, 14:34

Н-да. Не хочет ГРАСС импортировать шейпы хоть убей.
Но это уже совсем другая история (ветка форума).

Аватара пользователя
rhot
Гуру
Сообщения: 1727
Зарегистрирован: 25 янв 2011, 17:50
Репутация: 194
Ваше звание: доктор
Откуда: Архангельск

Re: Преобразование линий в точки

Сообщение rhot » 15 май 2012, 14:38

спрашивайте, поможем =)
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________

KartaBY
Активный участник
Сообщения: 101
Зарегистрирован: 16 июл 2011, 09:15
Репутация: 6

Re: Преобразование линий в точки

Сообщение KartaBY » 15 май 2012, 14:59

Да собственно и спрашивать пока нечего.
Выдает ошибки, но прочитать их нет возможности, одни кракозябры.
Надо с ними бороться, так что курю пока форум.

KartaBY
Активный участник
Сообщения: 101
Зарегистрирован: 16 июл 2011, 09:15
Репутация: 6

Re: Преобразование линий в точки

Сообщение KartaBY » 15 май 2012, 15:03

Вот описана моя проблема.
Решения пока нет. (
viewtopic.php?f=29&t=8210

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: Преобразование линий в точки

Сообщение Voltron » 15 май 2012, 16:54

У вас все линии содержат только по 2 узла и прямые? В таком случае задача решается с использованием школьного курса геометрии.

Если же у вас ломанные, то не совсем понятно как вы собрались находить «центр линии».

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 792
Ваше звание: званий не имею
Откуда: Москва

Re: Преобразование линий в точки

Сообщение Александр Мурый » 15 май 2012, 19:52

Voltron писал(а): Если же у вас ломанные, то не совсем понятно как вы собрались находить «центр линии».
Поделить длину линии пополам и отступить это расстояние вдоль линии от одной из конечных точек?
Редактор материалов, модератор форума

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: Преобразование линий в точки

Сообщение Voltron » 15 май 2012, 20:22

amuriy писал(а):Поделить длину линии пополам и отступить это расстояние вдоль линии от одной из конечных точек?
Тогда уж скорее центр bbox'а брать, т.к длина линии может превышать расстояние между крайними точками.

KartaBY
Активный участник
Сообщения: 101
Зарегистрирован: 16 июл 2011, 09:15
Репутация: 6

Re: Преобразование линий в точки

Сообщение KartaBY » 16 май 2012, 10:26

Voltron писал(а):У вас все линии содержат только по 2 узла и прямые?
да

ps. Школьный курс геометрии не говорит как этот процесс сделать в QGIS, а в ручную 150000 линий я буду до второго пришествия преобразовывать.

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 792
Ваше звание: званий не имею
Откуда: Москва

Re: Преобразование линий в точки

Сообщение Александр Мурый » 16 май 2012, 20:18

KartaBY, если возможно выложить куда-то данные, могу помочь с точками (в GRASS). В QGIS без спец. программирования вы это не сделаете, как я понял.
Редактор материалов, модератор форума

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: Преобразование линий в точки

Сообщение Voltron » 16 май 2012, 20:32

KartaBY писал(а):ps. Школьный курс геометрии не говорит как этот процесс сделать в QGIS
Школьный курс говорит как найти середину отрезка. Внезапно.
KartaBY писал(а):а в ручную 150000 линий я буду до второго пришествия преобразовывать.
Две минуты, включая набор и проверку на тестовом слое

Код: Выделить всё

from qgis.core import *
layer = qgis.utils.iface.mapCanvas().currentLayer()
vl = QgsVectorLayer("Point", "temporary_points", "memory")
pr = vl.dataProvider()
layer.select()
ft = QgsFeature()
while layer.nextFeature(ft):
  tmp = ft.geometry().asPolyline()
  x = (tmp[0].x() + tmp[1].x())/2.0
  y = (tmp[0].y() + tmp[1].y())/2.0
  f = QgsFeature()
  f.setGeometry(QgsGeometry.fromPoint(QgsPoint(x, y)))
  pr.addFeatures([f])

QgsMapLayerRegistry.instance().addMapLayer( vl )
Надеюсь, вы знаете что такое Консоль Python в QGIS

KartaBY
Активный участник
Сообщения: 101
Зарегистрирован: 16 июл 2011, 09:15
Репутация: 6

Re: Преобразование линий в точки

Сообщение KartaBY » 17 май 2012, 09:43

amuriy писал(а):KartaBY, если возможно выложить куда-то данные, могу помочь с точками (в GRASS). В QGIS без спец. программирования вы это не сделаете, как я понял.
Вот для примера один из кусков.
Мне требуется преобразовать каждый линейный объект в отдельную точку ( в середине линии) с сохранением всех атрибутов.
Вложения
N-34-131.ZIP
(20.28 КБ) 352 скачивания

KartaBY
Активный участник
Сообщения: 101
Зарегистрирован: 16 июл 2011, 09:15
Репутация: 6

Re: Преобразование линий в точки

Сообщение KartaBY » 17 май 2012, 10:12

Voltron писал(а): Две минуты, включая набор и проверку на тестовом слое
Спасибо что уделили время для моей проблемы,
но ... я не смог получить правильный точечный слой с помощью вашего кода. :(
Выше приложен пример моих шейпов, может дело в нем?
ps. Увы, в программировании я не силен. :oops:

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: Преобразование линий в точки

Сообщение Voltron » 17 май 2012, 15:38

KartaBY писал(а):Выше приложен пример моих шейпов, может дело в нем?
Да, проблема в исходных данных. У вас в слое часть объектов имеет тип LineString, а часть — MultiLinestring. Прогоните слой через Multipart to singleparts и будем вам счастье

Ответить

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

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

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