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

GetNodeByPoint на графе

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
GetNodeByPoint на графе
 
Не работает сабжевая функция в последних версиях GTK 14.3.2 (x86) от начала августа - возвращает ноль. Как следствие, не ищется маршрут между узлами.
Если принудительно прочитать в HOBJ объекты по номерам через mapReadObjectByKey - поиск маршрута отрабатывает.
До этого использовал поиск по точкам с координатами, по этому не знаю, когда оно поломалось. Координаты точки в метрах.
Если подложить прошлогодние библиотеки GTK13 - функция успешно находит узел по координатам точки.
Использую gcc-4.9.2 i686-w64-mingw32 если это важно.
 
На основе какого классификатора у Вас создан граф?

Поиск узла выполняется среди объектов, имеющих классификационный код 5558 ("Узел сети").
Для корректной работы графа требуется классификатор, содержащий все необходимые служебные объекты графа (узел сети, дуга сети, маршрут и т.д.) с определенными кодами.
Эти объекты должны иметь определенный набор семантических характеристик также с определенными кодами.
Используйте классификатор road25.rscz при создании графа, в нем имеются все необходимые объекты для работы.
Скачать его можно на странице "Классификаторы" на нашем сайте.
 
Цитата
Денис Вицко написал:
На основе какого классификатора у Вас создан граф?
Использовал road25.rsc И с графом все в порядке.

Я же говорю - в последней версии GTK функция не отрабатывает, а в прошлогодней все нормально.

И еще вопрос: в mapapi.pdf функции работы с сетью описаны для netapi.h (obnet.dll). Но тут я обнаружил graphapi.h, который существует еще со времен версии 11.12. Это более высокоуровневый API? В самом netapi.h указано, что эти функции устаревшие.
 
Цитата
Дмитрий Паньков написал:
Это более высокоуровневый API? В самом netapi.h указано, что эти функции устаревшие.

Всё именно так, как написано в "шапке" netapi.h:
Цитата

*          УСТАРЕВШИЕ ФУНКЦИИ ДОСТУПА К СЕТИ ОБЪЕКТОВ              
*           НОВЫЕ ФУНКЦИИ СМ. graphapi.h, graphdlg.h              
*             ФУНКЦИИ ИМПОРТИРУЮТСЯ ИЗ objnet.dll                

Иными словами - рекомендуется пользоваться функционалом из graphapi.h, функции из netapi.h оставлены для совместимости, являются устаревшими.
По возможности устаревшие функции переадресовываются на новый функционал, однако не для всех функций есть такая возможность.

При этом функция onGetNodeByPoint хотя и описана в netapi.h как устаревшая, должна работать как и раньше, поскольку она не задействует новый функционал работы с графом.
По сути, функция onGetNodeByPoint к сетевой задаче имеет посредственное отношение.
Она просто ищет ближайший к заданной точке точечный объект с кодом 5558 ("Узел сети") на карте графа.

Примерно следующим образом:
Код
  // point - точка
  // info - объект, для размещения результата

  const int NODECODE = 5558;

  int result = 0;
  // Создаем контекст поиска (site - идентификатор карты графа)
  HSELECT Select = mapCreateSiteSelectContext(hmap,site);
  if (Select)
  {
    // Добавляем в Select выделения всех узлов по типу
    int InCode = mapSiteRscObjectCode(hmap, site, NODECODE, LOCAL_POINT);
    if (InCode)
   {
      mapSelectObject(Select, -1, 0);
      mapSelectObject(Select, InCode, 1);
      // Ищем ближайший к точке узел
      result = mapSeekSiteSelectNearestObject(hmap, site, info, Select, point);
   }
   mapDeleteSelectContext(Select);
  }


Пришлите Вашу карту графа с классификатором на почту техподдержки panorama@gisinfo.ru.
 
Цитата
Денис Вицко написал:
рекомендуется пользоваться функционалом из graphapi.h, функции из netapi.h оставлены для совместимости
Хорошо. Тогда как построить сам граф на новом функционале, кроме onNetCreateDlgEx из устаревшего?

Цитата
Денис Вицко написал:
Пришлите Вашу карту графа с классификатором на почту техподдержки
Я бы с радостью, но нет возможности отправлять файлы :-( Мучаю ваш Подольск из примеров данных.
Цитата
Денис Вицко написал:
функция onGetNodeByPoint к сетевой задаче имеет посредственное отношение. Она просто ищет ближайший к заданной точке точечный объект с кодом 5558 ("Узел сети") на карте графа.
Попробовал аналогичные действия проделать у себя - mapSeekSiteSelectNearestObject не отрабатывает.
Если с HSELECT вообще ничего не делать - объект находится. Или если в mapSelectObject передать поиск ребер через mapSiteRscObjectCode(hmap, site, 5557, LOCAL_LINE)  == 82 то тоже находит. А вот узлы (5558, LOCAL_POINT) == 80 не находит... Проверьте на своей стороне, пожалуйста.
 
Цитата
Дмитрий Паньков написал:
Попробовал аналогичные действия проделать у себя - mapSeekSiteSelectNearestObject не отрабатывает. Если с HSELECT вообще ничего не делать - объект находится. Или если в mapSelectObject передать поиск ребер через mapSiteRscObjectCode(hmap, site, 5557, LOCAL_LINE)  == 82 то тоже находит. А вот узлы (5558, LOCAL_POINT) == 80 не находит... Проверьте на своей стороне, пожалуйста.

Спасибо за информацию!
Проверим.
 
Скачайте, пожалуйста, новую версию GIS ToolKit.
В предыдущей были некоторые проблемы в x32-разрядных библиотеках.
Страницы: 1
Читают тему (гостей: 1)



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

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