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

Изменилась работа SelectSample() в GTK14 от GTK11

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1 2 След.
RSS
Изменилась работа SelectSample() в GTK14 от GTK11, нет поиска объекта по многолистовой карте MAP при поиске по наименованию листа (а не по номенклатуре)
 
Имеется многолистовая карта (MAP), GTKFree 14.0.2.0, DelphiXE10.4.2
ранее работал код по выделению объектов по имени листа и коду объекта

mvMap:TMapScreen;
ObjectFind: TMapObj
...

var slist:string;
   ilink:integer;
begin
ilink:=30180;
slist:='0.M-36-11';

if ObjectFind.SeekObject(slist,ilink)<>0 then
begin
   ObjectFind.Center;
   mvMap.ViewSelect.SelectSample(true, ObjectFind.ListName, ObjectFind.Key);
   mvMap.SetViewSelected(true, clAqua);
end;

Карта была получена путем преобразования в SXF(DIR) c помощью Panorama 11 и последующим созданием многолистовой карты MAP с помощью Panorama 14 (14.1.0.19)
причем замечено с наименование листов карты стало составным типа 'СУМЫ / 0.M-36-11' в отличии от карты до конвертации где просто было '0.M-36-11"
теперь ObjectFind.ListName -возвращает именно 'СУМЫ'
при подстановки в  mvMap.ViewSelect.SelectSample( , 'СУМЫ', ) она не работает внутри iSite := mapWhatListLayoutIsUn(FMapView.MapHandle, PWCHAR(listname)) возвращает -1
при подстановки в  mvMap.ViewSelect.SelectSample(, '0.M-36-11', ) она  работает внутри iSite := mapWhatListLayoutIsUn(FMapView.MapHandle, PWCHAR(listname)) возвращает 0


за основу проекта  пример \Example\delphi\findobj и добавил свой код под кнопку. карту выбирал свою.


Старыми картами пользоваться нельзя т.к. GTK14 (и Panorama14) требуют сохранить в SXF
1. Почему появляется двойное наименование листов карты (имя +номенклатура) при экспорте импорте , как этого избежать (причем это наблюдается не у всех карт, похоже что только у 2км). Или подправить у уже существующих (удалить наименование оставить только номенклатуру
2. Как вернуть работоспособность коду.

P.S.

по п.2.
Проблема может быть решена через "костыль"
вначале получить строку -номенклатуру листа через mapGetListName()

slist:=mapGetListName(mvMap.MapHandle,ObjectFind.ListNumber );
и уже его вставлять в ViewSelect.SelectSample()
mvMap.ViewSelect.SelectSample(true, slist, ObjectFind.Key);
Изменено: Алексей К - 25.07.2022 10:35:20
 
Подскажите, составное наименование листов карты каким образом смотрите: программно или в ГИС Панорама 14?
 
В 14-й версии ГИС-ядра для топографических карт есть два понятия: номенклатура листа и название листа. Номенклатура является уникальной и поиск листа в районе осуществляется по этому параметру.
Вместо ObjectFind.ListName используйте  mapNomenclatureUn и в поисковых функциях используйте именно номенклатуру.
 
Имя листов смотрю как в Panorame 14 (в строке статуса третье по счету окно статуса -первое координаты , второе масштаб, третье "наименование листа / номенклатура листа" + число объектов
если смотреть в окне "Поиск и выделение"->Закладка "Листы" то идут листы с наименованием вида "номенклатура / имя"

В GTK14 под отладкой смотрю состояние объекта после поиска
т.е. ObjectFind.ListName после  ObjectFind.SeekObject()
 
Цитата
Andrey Gheleznyakov написал:
В 14-й версии ГИС-ядра для топографических карт есть два понятия: номенклатура листа и название листа. Номенклатура является уникальной и поиск листа в районе осуществляется по этому параметру.
Вместо ObjectFind.ListName используйте  mapNomenclatureUn и в поисковых функциях используйте именно номенклатуру.
Есть ли возможность изменить сами карты, думаю если убрать имя (или заменить их имена на номенклатуру) то код не придется переделывать, а его очень много.  
 
В ГИС Панорама меню Задачи запустите Паспорт карты. Далее на закладке Рамка надо выбрать последовательно нужный лист во всплывающем списке и для каждого скопировать номенклатуру в название листа.
 
Спасибо, это я сразу пробовал, но не заметил что карта была под запретом на редактирование, перевел в монопольный режим и да так проблема решается.
Может имеет смысл в GTK14 сделать свойство   "ListNomenclature" аналогичное ListName , раз уж последнее изменилось по смыслу возвращаемого значения
иначе придется каждый раз писать 4 строчки кода
вида
var
resw : array[0..MAX_PATH_LONG - 1] of WCHAR;

FillChar(resw, sizeof(resw), #0);
if mapNomenclatureUn(ObjectFind.ObjHandle, resw, sizeof(resw)) <> 0 then   sLink:=string(resw);

можно конечно и ф-цию сделать но не в этом суть, а в том что, знание Наименование номенклатуры объекта будет часто требоваться и в других местах
если такое будет в планах, прошу не отказать и дать ссылку на скачивание.
 
Уже добавляем.  
 
Новые исходные тексты можно скачать тут https://gisinfo.ru/download/?id=292
 
Спасибо!
Страницы: 1 2 След.
Читают тему (гостей: 1)



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

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