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

MapInfo, MapBasic
Ответить
Dartix
Участник
Сообщения: 61
Зарегистрирован: 05 апр 2014, 17:13
Репутация: 2

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

Сообщение Dartix » 06 июл 2016, 21:19

Есть слой (a1) с полигонами (с заполненной атрибутикой полей - col1, col2, col3).

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

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

Аватара пользователя
ginpetr
Завсегдатай
Сообщения: 276
Зарегистрирован: 21 июн 2011, 12:07
Репутация: 108
Откуда: Орск
Контактная информация:

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

Сообщение ginpetr » 07 июл 2016, 21:42

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

Dartix
Участник
Сообщения: 61
Зарегистрирован: 05 апр 2014, 17:13
Репутация: 2

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

Сообщение Dartix » 08 июл 2016, 07:20

В таком случае не будет нумерации точек.
Да и полигоны могут быть с дырками

Boris
Гуру
Сообщения: 4115
Зарегистрирован: 10 апр 2006, 22:34
Статьи: 3
Проекты: 1
Репутация: 406
Откуда: Париж

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

Сообщение Boris » 09 июл 2016, 20:23

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

Dartix
Участник
Сообщения: 61
Зарегистрирован: 05 апр 2014, 17:13
Репутация: 2

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

Сообщение Dartix » 09 июл 2016, 21:19

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

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

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

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

Сообщение trir » 09 июл 2016, 22:00

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

Ответить

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

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

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