На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

взаимное расположение объектов

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
взаимное расположение объектов
 
Здравствуйте господа разработчики !

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

Вопрос: какая функция подходит лучше всего.
П.С во всех функция типа ***InsideObject*** написано (только для замкнутЫХ)
Изменено: KFF - 25.12.2013 14:39:30
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
Вариант А:
Код
// Создать объект оверлейных операций 
// flag = 0 - проверка на самопересечение отключена (используется для ускорения обработки в задачах визуализации)
ovlCreate

// Установить шаблон для оверлейных операций (замкнутый объект)
ovlSetTemplet

// Цикл определения положения объектов 
{
  // Установить обрабатываемый объект и метод обработки (возвращает положение объекта относительно шаблона)
  ovlSetObjectCross
}

// Освободить объект оверлейных операций
ovlFree

Код
// Если объект точечный, векторный, подпись или шаблон, то параметры
// precision,method,location игнорируются. Положение объекта определяется
// по первой точке первого подобъекта, а функция ovlSetObjectCross возвращает:
//   1 - объект внутри шаблона                          // 15/06/10
//   2 - объект вне шаблона
// Если контур шаблона ЗАМКНУТ и method == 1, то ovlSetObjectCross возвращает:
//   1 - все контура объекта внутри шаблона, либо совпадают
//   2 - все контура объекта вне шаблона
//   3 - один или несколько контуров объекта пересекаются с шаблоном,
//       либо обнаружены внутренние и внешние контура (относительно шаблона)
//   4 - контур шаблона внутри контура объекта

P.S. Данный вариант оптимален для обработки большого числа объектов.
 
спасибо.
Второй вопрос:
Имеется линейный объект с произвольной метрикой, нужно найти все объекты которые он пересекает  
Поиск по области, будет "хватать" несуществующий сегмент от первой до крайней точки + не работает с топологически некорректными маршрутами  => потому не подходит
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
Как вариант:

А. Выполнить перебор объектов по габаритам линейного объекта (mapSelectSeekAreaFrame, mapSeekSelectObject).
Б. Для каждого найденного объекта выполнить поиск точек пересечения с эталоном (mapCreateObjectCrossPointsEx).
 
Так я так и сделал.
Вопрос, чтото на эту тему будет добавлятся в ядро ?

П.С. Данный режим нужно для поиска пересечений маршрута полёта с площадными объектами (предварительный анализ конфликтов)
Если маршрут (пример на России) будет начинатся в Домодедово а заканчиватся Хабаровском или Петропавлоском (камчатским имеется в виду)
то в TMapDFrame попадёт вся Российская Федерация с сотнями тысяч зон на 10-тыс. километровом пути
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
Маршрут - линейный объект. У каждого вектора маршрута есть рамка (как у векторного мостика). Никто не запрещает предварительно исключить зоны по НЕпересечению их рамок с рамкой очередного вектора маршрута. Если ТАКОГО в GTK пока нет, то не думаю, что функция пересечения двух ректанглов - неподъёмная задача.
 
Цитата
Газонокосильщик пишет:
У каждого вектора маршрута есть рамка (как у векторного мостика). Никто не запрещает предварительно исключить зоны по НЕпересечению их рамок с рамкой очередного вектора маршрута. Если ТАКОГО в GTK пока нет, то не думаю, что функция пересечения двух ректанглов - неподъёмная задача.
оффтоп
повтор серии 1
Цитата
Если маршрут (пример на России) будет начинатся в Домодедово а заканчиватся Хабаровском или Петропавлоском (камчатским имеется в виду) то в TMapDFrame попадёт вся Российская Федерация с сотнями тысяч зон на 10-тыс. километровом пути
для наглядности (фиолетовая линия - кратчайший путь по которому летают самолёты)
Изменено: KFF - 01.01.2014 16:54:45
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
И что? Элементарная задача для бланковки - найти номенклатуры заданного масштаба для трассы, кою Вы изобразили на картинке. А заодно - и субъекты РФ, через которые трасса проходит. Решается по алгоритму, описанному чуть выше на ура!
ЗЫ - таки скорости сейчас намного выше, чем во времена i8086. Проверено на практике!
Изменено: Газонокосильщик - 02.01.2014 00:14:49
 
Цитата
Газонокосильщик пишет:
таки скорости сейчас намного выше, чем во времена i8086
Таки моя практика, показывает обратное.
Например, чтение наименования 29500 объектов (названия населённых пунктов, семантика 9) с 2-х километровки осуществляется за 2-3 секунды. Хочу заметить, "двушка" оптимизирована специально для функций ядра - населённые пункты первые 29500 объектов на карте по уникальным номерам. То есть( я создан новую карту, скопировал с исходной все Н.П. а потом поверх всё остальное.

Теперь представим ситуацию "прокладки трассы" через Российскую Федерацию:
Зоны и районы в воздушном пространстве, к сожалению, не являются областями ограниченными по рамке, которые можно считать по методу "матрёшки" - нашёл грубую номенклатуру, отбрасываешь мельче ещё мельче и доходишь до нужного уровня (глубины) вложенности.
Зоны это вот такая картина:

Жёлтые области вообще левые и находятся от трассы на тысячах километров. Ладно если бы плотность анализируемых объектов была бы как в Якутии, но "зелёные" области бурной авиационной деятельности, порой содержат сотни а то и тысячи объектов которые тупо нужно отбрасывать.
Одним словом, слишком общий алгоритм был предложен Олегом Валентиновичем. Было бы неплохо включить функцию поиска в ядро, по типу mapSeekArea только с названием "mapSeekSelectLine" (запросить все объекты которые пересекаются с линейным) и желательно без учёта "ошибок метрики".
Практика показывает что, например, если для кадастра или сельского хозяйства метрика типа путанка является дефектной, то это не обозначает что сельское хозяйство и кадастр, будут устанавливать базовые правила формирования всей метрики целой ГИС.
Это я о том, что может быть маршрут по типу "боевого дежурства" (фиолетовый), или облёт газопровода "Газпромом" (тёмно-зелёный)
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
Цитата
KFF пишет:
Зоны это вот такая картина:
Да какая разница!
Цитата
KFF пишет:
Одним словом, слишком общий алгоритм был предложен Олегом Валентиновичем.
Стандартный алгоритм для решения такой задачи. Я понимаю, что Вам нужна готовая функция :) . Её пока нет...
Страницы: 1
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности