Точки из вершин полигонов с сохранением атрибутики
-
- Участник
- Сообщения: 78
- Зарегистрирован: 05 апр 2014, 17:13
- Репутация: 5
Точки из вершин полигонов с сохранением атрибутики
Есть слой (a1) с полигонами (с заполненной атрибутикой полей - col1, col2, col3).
Необходимо создать слой (a2) с точечными символами (вершинами полигонов слоя a1), чтобы атрибутика полей полей col1, col2, col3 сохранилась, а слой col4 содержал порядковый номер вершины полигона (для каждого полигона начинался с 1).
Как это реализовать в среде MapBasic?
ps если есть утилиты, способные выполнить данные требования, готов воспользоваться ими.
Необходимо создать слой (a2) с точечными символами (вершинами полигонов слоя a1), чтобы атрибутика полей полей col1, col2, col3 сохранилась, а слой col4 содержал порядковый номер вершины полигона (для каждого полигона начинался с 1).
Как это реализовать в среде MapBasic?
ps если есть утилиты, способные выполнить данные требования, готов воспользоваться ими.
- ginpetr
- Завсегдатай
- Сообщения: 376
- Зарегистрирован: 21 июн 2011, 12:07
- Репутация: 140
- Откуда: Орск
- Контактная информация:
Re: Точки из вершин полигонов с сохранением атрибутики
Сам не пробовал пока, но что если полигон преевратить в полилинию и разбить ее на сегменты операцией Mapcad (интересно, тут что с атрибутами будет), потом обновить таблицу колонку obj точками-началами сегментов?
-
- Участник
- Сообщения: 78
- Зарегистрирован: 05 апр 2014, 17:13
- Репутация: 5
Re: Точки из вершин полигонов с сохранением атрибутики
В таком случае не будет нумерации точек.
Да и полигоны могут быть с дырками
Да и полигоны могут быть с дырками
-
- Гуру
- Сообщения: 4205
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: 433
- Откуда: Париж
Re: Точки из вершин полигонов с сохранением атрибутики
Утилита такая точно уже есть - ищите на сайтах с подборкой программ на MB.
Сама утилита должна занимать строчек 10 от силы, поскольку перебор вершин - стандартная функция MB.
На мой вкус, задача решается в любом языке программирования, быстрее и проще, если вести работу не с TAB, а c MIF, где все вершины явно перечислены в текстовом файле.
Сама утилита должна занимать строчек 10 от силы, поскольку перебор вершин - стандартная функция MB.
На мой вкус, задача решается в любом языке программирования, быстрее и проще, если вести работу не с TAB, а c MIF, где все вершины явно перечислены в текстовом файле.
-
- Участник
- Сообщения: 78
- Зарегистрирован: 05 апр 2014, 17:13
- Репутация: 5
Re: Точки из вершин полигонов с сохранением атрибутики
Я так понимаю вы озвучиваете позицию, что можно эту задачу решить на любом ином языке программирования.Boris писал(а):Утилита такая точно уже есть - ищите на сайтах с подборкой программ на MB.
Сама утилита должна занимать строчек 10 от силы, поскольку перебор вершин - стандартная функция MB.
На мой вкус, задача решается в любом языке программирования, быстрее и проще, если вести работу не с TAB, а c MIF, где все вершины явно перечислены в текстовом файле.
При этом файлы mid\mif будут использоваться как текстовые. Даже не совсем пойму как вы уложитесь хотя бы в 10 строк кода (обрабатывая, на сколько я понял, лишь файл mif, для перебора вершин).
Проблема и вся суть задачи сводится не к тому, чтобы не просто вытащит координаты вершин, а к тому, чтобы всем этим объектам(точкам) унаследовать атрибутику исходного участка.
И всё же если для вас это плёвое дело - буду только рад, если вы мне поможете.
-
- Гуру
- Сообщения: 5287
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Точки из вершин полигонов с сохранением атрибутики
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
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 8 гостей