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

Уточнение по работе mapRegisterObject + mapAvailableSemanticCode

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: Пред. 1 2 3 След.
RSS
Уточнение по работе mapRegisterObject + mapAvailableSemanticCode
 
А чем отличаются функции mapGetRscSemanticObjectCodeList и mapAvailableSemanticCount+mapAvailableSemanticCode?
Зачем их было делить, если можно сразу прочитать через классификатор?
 
Цитата
Александр Савелов написал:

Цитата
 Александр Лазарев  написал:
3. На что следует обратить внимание, если создаваемый объект не отображается на карте? (допустим линейный, все точки добавлены и семантики по-умолчанию, из списка, полученного выше, в наличии)
Можно выполнить следующие действия:
- установить вид отображения карты "Нормальный с узлами" - в этом случае будет явно отображаться метрика объекта, и Вы сможете оценить ее корректность;
  - убедиться в правильности установленных для объекта параметров в классификаторе: возможно, у Вас некорректно задан вид объекта или его размеры (в этом случае он отображается очень мелко, и его не видно на карте). Это удобнее всего сделать, открыв Ваш классификатор в задаче "Редактор классификатора" в одном из настольных продуктов для Windows (например, ГИС Панорама Мини).
- Средствами SDK какие методы следует вызвать, чтобы установить такой режим отображения?
- У нас на работе нет Windows в принципе, но в ГИС Оператор классификатор видится мне нормальным.
 
Я попробовал предложенный метод чтения классификатора и что могу сказать...
В свой уже описанный в соседней ветке код впендюрил:
Код
                    HOBJ obj = mapCreateSiteObject( m_descriptor, m_workingLayer);
                    if( obj != 0)
                    {
                        m_objectIsCreated = true;
                        if( mapRegisterObject( obj, m_objectToSave.m_excode, m_objectToSave.m_local) != 0)
                        {
                            static long bufCount = 1024;
                            long codeBuffer[ 1024] = { 0};
                            if( g_processCallback != NULL)
                            {
                                g_processCallback( 100. * ( ( double)i / ( double)segmCount
                                                            + ( double)j / (segmCount * objects_in_layer)));
                            }
                            // вот отсюда добавил предложенное, вроде всё соответствует
                            long incode = mapGetRscObjectCodeByName( hRsc, codec->fromUnicode( newObjectNameFromFilter).data());//mapGetRscObjectKeyIncode( hRsc, )
                            if( incode != 0)
                            {
                                long codesCount = mapGetRscSemanticObjectCodeList( hRsc, incode, codeBuffer, bufCount);
                                if( codesCount != 0)
                                {
                                    for( int h = 0; h < codesCount; h++)
                                    {
                                        if( codeBuffer[ h] == 0) break;
                                        qDebug() << "mapGetRscSemanticObjectCodeList" << codeBuffer[ h];
                                    }
                                }
                            }
                            else
                            {
                               //предыдущий вариант работы
                            }
На выходе тоже самое, что и от mapAvailableSemanticList:
 

mapGetRscSemanticObjectCodeList 133148281143305

mapGetRscSemanticObjectCodeList 133156871108890

mapGetRscSemanticObjectCodeList 133174050978076

mapGetRscSemanticObjectCodeList 472446402668

mapGetRscSemanticObjectCodeList 48546015358089

mapGetRscSemanticObjectCodeList 20101

Хотя количество семантик вернул правильное - 11, для объекта "Подпись 1.5 син"
Я чот опять неправильное сделал? :)
Спасибо.
С уважением,
Лазарев Александр.
 
Доброго времени суток. Какие-нибудь сдвиги в поисках причин данной проблемы есть или мне можно не ждать?
Каким образом заполняются таблицы в ГИС Оператор, что у них все семантики на месте?
Спасибо.
Изменено: Александр Лазарев - 12.07.2018 08:56:53
 
Посмотрите ещё раз вот тут: http://gisweb.ru/forum/messages/forum7/topic9587/message72208/#message72208

Попробуйте повторить.
 
Цитата
Владимир Егоров написал:
Посмотрите ещё раз вот тут:  http://gisweb.ru/forum/messages/forum7/topic9587/message72208/#message72208

Попробуйте повторить.
Я же вроде достаточно ясно написал, что mapGetRscSemanticObjectCodeList возвращает неверные значения. Какой смысл мне снова пробовать то, что уже не работает?
Изменено: Александр Лазарев - 12.07.2018 12:42:48
 
Доброго времени суток.
Хочу напомнить о том, что ответов на мои вопросы пока нет:
Цитата
Александр Лазарев написал:
А чем отличаются функции mapGetRscSemanticObjectCodeList и mapAvailableSemanticCount+mapAvailableSemanticCode?
Зачем их было делить, если можно сразу прочитать через классификатор?
Цитата
Александр Лазарев написал:
Цитата
 Александр Савелов  написал:
Можно выполнить следующие действия:
- установить вид отображения карты "Нормальный с узлами" - в этом случае будет явно отображаться метрика объекта, и Вы сможете оценить ее корректность;
  - убедиться в правильности установленных для объекта параметров в классификаторе: возможно, у Вас некорректно задан вид объекта или его размеры (в этом случае он отображается очень мелко, и его не видно на карте). Это удобнее всего сделать, открыв Ваш классификатор в задаче "Редактор классификатора" в одном из настольных продуктов для Windows (например, ГИС Панорама Мини).
 - Средствами SDK какие методы следует вызвать, чтобы установить такой режим отображения?
- У нас на работе нет Windows в принципе, но в ГИС Оператор классификатор видится мне нормальным.
Цитата
Александр Лазарев написал:
Каким образом заполняются таблицы в ГИС Оператор, что у них все семантики на месте?
Спасибо.
С уважением,
Александр Лазарев
 
Здравствуйте!

Цитата
Александр Лазарев написал:
А чем отличаются функции mapGetRscSemanticObjectCodeList и mapAvailableSemanticCount+mapAvailableSemanticCode?Зачем их было делить, если можно сразу прочитать через классификатор?
У данных функций разные контексты использования:
- mapGetRscSemanticObjectCodeList предназначена непосредственно для получения информации из классификатора;
- mapAvailableSemanticCount и mapAvailableSemanticCode используются, когда Вы уже непосредственно изменяете семантику конкретного объекта на карте: по его идентификатору они выдают информацию о том, какие еще семантики можно назначить объекту за вычетом тех, которые Вы уже ему назначили.

Цитата
Александр Лазарев написал:
Средствами SDK какие методы следует вызвать, чтобы установить такой режим отображения?
Для того, чтобы включить отображение точек метрики объектов на карте, используется функция mapSetNodeView (mapapi.h):
Код
// Установить отображение узлов на карте
// 0 - не отображать, 1 - отображать

_MAPIMP void _MAPAPI mapSetNodeView(HMAP hMap, long int mode);
Цитата
Александр Лазарев написал:
У нас на работе нет Windows в принципе, но в ГИС Оператор классификатор видится мне нормальным.
В ГИС Оператор также можно включить отображение узлов с помощью меню: "Вид"->"Вид карты"->"Нормальный с узлами".
Цитата
Александр Лазарев написал:
На выходе тоже самое, что и от mapAvailableSemanticList:  mapGetRscSemanticObjectCodeList 133148281143305 mapGetRscSemanticObjectCodeList 133156871108890 mapGetRscSemanticObjectCodeList 133174050978076 mapGetRscSemanticObjectCodeList 472446402668 mapGetRscSemanticObjectCodeList 48546015358089 mapGetRscSemanticObjectCodeList 20101 Хотя количество семантик вернул правильное - 11, для объекта "Подпись 1.5 син"
Код получения семантик для объекта выглядит корректным. Подскажите, пожалуйста, на каком классификаторе воспроизводится данная проблема и для какого объекта?
Пример корректного кода для классификатора, входящего в состав ГИС Конструктор:
Код
HRSC rscHandle = mapOpenRsc("/usr/share/gisdesigner/examples/Data/RSC/operator.rsc");
assert(rscHandle);

long objectIncode = mapGetRscObjectKeyIncode(rscHandle, "312625000214");
assert(objectIncode);

long semanticCount = mapGetRscSemanticObjectCount(rscHandle, objectIncode, ALL_SEMANTIC);

long semanticCodes[1024];
memset(semanticCodes, 0, sizeof(semanticCodes));
long isListFormed = mapGetRscSemanticObjectCodeList(rscHandle, objectIncode, semanticCodes, sizeof(semanticCodes)/sizeof(long));
assert(isListFormed);

for (int semanticNumber = 0; semanticNumber < semanticCount; semanticNumber++)
  std::cout << "semantic code: " << semanticCodes[semanticNumber] << std::endl;
 
Цитата
Александр Савелов написал:
Здравствуйте!

Цитата
 Александр Лазарев  написал:
На выходе тоже самое, что и от mapAvailableSemanticList:  mapGetRscSemanticObjectCodeList 133148281143305 mapGetRscSemanticObjectCodeList 133156871108890 mapGetRscSemanticObjectCodeList 133174050978076 mapGetRscSemanticObjectCodeList 472446402668 mapGetRscSemanticObjectCodeList 48546015358089 mapGetRscSemanticObjectCodeList 20101 Хотя количество семантик вернул правильное - 11, для объекта "Подпись 1.5 син"
Код получения семантик для объекта выглядит корректным. Подскажите, пожалуйста, на каком классификаторе воспроизводится данная проблема и для какого объекта?
Пример корректного кода для классификатора, входящего в состав ГИС Конструктор:
Код
 HRSC rscHandle = mapOpenRsc("/usr/share/gisdesigner/examples/Data/RSC/operator.rsc");
assert(rscHandle);

long objectIncode = mapGetRscObjectKeyIncode(rscHandle, "312625000214");
assert(objectIncode);

long semanticCount = mapGetRscSemanticObjectCount(rscHandle, objectIncode, ALL_SEMANTIC);

long semanticCodes[1024];
memset(semanticCodes, 0, sizeof(semanticCodes));
long isListFormed = mapGetRscSemanticObjectCodeList(rscHandle, objectIncode, semanticCodes, sizeof(semanticCodes)/sizeof(long));
assert(isListFormed);

for (int semanticNumber = 0; semanticNumber < semanticCount; semanticNumber++)
  std::cout << "semantic code: " << semanticCodes[semanticNumber] << std::endl; 
Доброго времени суток.
Взял для одинаковости классификатор operator.rsc из состава предложенного ГИС Оператор.
Объект: "Подпись 1.5 син."
Код
long incode = mapGetRscObjectCodeByName( hRsc, codec->fromUnicode( newObjectNameFromFilter).data());
incode  = 23
Код
long semanticCount = mapGetRscSemanticObjectCount( hRsc, incode, ALL_SEMANTIC);
semanticCount = 14
Код
long codesCount = mapGetRscSemanticObjectCodeList( hRsc, incode, codeBuffer, bufCount);

                hRsc   53470752   HRSC
      newObjectNameFromFilter   "Подпись 1.5 син."   QString
      codeBuffer   @0x7fffffffb3a0   long [1024]
         [0]   133148281143305   long
         [1]   133156871108890   long
         [2]   133174050978076   long
         [3]   472446402668   long
         [4]   48546015358089   long
         [5]   133199820770949   long
         [6]   140866337407007   long
         [7]   0   long
         [8]   0   long
         [9]   0   long
   
      incode   23   long
      semanticCount   14   long
      codesCount   14   long

Коды безобразные... 7шт.
 
Проверил на крайней версии ГИС Конструктор для Astra Linux SE, скачанной с нашего сайта.
Классификатор взял из крайней версии ГИС Оператор для Astra Linux SE.

Вот результат получения списка семантик для объекта "Подпись 1.5 син." (ключ: "713230040", внутренний код классификатора: 23).
Поведение корректное (вывод текста программы, которую обсуждали ранее, привожу ниже).

Уточните, пожалуйста, какую версию ГИС Конструктор Вы используете.

Код
semantic count:  28 

semantic code: 9

semantic code: 32801

semantic code: 32802

semantic code: 32803

semantic code: 32804

semantic code: 32805

semantic code: 32810

semantic code: 32811

semantic code: 32850

semantic code: 32851

semantic code: 32852

semantic code: 32853

semantic code: 32854

semantic code: 32855

semantic code: 32809

semantic code: 31001

semantic code: 31002

semantic code: 31003

semantic code: 31004

semantic code: 31007

semantic code: 108

semantic code: 110

semantic code: 32812

semantic code: 11401

semantic code: 11303

semantic code: 20101

semantic code: 32856

semantic code: 31013

Изменено: Александр Савелов - 19.07.2018 13:46:56 (Форматирование вывода программы)
Страницы: Пред. 1 2 3 След.
Читают тему (гостей: 1)



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

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