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

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

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1 2 3 4 След.
RSS
Не работает функция GetShotWayAndCreateObject
 
Здравствуйте! Подскажите пожалуйста по вопросу построения маршрута на карте.
Я пишу на C# с использованием GIS ToolKit 11.

Вот мой код, который я написал, но он не работает т.е. не выделяет маршрут

if (RoadObj.Checked) //Построение маршрута движения
           {
               MapNet1.OpenGraph(MapView.MapHandle, MapNet1.NetSitHandle);

               TxTASKPARM parm;
               parm.Language = 2;

               MapPoint.PlaceInp = TxPPLACE.PP_PLANE;
               int r = MapObj.CreateObjectByExcode(0, (int)TxMetricType.IDFLOAT2, 10911, (int)TxObjectLocal.OL_LINE);

               Point_A1 = 52.3624889;
               Point_B1 = 69.0635201;
               Point_A2 = 51.8676582;
               Point_B2 = 69.5351171;

               double a = Point_A1 * Math.PI / 180;
               double b = Point_B1 * Math.PI / 180;
               MapView.ConvertMetric(ref a, ref b, TxPPLACE.PP_GEO, TxPPLACE.PP_PLANE);
               var tdp1 = new TxDoublePoint { X = a, Y = b };
               MapNet1.GetNodeByPoint(MapObj.ObjHandle, ref tdp1);

               double q = Point_A2 * Math.PI / 180;
               double w = Point_B2 * Math.PI / 180;
               MapView.ConvertMetric(ref q, ref w, TxPPLACE.PP_GEO, TxPPLACE.PP_PLANE);
               var tdp2 = new TxDoublePoint { X = q, Y = w };
               MapNet1.GetNodeByPoint(MapObj.ObjHandle, ref tdp2);

               MapNet1.GetShotWayByPointAndCreateObject(r, ref tdp1, ref tdp2);

               MapNet1.NetRscName = "";
               
               MapObj.CommitObject();
               MapObj.Repaint();
               MapView.Refresh();

           }
           RoadObj.Checked = false;

Я уже указал конкретные координаты начальной и конечной точки, но мне кажется что чего то не хватает. (скрин)
Те функции, котрые я читал на форуме мне не понятны (темный лес для меня т.к. я пишу лишь пару месяцев).

Большая просьба помочь кодом!! Заранее благодарю!!
 
Проверьте результаты, которые возвращают вызываемые Вами функции, тогда будет понятно определяются ли ближайшие точки сети, строится ли маршрут.
Способ отображения  объекта устанавливается свойством  mapobj.style.


 
 
Я проверил все результаты по вызываемым фукциям и сделал скрины.
Подскажите как и что мне исправить т.к. на C# не много все по другому пишется и мне не понятно ((
4.PNG (40.67 КБ)
3.PNG (39.39 КБ)
2.PNG (39.6 КБ)
1.PNG (38.26 КБ)
6.PNG (36.94 КБ)
5.PNG (49.15 КБ)
 
Кроме результата функции GetShotWayByPointAndCreateObject, результатов других функций не видно.  GetShotWayByPointAndCreateObject возвращает 0, что говорит о том, что  кратчайший путь не найден.
Есть ли у Вас открытый граф дорог?
 
Да у меня имеется граф дорог я его открывал в ГИС Панораме и строил маршрут от точки А до точке Б ее средствами, но не знаю он открытый или нет.))
Я этот граф дорог использую и в своей ПО.
У меня такое подозрение, что я не правильно нахожу ближайший узел на карте от указанных координат и не знаю как передать параметр "info" для функции GetShotWayByPointAndCreateObject  ((
Или я не правильно перевожу координаты в метры???
На форуме вычитал, что нужно предварительно создать объект для результата Info: HOBJ с помощью функции  MapObj.CreateObject., но данная функция у меня имеет тип VOID, а Info имеет тип Integer.
В общем одни вопросы, да и опыт в программировании очень маленький))).
Подскажите что дальше делать???))))
 
Цитата
Александр Махин написал:
Да у меня имеется граф дорог я его открывал в ГИС Панораме и строил маршрут от точки А до точке Б ее средствами, но не знаю он открытый или нет.))
Я этот граф дорог использую и в своей ПО.
У меня такое подозрение, что я не правильно нахожу ближайший узел на карте от указанных координат и не знаю как передать параметр "info" для функции GetShotWayByPointAndCreateObject  ((
Или я не правильно перевожу координаты в метры???
На форуме вычитал, что нужно предварительно создать объект для результата Info: HOBJ с помощью функции  MapObj.CreateObject., но данная функция у меня имеет тип VOID, а Info имеет тип Integer.
В общем одни вопросы, да и опыт в программировании очень маленький))).
Подскажите что дальше делать???))))
Добрый день, Роман!
Я поставил точки остановы, чтобы отследить что происходит при выполнении кода (на скрине).
И возникли следующие вопросы:
1. Функция GetNodeByPoint получает необходимые параметры, то тогда логически я ее могу выделить на карте, т.е. для того чтобы убедиться что ПО находит ближайший узел (Как это сделать??).
2. Функция GetShotWayByPointAndCreateObject тоже получает все параметры, но выдает ноль. Что не так???
7.PNG (40.41 КБ)
 
Роман, я еще попытался выделить ближайший найденный узел через функцию GetNodeByPoint.
Но ни чего не выделяется((
Вот мой код

if (RoadObj.Checked) //Построение маршрута движения
           {
               MapNet1.OpenGraph(MapView.MapHandle, MapNet1.NetSitHandle);
               MapPoint.PlaceInp = TxPPLACE.PP_PICTURE;
               MapPoint.PlaceOut = TxPPLACE.PP_PLANE;
               MapPoint.SetPoint(e.x, e.y);
               int t = MapObj.CreateObjectByInCode(1, (int)TxMetricType.IDFLOAT2, 5558);
               var tdp1 = new TxDoublePoint { X = e.x, Y = e.y };
               MapNet1.GetNodeByPoint(t, ref tdp1);
               MapObj.St yle = TxObjectStyle.OS_SELECT;      
           }
           RoadObj.Checked = false;
 
В последнем примере кода Вы судя по всему берете координаты курсора из окна MapView. Их нужно корректно преобразовать в метры.
Пример кода поиска ближайшей точки:
Код
       pointXY.X := mvMap.MapLeft + X;
       pointXY.Y := mvMap.MapTop + Y;
       mvMap.ConvertMetric(pointXY.X, pointXY.Y, PP_PICTURE, PP_PLANE);
       MapObj1.Style:=OS_NORMAL;
       ObjNet.GetNodeByPoint(MapObj1.ObjHandle, pointXY);
       MapObj1.Style:=OS_SELECT;
       MapObj1.Center;

Здесь X и Y координаты в пикселях в окне MapView -  Ваши e.x и e.y.

Граф достаточно открыть один раз, а не каждый раз при поиске.
Проверьте, что у Вас возвращает ObjNet.GraphHandle после открытия.
 
Роман, я проверил и Вы были правы ObjNet.GraphHandle возвращает "0".
Затем я решил проверить на ноль MapNet1.OpenGraph и тоже "0"(((

Я переписал код согласно представленному Вами примеру и вот что у меня получилось

if (RoadObj.Checked) //Построение маршрута движения
           {
               if (MapNet1.OpenGraph(MapView.MapHandle, MapNet1.NetSitHandle) == 0) MessageBox.Show("Ошибка открытия ГРАФА ДОРОГ!");
               int t = MapNet1.GraphHandle;
               double a = MapView.MapLeft + e.x;
               double b = MapView.MapTop + e.y;
               MapView.ConvertMetric(ref a, ref b, TxPPLACE.PP_PICTURE, TxPPLACE.PP_PLANE);
               MapObj.St yle = TxObjectStyle.OS_NORMAL;
               var tdp1 = new TxDoublePoint { X = a, Y = b };
               MapNet1.GetNodeByPoint(MapObj.ObjHandle, ref tdp1);
               MapObj.St yle = TxObjectStyle.OS_SELECT;
               MapObj.Center();
           }
           RoadObj.Checked = false;

Скрины прилагаю. Что я делаю не так?? Хотя в Панораме все считается!
Подскажите где может быть ошибка?
9.PNG (22.94 КБ)
8.PNG (165.95 КБ)
 
На скрине видно, что  у Вас t=0, т.е. графа дорог в памяти нет.
Как Вы открываете карту с графом дорог?
Пример:
Код
    dlgOpenMap.Filter := 'Файл карты с сетью *.sit|*.sit|Все файлы *.*|*.*';
    if dlgOpenMap.Execute then
      if mvMap.MapSites.Append(dlgOpenMap.FileName)>0 then
        begin
          ObjNet.NetSitName := dlgOpenMap.FileName;
          mvMap.Repaint;
        end;

    if ObjNet.OpenGraph( mvMap.MapHandle, ObjNet.NetSitHandle) = 0
      then begin
        ShowMessage('Ошибка открытия');
        exit;
      end;
 
    FGraph := ObjNet.GraphHandle;
Страницы: 1 2 3 4 След.
Читают тему (гостей: 1)



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

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