Хотелось бы для себя понять, в чём заковыка. В теме http://gisweb.ru/forum/forum7/topic9587/messages/ я выложил код заполнения таблицы семантиками создаваемого объекта. Если я правильно понимаю, то при регистрации объекта посредством mapRegisterObject его поля заполняются согласно классификатору обязательными и доступными семантиками, которые я потом могу запросить через mapAvailableMustSemanticList и mapAvailableSemanticList/mapAvailableSemanticCount. В моём случае на создаваемый объект последовательный вызов mapAvailableSemanticCode выдаёт довольно нетипичные для объекта коды. Пользователь, создающий объект, вроде как не обязан, но может знать требуемые для создания объекта семантики. Вопросы: 1. Наличие настроенных семантик сильно влияет на отображение объекта? (допустим отсутствует или некорректное значение текста шрифта или его цвет) 2. Каким образом я могу посмотреть наверняка, какие семантики прописаны для объектов в классификаторе, чтобы проверить процедуру создания их на карте? 3. На что следует обратить внимание, если создаваемый объект не отображается на карте? (допустим линейный, все точки добавлены и семантики по-умолчанию, из списка, полученного выше, в наличии)
2. Каким образом я могу посмотреть наверняка, какие семантики прописаны для объектов в классификаторе, чтобы проверить процедуру создания их на карте?
mapGetRscSemanticObjectCodeList ??
Нет, скорее всего проверенным ПО, потому что работу своего кода я и хочу сверить, найти или исключить ошибки в классификаторе, полученном со стороны. Я пользуюсь SDK и, сталкиваясь с его ошибками, не могу быть уверен в том, что вызовы его методов дают корректные данные. В частности я вижу, что данные для объекта из классификатора "странные" на мой взгляд, но, не зная какие были заданы его создаталем, оценить эту странность при помощи средств библиотек не могу. В частности в указанной в стартовом сообщении ссылке уже есть ошибка работы получения списка семантик. Как мне быть уверенным в том, что другой метод корректно выдёргивает эти семантики из классификатора?
operator.rsc - это реализация классификатора КЭУЗ-12, который существует в виде бумажного документа и ещё он ДСП. Если у Вас нет документа, реализацией которого является файл operator.rsc - то, видимо, никак не проверить.
Владимир Егоров написал: operator.rsc - это реализация классификатора КЭУЗ-12, который существует в виде бумажного документа и ещё он ДСП. Если у Вас нет документа, реализацией которого является файл operator.rsc - то, видимо, никак не проверить.
Угу, что-то типа того. Мне просто нужно удостовериться, что методы, предоставляемые SDK, работают корректно. Поэтому на всякий случай и прошу разработчиков проверить выдачу кодов из зарегистрированного объекта по использованному классификатору. Если все алгоритмы в порядке и классификатор на их стороне тоже собран корректно, тогда я буду пенять тех, кто мне выдал тот классификатор, по которому я вступил на грабли. И да, у Панорамы нет средств просмотра классификатора и прописанных на объекты семантик? Не верю.
В смысле нету ? ГИС Оператор для силовых структур под Astra Linux запускается на Ubuntu на раз два, потом открываете классификатор и изучаете его сколько хотите.
Владимир Егоров написал: В смысле нету ? ГИС Оператор для силовых структур под Astra Linux запускается на Ubuntu на раз два, потом открываете классификатор и изучаете его сколько хотите.
Посмотрел содержимое, сравнил с тем, что возвращает mapAvailableSemanticCount + mapAvailableSemanticCode. Могу сказать, что возвращаемые коды отличаются от того, что записано в классификаторе. Коды программными средствами:
В реализации функции mapAvailableSemanticList допущена ошибка, связанная с неправильным анализом буфера семантик.
Оттуда же.
Есть разница мне кажется:
Код
// Запросить список всех кодов семантики для данного объекта
// incode - внутренний код(индекс)объекта
// hRsc - идентификатор классификатора карты
// code - адрес массива семантик
// countlimit - размер массива
// Возвращает число считанных кодов семантики
// При ошибке возвращает ноль
_MAPIMP long int _MAPAPI mapGetRscSemanticObjectCodeList(HRSC hRsc,long int incode,
long int * code, long int countlimit);
mapGetRscSemanticObjectCodeList - это информация по классификатору (rscapi.h), то есть этой функцией вы работаете с классификатором, который и открыли в ГИС Оператор. mapAvailableSemanticLis - это про объект который уже создан по классификатору и лежит в карте. И возвращается, как я понимаю, список семантик которые можно добавить к конкретно этому объекту, а не вообще все доступные сематники для вообще всех объектов данного типа. Вообще все доступные семантики надо вытаскивать из классификатора.
Александр Лазарев написал: 1. Наличие настроенных семантик сильно влияет на отображение объекта? (допустим отсутствует или некорректное значение текста шрифта или его цвет)
Есть семантики, которые влияют на внешний вид, и которые не влияют. Если для семантики, влияющей на внешний вид, Вы успешно присвоили значение объекту, то скорее всего это значение корректно.
Цитата
Александр Лазарев написал: 2. Каким образом я могу посмотреть наверняка, какие семантики прописаны для объектов в классификаторе, чтобы проверить процедуру создания их на карте?
Семантики, которые можно назначить объекту, можно запросить из классификатора. Например, получение списка семантик по ключу объекта:
Александр Лазарев написал: 3. На что следует обратить внимание, если создаваемый объект не отображается на карте? (допустим линейный, все точки добавлены и семантики по-умолчанию, из списка, полученного выше, в наличии)
Можно выполнить следующие действия: - установить вид отображения карты "Нормальный с узлами" - в этом случае будет явно отображаться метрика объекта, и Вы сможете оценить ее корректность;
- убедиться в правильности установленных для объекта параметров в классификаторе: возможно, у Вас некорректно задан вид объекта или его размеры (в этом случае он отображается очень мелко, и его не видно на карте). Это удобнее всего сделать, открыв Ваш классификатор в задаче "Редактор классификатора" в одном из настольных продуктов для Windows (например, ГИС Панорама Мини).