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

Поиск объектов на маршруте

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

- найти пересечения маршрута с этими объектами
Знает кто более рациональный алгоритм?
 
Перебрать мосты в требуемой области придется по любому. Не понятно зачем строить площадные объекты (наверное, такова постановка задачи). Далее вызываем функцию определения факта пересечения (в том числе соприкосновения). Оптимальнее уже не будет.
 
Так вроде нет функции пересечения линейного объекта с векторным, есть только с линейным или площадным
 
У Вас векторный знак, или векторный объект? Векторный знак имеет одну точку, а векторный объект имеет две и выступает как линейный.
 
Векторный знак
 
Тогда надо использовать Ваш вариант, только лучше использовать не круг, а квадрат вокруг точки. Другой вариант - построить зону вокруг маршрута и искать попадание точки в зону.
 
чем квадрат лучше?
 
У квадрата будет меньше метрики и пересечения будут искаться быстрее.
 
Цитата
Валерий Парусов написал:
Векторный знак

у которого всего одна точка метрики?
тогда задача упрощается, надо проверить попадание этой точки на линию.

например, с помощью mapGetPointPosition
перебрать все отрезки метрики линии со всеми потенциально возможными точками (например, выбранные в прямоугольных габаритах линии)

Еще вариант:
построить зону вокруг линейного объекта, попадая в которую, объекты будут считаться принадлежащими линии - mapInsideZoneObjectEx
затем выполнить поиск по этой области, задав еще и условие отбора нужных объектов, - mapSelectSeekArea
 
Можно, на мой взгляд, проще.

Определяемся с главной точкой. Для векторного - это или первая или середина между первой и второй (если объект "Растягиваемый" (mapIsObjectStretch) и вторая точка не просто задает направление, а реально является концом объекта).
Определяем расстояние от точки до маршрута:
 1. Находим ближайшую точку на линии маршрута (mapSeekNearVirtualPoint)
 2. Вычисляем  расстояние между найденной и исходной точками.
Сравниваем с допуском.
Для линейных и площадных - простой запрос пересечений mapGetObjectsCross.
Изменено: Сергей Алексеев - 01.06.2021 15:15:24
Страницы: 1
Читают тему (гостей: 1)



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

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