Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
127.0.0.1
Зарегистрирован: 16.04.2009 Сообщения: 5
|
Добавлено: Вт Окт 27, 2009 10:04 am Заголовок сообщения: разбор составного региона (с надеждой и утешением) |
|
|
Требуется разработать функцию загрузки простр.объектов в Oracle Spatail
(аналог EasyLoader, но функционально встроенную в корпоративную ГИС)
так вот, при загрузке объектов типа Region столкнулся с проблемой:
как отличать в составе составного региона MapInfo, внутренние контура от внешних.
Т.е. в общем случае, имеем регион состоящий из множества областей,
некоторые из которых имеют пустоты (возможно несколько пустот),
в пустотах располагаются внутренние области (возможно несколько областей),
в некоторых из них, в свою очередь, имеются внутренние области и т.д.
В Oracle Spatail например, такой площадной объект компонуется из множества контуров,
каждый из которых имеет признак внешний (его площадь прибавляется к площади объекта)
или внутренний (его площадь вычитается из площади объекта)
Как, все таки, при анализе региона MapInfo -- отличать внутренние контура от внешних?
PS
трассировка сессии EasyLoader, показала, что EasyLoader вставляет такой составной регион
за одно действие, т.е. разбиения на подобъекты, их отдельной передачи в Oracle и
последующей объединения в один объект не происходит
таким образом, EasyLoader при разборе региона сразу формирует набор контуров с признаками внешний/внутренний
как узнать дивный алгоритм разбора региона в EasyLoader?
Спасибо. |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Вт Окт 27, 2009 3:46 pm Заголовок сообщения: |
|
|
Что с разгону пришло в голову - воссоздать по координатам 2 полигона, проверить их пространственным запросом на ПОЛНОЕ включение одного внутрь другого. |
|
Вернуться к началу |
|
|
127.0.0.1
Зарегистрирован: 16.04.2009 Сообщения: 5
|
Добавлено: Вт Окт 27, 2009 5:03 pm Заголовок сообщения: |
|
|
2Андрей Могильный
представим земельный участок с озером, а в озере есть остров, в котором, наконец, есть пруд...
так вот, полигоны: "озеро", "остров" и "пруд" - полностью будут включены в полигон "земельный участок" |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Вт Окт 27, 2009 6:45 pm Заголовок сообщения: |
|
|
Насколько я понял речь именно о составных полигонах, т.е. о многополигональных областях? Пустоты возможно только в таких объектах. А в рамках одного объекта можно перебрать его полигоны и проверить на включение одного в другой. Если включение есть, то это 100% дырка.
Если речь о разных областных объектах, то я не понял причем тут внутренние и внешние области, там все внешние. |
|
Вернуться к началу |
|
|
Arhara
Зарегистрирован: 18.02.2009 Сообщения: 400 Откуда: Moscow, RF
|
Добавлено: Вт Окт 27, 2009 8:06 pm Заголовок сообщения: |
|
|
А вы какой уровень вложенности собираетесь проверять. В принципе - можно проверить все уровни, но если известно их ограничение, то алгоритм и время вычисления короче. Обычно, если следовать вашей аналогии, после озера на острове редко бывает дробление.
Теперь по самой процедуре, то если исходить из того, что это вложенные объекты чередующиеся в таком порядке плюс-минус-плюс-минус, и вы можете получать внешние контуры всех объектов (хотя бы из MIF-Файла), то это чистая рекурсивная задача над геометрическими объектами:
- объект с самой большой площадью - это плюс
- следующий за ним объект по площади - это минус
дальше аналогично, только выбирать надо те, которые вложены в исследуемый объект, т.к. для самого верхнего объекта - это условие выполняется автоматически. |
|
Вернуться к началу |
|
|
|