MapInfo (MapBasic): Как получить новые полигоны из наложений

MapInfo, MapBasic
Preev
Новоприбывший
Сообщения: 9
Зарегистрирован: 19 июн 2016, 17:50
Репутация: 0

MapInfo (MapBasic): Как получить новые полигоны из наложений

Сообщение Preev » 19 июн 2016, 18:20

Прошу помочь.
Имеются полигоны, которые имеют наложения. Как получить (добавить в таблицу) из наложений новые объекты, чтобы значения атрибутов также суммировались (на картинке param1, param2, param3) ?
Заранее Спасибо.
Изображение

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

Re: MapInfo (MapBasic): Как получить новые полигоны из налож

Сообщение trir » 19 июн 2016, 18:55

на SQL это решается гораздо проще...

Preev
Новоприбывший
Сообщения: 9
Зарегистрирован: 19 июн 2016, 17:50
Репутация: 0

Re: MapInfo (MapBasic): Как получить новые полигоны из налож

Сообщение Preev » 19 июн 2016, 19:09

trir писал(а):на SQL это решается гораздо проще...
Настолько все усложняю? В MapInfo это сделать возможно запросом?
Все объекты в одном слое (таблице).

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

Re: MapInfo (MapBasic): Как получить новые полигоны из налож

Сообщение trir » 19 июн 2016, 19:12

http://gis-lab.info/qa/ogr2ogr-examples ... B5_OGR_SQL
http://www.gdal.org/ogr_sql_sqlite.html

При манипуляции с данными SQL выигрывает перед языками программирования, потому что не надо думать как сделать, нужно лишь написать - что нужно сделать
В MapInfo есть свой диалект SQL'я, но он работает только в MapInfo. Поэтому проще импортировать данные в БД и использовать стандартный SQL, тем более что это будет просто быстрее

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

Re: MapInfo (MapBasic): Как получить новые полигоны из налож

Сообщение Boris » 19 июн 2016, 19:25

2 [trir]
В ссылках не нашел способ создания новых полигонов на основе объектов из одной таблицы.
2 [Preev]
Сделать одним запросом нельзя по определению - MapInfo не умеет строить запросы на пересечение (любое хоть атрибутивное, хоть пространственное), на ОДНОЙ таблице. Так что как минимум придется сохранять копию таблицы.
Но для начала на рисунке расставьте буквы или цифры внутри тех полигонов, которые вы предполагаете получить в результате пересечения: полигоны дают результат пересечения для ВСЕХ полигонов или все же по ДВА?
Картинка (мне) совершенно не понятно. Видно, что есть полигоны в нахлест, но к чему относятся номера и атрибуты - не ясно.

Preev
Новоприбывший
Сообщения: 9
Зарегистрирован: 19 июн 2016, 17:50
Репутация: 0

Re: MapInfo (MapBasic): Как получить новые полигоны из налож

Сообщение Preev » 19 июн 2016, 19:31

trir писал(а):При манипуляции с данными SQL выигрывает перед языками программирования
ну иногда приходится в запросах циклы использовать - тогда без небольшого кода не обойтись.
Вернусь к своему вопросу: мне это надо решать средствами MapInfo (или MapBasic).

Preev
Новоприбывший
Сообщения: 9
Зарегистрирован: 19 июн 2016, 17:50
Репутация: 0

Re: MapInfo (MapBasic): Как получить новые полигоны из налож

Сообщение Preev » 19 июн 2016, 19:51

Boris писал(а):2 [trir]
В ссылках не нашел способ создания новых полигонов на основе объектов из одной таблицы.
2 [Preev]
Сделать одним запросом нельзя по определению - MapInfo не умеет строить запросы на пересечение (любое хоть атрибутивное, хоть пространственное), на ОДНОЙ таблице. Так что как минимум придется сохранять копию таблицы.
Но для начала на рисунке расставьте буквы или цифры внутри тех полигонов, которые вы предполагаете получить в результате пересечения: полигоны дают результат пересечения для ВСЕХ полигонов или все же по ДВА?
Картинка (мне) совершенно не понятно. Видно, что есть полигоны в нахлест, но к чему относятся номера и атрибуты - не ясно.
Изображение
4-й полигон - геометрически наложение 1 и 2 за вычетом 5-го, атрибут param1(4)=param1(1)+param1(2)
5-й полигон - геометрически наложение 1 и 2 и 3-го, атрибут param1(5)=param1(1)+param1(2)+param1(3)

Не могу найти как это вообще можно сделать.
Смог из разных слоев все свести в один (Mapbasic) - подумал, что так проще будет, но пока не знаю куда дальше двигаться.
Как я понял, сводить все слои в один смысла не имело?

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

Re: MapInfo (MapBasic): Как получить новые полигоны из налож

Сообщение trir » 19 июн 2016, 20:13

выложи wkt полигонов

Preev
Новоприбывший
Сообщения: 9
Зарегистрирован: 19 июн 2016, 17:50
Репутация: 0

Re: MapInfo (MapBasic): Как получить новые полигоны из налож

Сообщение Preev » 19 июн 2016, 20:28

trir писал(а):выложи wkt полигонов
На картинке - условная схема.
В реальном проекте - несколько десятков слоев с несколькими десятками полигонов в каждом.
Я пытаюсь определиться с подходом, а не получить готовое решение.
Сначала на трех условных полигонах - а дальше уже будет гораздо проще :)

thegeo
Активный участник
Сообщения: 160
Зарегистрирован: 17 янв 2012, 18:51
Репутация: 74

Re: MapInfo (MapBasic): Как получить новые полигоны из налож

Сообщение thegeo » 19 июн 2016, 20:48

Как это можно выполнить средствами MapInfo (в моем понимании задачи).
Выделяем объекты 1, 2, 3. Выполняем Правка/Копировать (Вставить). Объединяем полученную копию в один объект (Объекты/Объединить). При объединении указать суммирование значений в соответствующих полях (Objects Combine Data id2=sum(id2),at1=sum(at1),at2=sum(at2),at3=sum(at3)). Выделяем этот объект и делаем его редактируемым (Объекты/Выбрать изменяемый объект). Выделяем объекты 1, 2, 3 и выполняем Объекты/Разрезать. Для полей указываем "пропорционально площади" (Objects Split Into Target Data id2=id2,at1=proportion(at1),at2=proportion(at2),at3=proportion(at3)).
При желании все это можно оформить в виде отдельной процедуры.
Вложения
miHG615.png
miHG615.png (14.09 КБ) 9528 просмотров

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

Re: MapInfo (MapBasic): Как получить новые полигоны из налож

Сообщение trir » 19 июн 2016, 21:10

сначала STIntersection, а потом STDifference
тестовый набор данных не помешал бы...

Preev
Новоприбывший
Сообщения: 9
Зарегистрирован: 19 июн 2016, 17:50
Репутация: 0

Re: MapInfo (MapBasic): Как получить новые полигоны из налож

Сообщение Preev » 19 июн 2016, 21:30

thegeo писал(а):Как это можно выполнить средствами MapInfo (в моем понимании задачи).
Выделяем объекты 1, 2, 3. Выполняем Правка/Копировать (Вставить). Объединяем полученную копию в один объект (Объекты/Объединить). При объединении указать суммирование значений в соответствующих полях (Objects Combine Data id2=sum(id2),at1=sum(at1),at2=sum(at2),at3=sum(at3)). Выделяем этот объект и делаем его редактируемым (Объекты/Выбрать изменяемый объект). Выделяем объекты 1, 2, 3 и выполняем Объекты/Разрезать. Для полей указываем "пропорционально площади" (Objects Split Into Target Data id2=id2,at1=proportion(at1),at2=proportion(at2),at3=proportion(at3)).
При желании все это можно оформить в виде отдельной процедуры.
Спасибо, но, к сожалению, это не работает. "Пропорционально площади" здесь совсем не годится. Если два полигона накладываются - то param наложения должен быть суммой param,ов соответствующих полигонов. Если три - то трех.

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

Re: MapInfo (MapBasic): Как получить новые полигоны из налож

Сообщение trir » 19 июн 2016, 21:45

самый простой способ объяснить задачу - написать SQL-запрос ;=)

Preev
Новоприбывший
Сообщения: 9
Зарегистрирован: 19 июн 2016, 17:50
Репутация: 0

Re: MapInfo (MapBasic): Как получить новые полигоны из налож

Сообщение Preev » 19 июн 2016, 21:48

trir писал(а):самый простой способ объяснить задачу - написать SQL-запрос ;=)
Но, к сожалению, синтаксис будет не MapInfoвский.

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

Re: MapInfo (MapBasic): Как получить новые полигоны из налож

Сообщение trir » 19 июн 2016, 21:49

забудьте уже про MapInfo, это прошлый век

Ответить

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

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

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