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

Не работает функция GetShotWayAndCreateObject

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: Пред. 1 2 3 4 След.
RSS
Не работает функция GetShotWayAndCreateObject
 
Цитата
Александр Махин написал:
Здравствуйте, Роман!!
У меня еще один маленький вопрос в руководстве программиста написано:

axMapNet.GetFastWay Найти самый быстрый путь между узлами сети.
function GetFastWay(NodeStart, NodeFinish: integer; speed : double): integer;
Описание: Метод производит выборку ребер сети, составляющих оптимальный путь между двумя узлами, с точки зрения затрат времени на его прохождение, и заполняет ею контекст cSelectForNet. Граф сети предварительно должен быть открыт методомOpenGraph или создан BuildNet .Начало и конец пути указываются идентификаторами объектов в памяти в параметрах NodeStart и NodeFinish соответственно. В параметре speed указывается средняя скорость в км/ч для ребер, составляющих возможный путь, у которых в соответствующей семантике не указана их реальная скорость прохождения.
При ошибке возвращает ноль, иначе – количество ребер входящих в найденный путь.

Вопрос: какие параметры я должен передать в NodeStart и NodeFinish ?? И откуда их мне забрать??
Получается я нахожу ближайший узел и могу забрать только номер дуги и номер сети! И что с ними дальше делать?
Начало и конец пути указываются идентификаторами объектов в памяти в параметрах NodeStart и NodeFinish, но у узлов нет идентификаторов объектов!!!
 
Роман, у меня получилось определять количество ребер которые входят в состав маршрута.
Теперь как мне выделить этот маршрут с ребрами???
 
Здравствуйте, Александр.
Посмотрел еще на Ваш код.
В функцию GetShotWayByPointAndCreateObject передаёте координаты, которые выбрали в окне карты, но не как не узлов графа.
Необходимо сделать следующее.
После того, как Вы нашли ближайший узел MapNet1.GetNodeByPoint(u, ref tdp1);, Необходимо из объекта u забрать его метрику (координату точки).
Это необходимо сделать для обоих точек.
Полученную координату уже и передавать в функцию определения маршрута.
При успешном посторении маршрута функция возвращает результат равный -1.

После успешного построения маршрута с помощью функции GetFastWay, он должен подсвечиваться автоматически цветом установленном в SelectColor.
 
Спасибо. Роман! Я сделал как Вы сказали и у меня получилось!!
А какой функцией снять выделение?? и как можно записать полученный маршрут в векторный объект "ЛИНИЯ"  ??  
Изменено: Александр Махин - 09.07.2019 12:27:46
 
Цитата
Александр Махин написал:
Спасибо. Роман! Я сделал как Вы сказали и у меня получилось!!
А какой функцией снять выделение?? и как можно записать полученный маршрут в векторный объект "ЛИНИЯ"  ??  
т.е. я хотел сказать необходимо отобразить маршрут как отдельный объект
 
Цитата
т.е. я хотел сказать необходимо отобразить маршрут как отдельный объект
Вы про результаты какой функции сейчас интересуетесь?
 
На данный момент у меня выделяется построенный маршрут, но мне необходимо по клику на данный маршрут получать расстояние, скорость и т.д. (СЕМАНТИКУ)

Вот мой код:
MapNet1.SelectColor = Color.Chocolate;
               MapNet1.GetShotWay(n, m);

Но сейчас я этого не могу сделать, поэтому я думаю записать маршрут как объект.
Типа как в Панораме там появляется окно построения маршрута и есть кнопка "Сохранить маршрут в объект" по нажатию на нее открывается классификатор выбираю линию и маршрут отображается как линия.
 
Добрый день, Александр.
Внутри функции GIS ToolKit вызывается API функция ГИС-ядра:
Код
// Определение кратчайшего расстояния между двумя узлами сети без вызова диалогов
// hmap - идентификатор открытой векторной карты
// hgraph - идентификатор графа сети, предварительно должен быть открыт функцией
// onOpenGraph(...)
// pointbegin - начальный узел(идентификатор объекта карты в памяти)
// pointend - конечный узел(идентификатор объекта карты в памяти)
// methodseek - метод построения (0 - длина, 1- время)
// speed - средняя скорость (км/ч)(если methodseek = 1 и значения семантики
// "Скорость" не установлены)
// На пользовательской картe будут выделены ребра,которые составляют минимальный маршрут
// Число выделенных объектов определяется функцией mapTotalSeekObjectCount(seekapi.h)
// Получить идентификатор выделенного объекта можно используя функцию mapTotalSeekObject(seekapi.h)
// Возвращает: номер объекта (mapObjectKey), если объект маршрут создавался
//            - 1, если объект маршрут не создавался
//              0, при ошибке

_NETIMP long int WINAPI onSeekPathGraph(HMAP hmap, HGRAPH hgraph, TASKPARMEX *parm,
                                HOBJ infobegin, HOBJ infoend,
                                long int methodseek, double speed);

Объекты маршрута можно получить используя функции:
Число выделенных объектов определяется функцией mapTotalSeekObjectCount(seekapi.h)
Получить идентификатор выделенного объекта можно используя функцию mapTotalSeekObject(seekapi.h)
 
Добрый день, Роман!!
Ни чего не понял и не нашел ни одной похожей функции или метода, который Вы привели.
Если я правильно понимаю, то мне нужно как то для построенного маршрута задать семантику или определить его как объект.
Я еще полазил в MapNet.cSelectForNet, но тоже там столько всего))))

А можно допустим сделать так:
1. Я щелкаю два раза на карту и получаю две координаты.
2. Определяю два ближайших узла.
3. Открывается классификатор я выбираю определенную линию и записываю ее код в переменную.
4. Потом создаю линейный объект передаю ей код полученный из классификатора.
5. И мой построенный маршрут можно будет выделять как отдельный объект и забирать его семантику.
 
Цитата
Александр Махин написал:
Добрый день, Роман!!
Ни чего не понял и не нашел ни одной похожей функции или метода, который Вы привели.
Если я правильно понимаю, то мне нужно как то для построенного маршрута задать семантику или определить его как объект.
Я еще полазил в MapNet.cSelectForNet, но тоже там столько всего))))

А можно допустим сделать так:
1. Я щелкаю два раза на карту и получаю две координаты.
2. Определяю два ближайших узла.
3. Открывается классификатор я выбираю определенную линию и записываю ее код в переменную.
4. Потом создаю линейный объект передаю ей код полученный из классификатора.
5. И мой построенный маршрут можно будет выделять как отдельный объект и забирать его семантику.
Проще говоря мне необходимо записать маршрут как отдельный объект типа "LINE".
Изменено: Александр Махин - 10.07.2019 15:21:15
Страницы: Пред. 1 2 3 4 След.
Читают тему (гостей: 1)



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

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