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

Точки из вершин полигонов с сохранением атрибутики

Добавлено: 06 июл 2016, 21:19
Dartix
Есть слой (a1) с полигонами (с заполненной атрибутикой полей - col1, col2, col3).

Необходимо создать слой (a2) с точечными символами (вершинами полигонов слоя a1), чтобы атрибутика полей полей col1, col2, col3 сохранилась, а слой col4 содержал порядковый номер вершины полигона (для каждого полигона начинался с 1).
Как это реализовать в среде MapBasic?

ps если есть утилиты, способные выполнить данные требования, готов воспользоваться ими.

Re: Точки из вершин полигонов с сохранением атрибутики

Добавлено: 07 июл 2016, 21:42
ginpetr
Сам не пробовал пока, но что если полигон преевратить в полилинию и разбить ее на сегменты операцией Mapcad (интересно, тут что с атрибутами будет), потом обновить таблицу колонку obj точками-началами сегментов?

Re: Точки из вершин полигонов с сохранением атрибутики

Добавлено: 08 июл 2016, 07:20
Dartix
В таком случае не будет нумерации точек.
Да и полигоны могут быть с дырками

Re: Точки из вершин полигонов с сохранением атрибутики

Добавлено: 09 июл 2016, 20:23
Boris
Утилита такая точно уже есть - ищите на сайтах с подборкой программ на MB.
Сама утилита должна занимать строчек 10 от силы, поскольку перебор вершин - стандартная функция MB.
На мой вкус, задача решается в любом языке программирования, быстрее и проще, если вести работу не с TAB, а c MIF, где все вершины явно перечислены в текстовом файле.

Re: Точки из вершин полигонов с сохранением атрибутики

Добавлено: 09 июл 2016, 21:19
Dartix
Boris писал(а):Утилита такая точно уже есть - ищите на сайтах с подборкой программ на MB.
Сама утилита должна занимать строчек 10 от силы, поскольку перебор вершин - стандартная функция MB.
На мой вкус, задача решается в любом языке программирования, быстрее и проще, если вести работу не с TAB, а c MIF, где все вершины явно перечислены в текстовом файле.
Я так понимаю вы озвучиваете позицию, что можно эту задачу решить на любом ином языке программирования.
При этом файлы mid\mif будут использоваться как текстовые. Даже не совсем пойму как вы уложитесь хотя бы в 10 строк кода (обрабатывая, на сколько я понял, лишь файл mif, для перебора вершин).
Проблема и вся суть задачи сводится не к тому, чтобы не просто вытащит координаты вершин, а к тому, чтобы всем этим объектам(точкам) унаследовать атрибутику исходного участка.

И всё же если для вас это плёвое дело - буду только рад, если вы мне поможете.

Re: Точки из вершин полигонов с сохранением атрибутики

Добавлено: 09 июл 2016, 22:00
trir
SQL

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

declare @i int;
set @i = 1;
declare @poly geometry;
declare @epoly geometry;
declare @col1 nvarchar(max);
declare @col2 nvarchar(max);
declare @col3 nvarchar(max);
DECLARE @CURSOR CURSOR
SET @CURSOR  = CURSOR SCROLL
FOR
SELECT geom, col1, col2, col3 FROM [test1].[dbo].[TestGeom1] 
OPEN @CURSOR
FETCH NEXT FROM @CURSOR INTO @poly, @col1, @col2, @col3
set  @epoly = @poly.STExteriorRing();
WHILE @@FETCH_STATUS = 0
BEGIN
	while @i< @poly.STNumPoints()
	BEGIN 
		insert into [test1].[dbo].[TestGeom2](point1, col1, col2, col3, col4) VALUES (@poly.STPointN(@i), @col1, @col2, @col3, @i);
		set @i = @i +1;
		CONTINUE 
	end
FETCH NEXT FROM @CURSOR INTO @poly, @col1, @col2, @col3
END
CLOSE @CURSOR