Вопрос на наименованию темы. Имеется линейный объект, у которого пара (или более) рёбер полностью совпадают. Например, маршрут: Москва - Питер -Мурманск - Архангельск- Питер и снова Москва. Анализируемая точка на входе функции mapSeekNearVirtualPoint - допустим Новгород.
Результат - точка на первом и крайнем участке (совпадающий) + номер сегмента линенйцного объекта (трассы)
Вопрос, как получить полный перечень сегментов ??? Пояснение: стоит задача, отсечь маршрут по последней точке доклада (ВТОРОМ результате вышеописанной функции), но я получаю постоянно сегмент номер "1" Приходится писать громоздкий код, из созданием отдельного объекта, который отсекая первый участок, повтороно проверяет ближайшую точку.
Андрей Владиславович ! Продукция КБ Панорама, сферы их использования и применения за более чем 20 лет её существования очень далеко ушла от рамок "кадастра" и "полевых работ". Этот факт, свидетельствует о том, что выпуклая метрика (правильная с точки зрения Ваших полевых и кадастровых идеологов метрики) не является эталоном для систем ГИС, а тем более для Вашей. Пересекающиеся объекты и линейные объекты путанки, для большинства отраслей не являются вырожденными и не правильными. Суть моего ответа заключается в том, что пора бы пересмотреть подход и диапозон функций на предмет корректности работы, с "неправильной" метрикой.
П.С. одно дело объект путанка с локализацией площадной, а другое произвольный линейный (маршрут того же туриста, машины в графе и так далее)
Не тот глуп кто не знает, а тот, кто не знает где искать.
Функция поиска ближайшей точки предполагает, что ей достаточно найти одну - согласитесь, что с задачей она справилась. Далее в зависимости от знания про исходные данные (их особенности) нужно принимать решение о качестве результата. На все случаи жизни написать одну единственную функцию не получится. Все требуется здесь после получения информации о координатах ближайшего сегмента, так это перебрать все сегменты и определить сегмент с такими же координатами.
Андрей Владиславович, а я предполагал что приставка "mapSeek" выполняет поиск не только первого случая выполнения условия.
Цитата
Все требуется здесь после получения информации о координатах ближайшего сегмента, так это перебрать все сегменты и определить сегмент с такими же координатами.
теперь ясно, почему функции топологии работают так, как работают. А если 2 участка пересекаются или исходят из одной вершины, а точка пересечения является ближайшей к моей?
Функция поиска дает координаты ближайшей точки. Эти координаты на плоскости будут иметь единственное значение. Далее при необходимости нужно определить сколько дуг и вершин объекта проходят через эту точку (если объект имеет самопересечения). Этот вопрос за рамками функции mapSeekNearVirtualPoint.
Вопрос, зачем называть функцию с приставкой "Seek", если в ней нет ни FIRST ни NEXT ПО большому счёту, функция выполняет частую задачу, причём непонятно какой сегмент (номер точки) она вернёт при трёх (четырёх) совпадающих или пересекающихся сегментах
Не тот глуп кто не знает, а тот, кто не знает где искать.
Только эта функция не применяется к текущей. Текущая функция ищет значение FIRST.
Цитата
Первый по ходу точек метрики объекта
Да все уже это поняли. Вопрос в том, как найти следующие узлы (сегменты) в случаях указанных выше. Если смотреть на это с точки зрения логики, то в описании должно быть указано уточнение
Цитата
// Найти ПЕРВУЮ точку на контурах объекта и подобъектов, ближайшую к заданной // ...... _MAPIMP long int _MAPAPI mapSeekNearVirtualPoint(HMAP hMap, HOBJ info, DOUBLEPOINT * pointin, DOUBLEPOINT * pointout);
Не тот глуп кто не знает, а тот, кто не знает где искать.