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

Русские буквы в QDMapSelect AddSemantic()

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
Русские буквы в QDMapSelect AddSemantic()
 
Ищу объекты по названию улицы и номеру дома AstraLinux SE 1.5, GisToolkit 12
Для улицы пытался получить char* из QString разными способами, и trUtf8, и toLocal8Bit, и toUtf8, все равно в char* получаем типа \234\201.
Суда по кодам буквы русские, но вот в какой кодировке?

Вот код последнего эксперимента, улицу игнорирует, дома ищет (24 c1, 24 к2 и т.д.), т.к. "24 *" в какой кодировке ни возьми, все будет одинаково правильно. Классификатор OSM.RSC.
Код
QDMapSelect * qselect = ui->vMap->VarViewSelect;
if (qselect==NULL) return;
qselect->Clear();

char *str=ui->Street->text().toUtf8().data();
qselect->AddSemantic(20022,str,CMEQUAL);
qselect->AddSemantic(20028,trUtf8("24 *").toLocal8Bit().data(),CMEQUAL);

Вообще int AddSemantic(int Code, char *value, int condition) в какой кодировке требует передавать условие поиска?
Изменено: Валерий Парусов - 18.06.2018 21:37:16
 
Разобрался. Надо передавать названия в кодировке KOI8-R. Вот так ищет улица + дом ("Менжинского 5")
Код
QTextCodec *codec=QTextCodec::codecForName("KOI8-R");
 QDMapSelect * qselect = ui->MapFind->VarMapSelect;
if (qselect==NULL) return;
qselect->Clear();

//Поиск всех совпадений семантик
HSELECT sel=qselect->GetHSelect(0);
mapSelectSemanticLink(sel,CMAND);

char *str=codec->fromUnicode(ui->Street->text()).data();// В поле задается "*Менжинского"
qselect->AddSemantic(20022,str,CMEQUAL);//улица
qselect->AddSemantic(20028,trUtf8("5").toLocal8Bit().data(),CMEQUAL);//дом
 
Я у себя использую следующие две функции:
Цитата
Код
QString gis::common::parseStringFromKOI8_R(const char* s)
{
    return QTextCodec::codecForName("KOI8-R")->toUnicode(s);
}
QByteArray gis::common::convertStringToKOI8_R(const QString &s)
{
    return QTextCodec::codecForName("KOI8-R")->fromUnicode(s);
}
Пример:
Цитата
Код
bool MapProjectAccess::appendRswLayer(const QFileInfo &file)
{
    ....
    QByteArray koi8r =
            gis::common::convertStringToKOI8_R(file.absoluteFilePath());

    long rc = mapAppendDataEx(m_main->descriptor(),
                              koi8r.constData(),
                              GENERIC_READ,
                              0);
    ...
}
Используя QByteArray мы избегаем утечки памяти.



Другой пример:
Цитата
Код
QString gis::core::RscInfo::getName() const
{
    return gis::common::parseStringFromKOI8_R(m_info.Name);
}
Где m_info это:
Цитата
Код
// СТРУКТУРА ДЛЯ СОЗДАНИЯ КЛАССИФИКАТОРА
typedef struct RSCCREATE
{
  char Name[32]; // Название классификатора
  char Type[32]; // Тип классификатора
  char Code[8];  // Код классификатора
  int  Scale;    // Знаменатель масштаба
  int  Language; // Язык (MAPAPILANGUAGE)
}
  RSCCREATE;
Страницы: 1
Читают тему (гостей: 1)



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

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