Страница 1 из 2
Преобразование линий в точки
Добавлено: 15 май 2012, 12:15
KartaBY
Добрый день.
Подскажите как можно преобразовать линию в точку?
Существующий инструмент "извлечение узлов" создает точки на концах линии, а мне надо создать одну точку на центре линии.
Спасибо.
Re: Преобразование линий в точки
Добавлено: 15 май 2012, 13:05
Александр Мурый
В "чистом" QGIS, боюсь, никак. Можно с помощью GRASS Tools (модуль
v.to.points).
Re: Преобразование линий в точки
Добавлено: 15 май 2012, 14:34
KartaBY
Н-да. Не хочет ГРАСС импортировать шейпы хоть убей.
Но это уже совсем другая история (ветка форума).
Re: Преобразование линий в точки
Добавлено: 15 май 2012, 14:38
rhot
спрашивайте, поможем =)
Re: Преобразование линий в точки
Добавлено: 15 май 2012, 14:59
KartaBY
Да собственно и спрашивать пока нечего.
Выдает ошибки, но прочитать их нет возможности, одни кракозябры.
Надо с ними бороться, так что курю пока форум.
Re: Преобразование линий в точки
Добавлено: 15 май 2012, 15:03
KartaBY
Вот описана моя проблема.
Решения пока нет. (
viewtopic.php?f=29&t=8210
Re: Преобразование линий в точки
Добавлено: 15 май 2012, 16:54
Voltron
У вас все линии содержат только по 2 узла и прямые? В таком случае задача решается с использованием школьного курса геометрии.
Если же у вас ломанные, то не совсем понятно как вы собрались находить «центр линии».
Re: Преобразование линий в точки
Добавлено: 15 май 2012, 19:52
Александр Мурый
Voltron писал(а):
Если же у вас ломанные, то не совсем понятно как вы собрались находить «центр линии».
Поделить длину линии пополам и отступить это расстояние вдоль линии от одной из конечных точек?
Re: Преобразование линий в точки
Добавлено: 15 май 2012, 20:22
Voltron
amuriy писал(а):Поделить длину линии пополам и отступить это расстояние вдоль линии от одной из конечных точек?
Тогда уж скорее центр bbox'а брать, т.к длина линии может превышать расстояние между крайними точками.
Re: Преобразование линий в точки
Добавлено: 16 май 2012, 10:26
KartaBY
Voltron писал(а):У вас все линии содержат только по 2 узла и прямые?
да
ps. Школьный курс геометрии не говорит как этот процесс сделать в QGIS, а в ручную 150000 линий я буду до второго пришествия преобразовывать.
Re: Преобразование линий в точки
Добавлено: 16 май 2012, 20:18
Александр Мурый
KartaBY, если возможно выложить куда-то данные, могу помочь с точками (в GRASS). В QGIS без спец. программирования вы это не сделаете, как я понял.
Re: Преобразование линий в точки
Добавлено: 16 май 2012, 20:32
Voltron
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
Re: Преобразование линий в точки
Добавлено: 17 май 2012, 09:43
KartaBY
amuriy писал(а):KartaBY, если возможно выложить куда-то данные, могу помочь с точками (в GRASS). В QGIS без спец. программирования вы это не сделаете, как я понял.
Вот для примера один из кусков.
Мне требуется преобразовать каждый линейный объект в отдельную точку ( в середине линии) с сохранением всех атрибутов.
Re: Преобразование линий в точки
Добавлено: 17 май 2012, 10:12
KartaBY
Voltron писал(а):
Две минуты, включая набор и проверку на тестовом слое
Спасибо что уделили время для моей проблемы,
но ... я не смог получить правильный точечный слой с помощью вашего кода.
Выше приложен пример моих шейпов, может дело в нем?
ps. Увы, в программировании я не силен.

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