Изменилась работа 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);
В 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);
можно конечно и ф-цию сделать но не в этом суть, а в том что, знание Наименование номенклатуры объекта будет часто требоваться и в других местах если такое будет в планах, прошу не отказать и дать ссылку на скачивание.