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

Не работает поиск по области

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
Не работает поиск по области
 
Добрый день.
Используем ГИС Конструктор для Qt Designer x64 (версия 11.10.0), ОС Astra Linux.

На карте нанесено 2 объекта. Берем габариты карты и ищем все объекты. Результат поиска один объект.
Код для воспроизведения:
Код
#include <QString> 
#include <QDebug> 
#include <QImage> 
#include "mapapi.h" 
#include "sitapi.h" 
#include "rscapi.h" 
#include "mapcreat.h" 
#include "maptype.h" 

int main() { 

    qDebug() << "MapApi " << mapGetMapAccessVer sion();

    QString siteName("/tmp/searchTest.sitx");
    QString rscName("/usr/Operator11/operator.rsc"); 

    CREATESITEUN cs; 
    memset((void*) &cs, 0, sizeof(cs)); 
    cs.Length = sizeof(CREATESITEUN); 
    cs.EllipsoideKind = 9; 
    cs.MapType = 16; 

    HMAP hsite = mapCreateSiteUn((const WCHAR*) siteName.constData(), 
        (const WCHAR*) rscName.constData(), &cs);

    mapSetRealShowScale(hsite, mapScaleToRoundScaleEx(hsite,200000.));

    if (hsite !=0) { 
        double x = 6170046;
        double y = 7409328;

        HOBJ hobj = mapCreateSiteObject(hsite, hsite,     IDDOUBLE2, 0);

         if (mapRegisterObject(hobj, 2, 1) != 0) {
             int size = 3000;
             mapAppendPointPlane(hobj,x,y,0);
             mapAppendPointPlane(hobj,x - size,y,0);
             mapAppendPointPlane(hobj,x - size,y + size,0);
             mapAppendPointPlane(hobj,x, y + size,0);
             mapAppendPointPlane(hobj,x,y,0);
             mapCommitObject(hobj);
         } else {
             qDebug() << "No sign 1";
         }

         mapFreeObject(hobj);

         hobj = mapCreateSiteObject(hsite, hsite, IDDOUBLE2, 0);
         if (mapRegisterObject(hobj, 713230011 ,3) != 0) {
             QString text = "text";
             mapPutTextUn(hobj,(const WCHAR*)text.constData() , 0);
             mapAppendPointPlane(hobj,x + 3500,y + 3500,0);
             mapAppendPointPlane(hobj,x + 4000,y + 4000,0);
             mapCommitObject(hobj);
         } else {
             qDebug() << "No sign 2";
         }

        mapFreeObject(hobj);
        mapCloseData(hsite);

        hsite = mapOpenAnyData((const WCHAR*) siteName.constData()); 
        mapSetRealShowScale(hsite, mapScaleToRoundScaleEx(hsite,200000.));

        DFRAME frame; // габариты карты
        mapGetTotalBorder(hsite, &frame, PP_PLANE);

        HSELECT select = mapCreateSiteSelectContext(hsite, hsite);
        HOBJ result = mapCreateSiteObject(hsite, hsite,IDDOUBLE2, 0L);

        MAPDFRAME mframe;
        mframe = frame;
         long rc = mapWhatObjectBySelect(hsite,result, &mframe,select, WO_FIRST, PP_PLANE);
         qDebug() << mapObjectKey(result); // нашли первый знак

         if(rc) {
            rc =  mapWhatObjectBySelect(hsite,result, &mframe,select, WO_NEXT, PP_PLANE);

            // если раскомментировать то второй знак будет найден
            // rc =  mapWhatObjectBySelect(hsite,result, &mframe,select, WO_BACK, PP_PLANE);
            if(rc) {
                qDebug() << mapObjectKey(result); // нашли подпись
            } else {
                qDebug() << "no second sign";
            }
         }
        mapFreeObject(result);
        mapCloseData(hsite);
    } else { 
        qDebug() << "Wrong site"; 
    } 
} 
 
Внесли исправления в алгоритм поиска объектов. Скачать новую версию ГИС Конструктор можно по ссылке: http://gisinfo.ru/download_linux?id=56
 
Спасибо. Проверил. Работает.
Страницы: 1
Читают тему (гостей: 1)



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

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