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

Добавление объекта в классификатор а потом на карту

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: Пред. 1 2
RSS
Добавление объекта в классификатор а потом на карту, создание нового объекта с добавлением его в классификатор и оттображением на карте
 
Приветствую!

Может выложить Ваш отредактированный классификатор Topo100t.rsc в доступное для скачивания место?

С уважением,
Матвеев П.В.
 
уже делаю
 
https://yadi.sk/d/itddLQyL3UoHRC
 
Приветствую!

ГИС Конструктор для Qt Designer x64 (версия 12.3.0), ОС Astra Linux

Знак создается и отображается нормально.
Код
#include <QString>
#include <QTextCodec>
#include <QDebug>
#include <QImage>

#include "qdmcmp.h"

#include "mapapi.h"
#include "sitapi.h"
#include "rscapi.h"
#include "mapcreat.h"
#include "maptype.h"

void saveMap(HMAP hmap, QString filename) {
    XIMAGEDESC desc;
    DFRAME frame;
    mapGetTotalBorder(hmap, &frame, PP_PICTURE);
    RECT rect;
    rect.left = frame.X1;
    rect.right = frame.X2;
    rect.top = frame.Y1;
    rect.bottom = frame.Y2;

    memset((void*) &desc, 0, sizeof(desc));
    desc.Width = rect.right - rect.left;
    desc.Height = rect.bottom - rect.top;
    desc.Depth = mapGetMapScreenDepth();
    desc.CellSize = desc.Depth / 8;
    desc.RowSize = desc.Width * desc.CellSize;
    desc.Point = (char*) malloc(desc.Height * desc.RowSize);

    mapPaintToXImage(hmap, &desc, 0,0, &rect);
    QImage im2((const uchar*) desc.Point, desc.Width,
               desc.Height, desc.RowSize,
               QImage::Format_RGB32);
    if (!im2.save("/tmp/" + filename, "PNG")) {
        qDebug() << "file save error";
    }
    free(desc.Point);
}

// тест рисования пользовательского объекта из классификатора
int main(int argc, char ** argv) {
   QString* siteName = new QString("/home/user/temp/testCreateCustomObject.sitx");
   QString* rscName = new QString("/home/user/temp/Topo100t.rsc");
   CREATESITEUN cs;
   memset((void*) &cs, 0, sizeof(cs));
   cs.Length = sizeof(CREATESITEUN);
   cs.EllipsoideKind = 9;
   cs.MapType = 16;

   HMAP hmap = mapCreateSiteUn((const WCHAR*) siteName->constData(),
         (const WCHAR*) rscName->constData(), &cs);
   mapSetViewType(hmap, 1);
   if (hmap != 0) {
      long int siteIndex = mapGetSiteCount(hmap);
      HOBJ hobj = mapCreateObject(hmap);
      if (hobj != 0) {
         //создадим объект
         if (mapDescribeObject(hobj, 1215) != 0) {
            double x = 500.;
            double y = 500.;
            mapAppendPointPlane(hobj, x, y, 0);
            if (mapCommitObject(hobj) != 0) {
               mapSetRealShowScale(hmap, 100000);
               saveMap(hmap, "1.png");
            } else {
               qDebug() << "mapCommitObject error";
            }
         } else {
            qDebug() << "mapDescribeObject error";
         }
         //освобождаем объект
         mapFreeObject(hobj);
      } else {
         qDebug() << "mapCreateObject error";
      }
      mapCloseMap(hmap);
   }

}

Для знака с внутренним кодом 1216 тоже все хорошо. Создание по внешнему коду тоже успешно работает. Даже функцию поворота на всякий случай вызывал (ну мало ли..) все работает нормально.

Проверить есть ли знак в классификаторе с указанным внешним кодом и локализацией можно при помощи: mapGetRscObjectsCount(mapGetRscIdent(hmap,hsite), 14100000, LOCAL_POINT)

С уважением,
Матвеев П.В.
 
Павел, спасибо огромное. Запутка была в в путях к файлу rsc. В панораме он редактирется как /usr/Panorama11/Data/Podolsk/Topo100t.rsc А файлы у меня открывались /usr/share/qt4/example/gisdisigner/Data/Podolsk/Topo100t.rsc.
Страницы: Пред. 1 2
Читают тему (гостей: 1)



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

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