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

Подскажите запрос точка/линия

Добавлено: 11 май 2011, 14:26
sanyasi
Добрый день!

Подскажите запрос postgresql+postgis.

Есть два слоя - точки и линии.

Некоторые узлы линий соприкасаются с точками слоя точек.

Необходимо при изменении положения точки (на слое точек) изменить координаты только того узла линии который с ней соприкасался, чтобы они снова совпадали, причем с точкой могут соприкасаться несколько линий, причем, как своим началом, концом, и промежуточной точкой.


Как понимаю нужен триггер и соответствующий запрос.

Re: Подскажите запрос точка/линия

Добавлено: 12 май 2011, 13:21
sdikiy

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

UPDATE table_line
	SET line_geom=ST_SetPoint(line_geom, g.point_num, NEW.point_geom)
	FROM
		(SELECT 
			t.id, (ST_DumpPoints(t.line_geom)).path[1]-1 as point_num,
			ST_Distance(OLD.point_geom, (ST_DumpPoints(t.line_geom)).geom) as d
			FROM table_line t
		) AS g
WHERE table_line.id = g.id and g.d < 0.01;
это только идея, в этом куске два глобальных недочета... будет приемлемо работать только на очень маленькой базе (во внутренний запрос нужно добавить WHERE), внешний запрос будет менять только одну точку в геометрии, а если ему подсунуть MULTILINESTRING или GEOMETRYCOLLECTION... не знаю что получится :-)