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

Не работает GetShotWayDlg

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1 2 След.
RSS
Не работает GetShotWayDlg
 
Использую Gtk12
Вроде код правильный, вершины графа на карте реально существуют и находятся, Оператор 11 по этому же графу для этих вершин кратчайший путь находит.
А программно не получается, MapNet.GetShotWayDlg возвращает 0. Причем в отладке видно, что 0 возвращает функция fDll_onSeekPathDlgGraph внутри метода компонента.hSiteNet установлен правильно, поскольку на этом слое другие операции нормально совершаются.
Что самое интересно, в Gtk10 другой наш рабочий пример нормально искал, а тот же пример в 12 уже искать отказывается.
Код
procedure TMForm.ToolButton22Click(Sender: TObject);
var
  Obj1,Obj2,res1,res2:HOBJ;
  code:integer;
begin
  //hSiteNet установлен в FormCreate
  MapNet.NetSitName:=ExtractFileDir(MapFile)+'\'+NetSite;
  code:=MapNet.OpenGraph(vMap.MapHandle,hSiteNet);
  if code=0 then exit;

  Obj1:=mapCreateSiteObject(vMap.MapHandle,hSiteNet);
  Obj2:=mapCreateSiteObject(vMap.MapHandle,hSiteNet);

  if (Obj1>0) and (Obj2>0) then begin
    res1:=mapSeekSiteObject(vMap.MapHandle,hSiteNet,Obj1,1750);
    res2:=mapSeekSiteObject(vMap.MapHandle,hSiteNet,Obj2,1796);

    if (res1>0) and (res2>0) then
      code:=MapNet.GetShotWayDlg(Obj1,Obj2);
  end;

И попутный вопрос, в netapi.inc написано, что в нем описаны устаревшие функции, а новые в  GRAPHAPI.H, который ссылается на MAPACCES.DLL. Эту dll-ку я нашел в каталоге Оператора, это она? Нет ли готового pas-файла?

net.png (30.77 КБ)
Изменено: Валерий Парусов - 24.04.2021 18:57:03
 
Диалог в итоге отображается? Вместо mapacces.dll надо вызывать gisXXacces.dll.  
 
ничего не отображается.
про GRAPHAPI.H и mapacces.dll это второй вопрос, никак с первым не связанный. ваш компонент GISUOBNET.DLL использует
Изменено: Валерий Парусов - 26.04.2021 13:34:23
 
Поверил работу компонента на примере из инсталляции (13-я версия). Диалог отображается, маршрут строится. Пришлите на gisga@yandex.ru сам граф.
 
Диалог построения маршрута не открывается потому, что в классификаторе графа не найдена семантика "Тип (класс) дороги" - код 1052.
В  следующей версии будем выдавать предупреждение.
 
Все равно не показывает диалог с вашим доработанным классификатором.
Но хоть путь искать начал с помощью MapNet.GetShotWay.
Попробовал двумя способами:

Код
procedure TMForm.ToolButton22Click(Sender: TObject);
var
  PathObj,Obj1,Obj2,res1,res2:HOBJ;
  code:integer;
  p1,p2:TDOUBLEPOINT;
  Select:HSELECT;
  pc:GTKPChar;
begin
  Obj1:=mapCreateSiteObject(vMap.MapHandle,hSiteNet);
  Obj2:=mapCreateSiteObject(vMap.MapHandle,hSiteNet);

  if (Obj1>0) and (Obj2>0) then begin
    res1:=mapSeekSiteObject(vMap.MapHandle,hSiteNet,Obj1,1750);
    res2:=mapSeekSiteObject(vMap.MapHandle,hSiteNet,Obj2,1796);

    if (res1>0) and (res2>0) then begin
      //**************** Способ №1 *********************
      //Пустой объект - маршрут
      PathObj:=mapCreateSiteObject(vMap.MapHandle,hSiteNet);
      mapRegisterObject(PathObj,5559,OL_LINE);

      //найти кратчайший путь и создать объект маршрута
      code:=MapNet.GetShotWay(Obj1,Obj2);
      code:=MapNet.GetShotWayAndCreateObject(PathObj,Obj1,Obj2);//*** Почему-то без вызова MapNet.GetShotWay не ракботает !!!****
      if code>0 then begin
        mapCommit(PathObj);
      end;
      mapFreeObject(PathObj);


      //**************** Способ №2 *********************
      //Пустой объект - маршрут
      PathObj:=mapCreateSiteObject(vMap.MapHandle,hSiteNet);
      mapRegisterObject(PathObj,5559,OL_LINE);

      //найти кратчайший путь, исключая дуги с семантикой 500020=1 и создать объект маршрута
      mapGetObjectCenter(vMap.MapHandle,Obj1,p1.X,p1.Y);
      mapGetObjectCenter(vMap.MapHandle,Obj2,p2.X,p2.Y);

      Select := mapCreateSiteSelectContext(vMap.MapHandle, hSiteNet);

      pc:='0';
      mapSelectSemanticAppend(Select,4,50020,pc);//>0
      mapSetSiteSeekSelect(vMap.MapHandle,hSiteNet,Select);

      code:=MapNet.GetShotWayByPointExAndCreateObject(PathObj,p1,p2,Select);
      if code=-1 then begin
        mapCommit(PathObj);
      end;

      mapDeleteSelectContext(Select);
      mapFreeObject(PathObj);
      vMap.Repaint;
    end;
  end;

  mapFreeObject(Obj1);
  mapFreeObject(Obj2);
end;
Способ №1 работает, хотя странно, что  GetShotWayAndCreateObject без вызова GetShotWay ничего не создает. Но он не подходит, поскольку надо исключать дуги с семантикой 50020 со значеним 1

Способ №2 не работает. Может Select формирую не так?
Изменено: Валерий Парусов - 28.04.2021 14:31:44
 
В 13-й версии диалог с новым классификатором отображается и строится маршрут.  
Диалог.png (44.48 КБ)
 
У Вас неправильно установлен Select для функции GetShotWayByPointExAndCreateObject.
Нужно установить в Select объекты для исключения из поиска мининимального пути.
Например:
// Установить в select линейные объекты (дуги) с семантикой 50020 и значениями равными 1
mapSelectLocal(select, -1, 0);
mapSelectLocal(select, LOCAL_LINE, 1);
mapSelectSemanticAppendUn(select, CMEQUAL, 50020, L"1");

Вызов mapSetSiteSeekSelect не требуется.
 
перешел на GTK13. Заработало. Но есть несколько замечаний:
1)  GetShotWayByPointExAndCreateObject всегда возвращает 0, есть маршрут, нету маршрута - все равно.
2) При построении кратчайшего маршрута с диалогом появляется ошибка "atan2 DOMAIN error", но маршрут строится
3) при применении mapSetSemanticValue, к семантике с кодом 9 (собственное название) если строка начинается с цифры или точки, семантика пишется как число, например "123 рбр" запишется как 123, ".23 объект" запишется как 0.23. Вынужден начинать названия с подчеркивания, иначе ерунда получается. в 12 такого не было.
4) При открытии карты выдаются ошибки, хотя карта грузится и работает:
err1.png (3.2 КБ)
err2.png (4.07 КБ)
 
С вопросами разбираемся.  Какая разрядность приложения: х32 или х64? Какой функцией редактируете семантику?
Изменено: Andrey Gheleznyakov - 18.05.2021 08:50:25
Страницы: 1 2 След.
Читают тему (гостей: 1)



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

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