Точки вдоль линии с неравномерным шагом

Ответить
Svility
Интересующийся
Сообщения: 20
Зарегистрирован: 24 окт 2017, 19:41
Репутация: 0
Откуда: Краснодар

Точки вдоль линии с неравномерным шагом

Сообщение Svility » 21 июн 2018, 18:51

Задача: Есть линейный объект (путь), и есть таблица со значениями "км пересечения". Необходимо создать точки вдоль линии через заданные в таблице значения.
9DC89DCE-2DD5-49D6-BFFC-A696CE0ACC9C.jpeg
9DC89DCE-2DD5-49D6-BFFC-A696CE0ACC9C.jpeg (306.22 КБ) 138 просмотров
Последний раз редактировалось Svility 04 июл 2018, 20:54, всего редактировалось 3 раза.

trir
Гуру
Сообщения: 3690
Зарегистрирован: 09 апр 2010, 19:30
Статьи: 1
Репутация: 618
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Точки вдоль линии с неравномерным шагом

Сообщение trir » 21 июн 2018, 19:08

ST_Affine - нужные точки имеют координаты x,0 в СК сегмента - нужно лишь получить коэффициенты этой СК

Svility
Интересующийся
Сообщения: 20
Зарегистрирован: 24 окт 2017, 19:41
Репутация: 0
Откуда: Краснодар

Re: Точки вдоль линии с неравномерным шагом

Сообщение Svility » 04 июл 2018, 15:52

Почитал о ST_Affine, но так и не понял как ее применить. Можно пример?

Svility
Интересующийся
Сообщения: 20
Зарегистрирован: 24 окт 2017, 19:41
Репутация: 0
Откуда: Краснодар

Re: Точки вдоль линии с неравномерным шагом

Сообщение Svility » 12 июл 2018, 20:14

РЕШЕНО:

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

import csv
from PyQt4.QtCore import QVariant

#Исходные параметры
layer_name = '014' # Имя линейного слоя в списке слоев
csvfile_path = 'C:/Users/user/Desktop/111.csv' # путь к файлу с данными
EPSG = '32637' #метрическая система координат

#Получаем слой и данные csv-файла
layer = QgsMapLayerRegistry.instance().mapLayersByName(layer_name)[0]
csvfile = open(csvfile_path, 'rb')
reader = csv.reader(csvfile, delimiter=';')
header = reader.next()

#Подгатавливаем выходной слой
mem_layer = QgsVectorLayer("Point?crs=epsg:"+EPSG, 'point', 'memory')
mem_layer.startEditing()
attr = [QgsField(header[0],QVariant.String),QgsField(header[1],QVariant.Double),QgsField(header[2],QVariant.Double)] #Задаем тип данных для каждого столбца csv
prov = mem_layer.dataProvider()
prov.addAttributes(attr)
mem_layer.updateFields()

#Выполняем запрос и заполняем поля из csv-файла
for feat in layer.getFeatures():
	for row in reader:
		new_feat = QgsFeature()
		new_feat.setGeometry(feat.geometry().interpolate(float(row[0])))
		new_feat.setAttributes(attr)
		new_feat.setAttribute(0, float(row[0])) # Заполняем столбец 0
		new_feat.setAttribute(1,row[1]) # Заполняем столбец 1
		new_feat.setAttribute(2,row[2]) # Заполняем столбец 2
		mem_layer.addFeatures([new_feat])

#Сохраняем результат в виртуальный слой
mem_layer.commitChanges()
QgsMapLayerRegistry.instance().addMapLayer(mem_layer)
point from csv.py
(1.68 КБ) 1 скачивание

trir
Гуру
Сообщения: 3690
Зарегистрирован: 09 апр 2010, 19:30
Статьи: 1
Репутация: 618
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Точки вдоль линии с неравномерным шагом

Сообщение trir » 12 июл 2018, 20:23


Ответить

Вернуться в «PostGIS/PostgreSQL»

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

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