MapInfo (MapBasic): Как получить новые полигоны из наложений
-
- Новоприбывший
- Сообщения: 9
- Зарегистрирован: 19 июн 2016, 17:50
- Репутация: 0
MapInfo (MapBasic): Как получить новые полигоны из наложений
Прошу помочь.
Имеются полигоны, которые имеют наложения. Как получить (добавить в таблицу) из наложений новые объекты, чтобы значения атрибутов также суммировались (на картинке param1, param2, param3) ?
Заранее Спасибо.
Имеются полигоны, которые имеют наложения. Как получить (добавить в таблицу) из наложений новые объекты, чтобы значения атрибутов также суммировались (на картинке param1, param2, param3) ?
Заранее Спасибо.
-
- Гуру
- Сообщения: 5292
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: MapInfo (MapBasic): Как получить новые полигоны из налож
на SQL это решается гораздо проще...
-
- Новоприбывший
- Сообщения: 9
- Зарегистрирован: 19 июн 2016, 17:50
- Репутация: 0
Re: MapInfo (MapBasic): Как получить новые полигоны из налож
Настолько все усложняю? В MapInfo это сделать возможно запросом?trir писал(а):на SQL это решается гораздо проще...
Все объекты в одном слое (таблице).
-
- Гуру
- Сообщения: 5292
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: MapInfo (MapBasic): Как получить новые полигоны из налож
http://gis-lab.info/qa/ogr2ogr-examples ... B5_OGR_SQL
http://www.gdal.org/ogr_sql_sqlite.html
При манипуляции с данными SQL выигрывает перед языками программирования, потому что не надо думать как сделать, нужно лишь написать - что нужно сделать
В MapInfo есть свой диалект SQL'я, но он работает только в MapInfo. Поэтому проще импортировать данные в БД и использовать стандартный SQL, тем более что это будет просто быстрее
http://www.gdal.org/ogr_sql_sqlite.html
При манипуляции с данными SQL выигрывает перед языками программирования, потому что не надо думать как сделать, нужно лишь написать - что нужно сделать
В MapInfo есть свой диалект SQL'я, но он работает только в MapInfo. Поэтому проще импортировать данные в БД и использовать стандартный SQL, тем более что это будет просто быстрее
-
- Гуру
- Сообщения: 4205
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: 433
- Откуда: Париж
Re: MapInfo (MapBasic): Как получить новые полигоны из налож
2 [trir]
В ссылках не нашел способ создания новых полигонов на основе объектов из одной таблицы.
2 [Preev]
Сделать одним запросом нельзя по определению - MapInfo не умеет строить запросы на пересечение (любое хоть атрибутивное, хоть пространственное), на ОДНОЙ таблице. Так что как минимум придется сохранять копию таблицы.
Но для начала на рисунке расставьте буквы или цифры внутри тех полигонов, которые вы предполагаете получить в результате пересечения: полигоны дают результат пересечения для ВСЕХ полигонов или все же по ДВА?
Картинка (мне) совершенно не понятно. Видно, что есть полигоны в нахлест, но к чему относятся номера и атрибуты - не ясно.
В ссылках не нашел способ создания новых полигонов на основе объектов из одной таблицы.
2 [Preev]
Сделать одним запросом нельзя по определению - MapInfo не умеет строить запросы на пересечение (любое хоть атрибутивное, хоть пространственное), на ОДНОЙ таблице. Так что как минимум придется сохранять копию таблицы.
Но для начала на рисунке расставьте буквы или цифры внутри тех полигонов, которые вы предполагаете получить в результате пересечения: полигоны дают результат пересечения для ВСЕХ полигонов или все же по ДВА?
Картинка (мне) совершенно не понятно. Видно, что есть полигоны в нахлест, но к чему относятся номера и атрибуты - не ясно.
-
- Новоприбывший
- Сообщения: 9
- Зарегистрирован: 19 июн 2016, 17:50
- Репутация: 0
Re: MapInfo (MapBasic): Как получить новые полигоны из налож
ну иногда приходится в запросах циклы использовать - тогда без небольшого кода не обойтись.trir писал(а):При манипуляции с данными SQL выигрывает перед языками программирования
Вернусь к своему вопросу: мне это надо решать средствами MapInfo (или MapBasic).
-
- Новоприбывший
- Сообщения: 9
- Зарегистрирован: 19 июн 2016, 17:50
- Репутация: 0
Re: MapInfo (MapBasic): Как получить новые полигоны из налож
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) - подумал, что так проще будет, но пока не знаю куда дальше двигаться.
Как я понял, сводить все слои в один смысла не имело?
-
- Гуру
- Сообщения: 5292
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: MapInfo (MapBasic): Как получить новые полигоны из налож
выложи wkt полигонов
-
- Новоприбывший
- Сообщения: 9
- Зарегистрирован: 19 июн 2016, 17:50
- Репутация: 0
Re: MapInfo (MapBasic): Как получить новые полигоны из налож
На картинке - условная схема.trir писал(а):выложи wkt полигонов
В реальном проекте - несколько десятков слоев с несколькими десятками полигонов в каждом.
Я пытаюсь определиться с подходом, а не получить готовое решение.
Сначала на трех условных полигонах - а дальше уже будет гораздо проще
-
- Активный участник
- Сообщения: 160
- Зарегистрирован: 17 янв 2012, 18:51
- Репутация: 74
Re: MapInfo (MapBasic): Как получить новые полигоны из налож
Как это можно выполнить средствами 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)).
При желании все это можно оформить в виде отдельной процедуры.
Выделяем объекты 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 (14.09 КБ) 9541 просмотр
-
- Гуру
- Сообщения: 5292
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: MapInfo (MapBasic): Как получить новые полигоны из налож
сначала STIntersection, а потом STDifference
тестовый набор данных не помешал бы...
тестовый набор данных не помешал бы...
-
- Новоприбывший
- Сообщения: 9
- Зарегистрирован: 19 июн 2016, 17:50
- Репутация: 0
Re: MapInfo (MapBasic): Как получить новые полигоны из налож
Спасибо, но, к сожалению, это не работает. "Пропорционально площади" здесь совсем не годится. Если два полигона накладываются - то param наложения должен быть суммой param,ов соответствующих полигонов. Если три - то трех.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)).
При желании все это можно оформить в виде отдельной процедуры.
-
- Гуру
- Сообщения: 5292
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: MapInfo (MapBasic): Как получить новые полигоны из налож
самый простой способ объяснить задачу - написать SQL-запрос ;=)
-
- Новоприбывший
- Сообщения: 9
- Зарегистрирован: 19 июн 2016, 17:50
- Репутация: 0
Re: MapInfo (MapBasic): Как получить новые полигоны из налож
Но, к сожалению, синтаксис будет не MapInfoвский.trir писал(а):самый простой способ объяснить задачу - написать SQL-запрос ;=)
-
- Гуру
- Сообщения: 5292
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: MapInfo (MapBasic): Как получить новые полигоны из налож
забудьте уже про MapInfo, это прошлый век
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 14 гостей