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

mapPaintByFrameToXImagePro

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
mapPaintByFrameToXImagePro
 
Здравствуйте !

Пытаюсь использовать фунцию mapPaintByFrameToXImagePro (ГИС Конструктор
для Qt Designer x64 версия 13 OC "Astra Linux SE" релиз Смоленск для
платформы x64).

Но эта функция всё время возвращает 0 (ошибка).

Что я не так делаю ?

Пример кода прикладываю.

Игорь Ясаков.

----------------------------------------------

const char * mapName;
long int result;

mapName = "/usr/share/gisdesigner/examples/Data/data/maps/mapz/500000.mapz";

HMAP mapHandle;

long int error;

mapHandle = mapOpenDataEx(mapName,GENERIC_READ, &error);

if (mapHandle == 0)

   {

       qDebug() << "Невозможно открыть карту\n" ;

       qDebug() << "Ошибка = " << error;

       return ;

   }

result=mapIsGeoSupported(mapHandle);

if (result==0) return;

double X1_grad,Y1_grad,X2_grad,Y2_grad;

double X1 = mapGetMapX1(mapHandle);

double Y1 = mapGetMapY1(mapHandle);

double X2 = mapGetMapX2(mapHandle);

double Y2 = mapGetMapY2(mapHandle);


mapPlaneToGeoWGS84(mapHandle, &X1, &Y1);

mapPlaneToGeoWGS84(mapHandle, &X2, &Y2);


X1_grad = qRadiansToDegrees(X1);

Y1_grad = qRadiansToDegrees(Y1);

X2_grad = qRadiansToDegrees(X2);

Y2_grad = qRadiansToDegrees(Y2);

int x,y;

DFRAME frame;

double MinTileLong, MaxTileLat, MaxTileLong,MinTileLat;

Coords_to_Tile (10,&x,&y,Y1_grad,X2_grad);

TileBounds (10,x,y,&MinTileLong,&MaxTileLat,&MaxTileLong,&MinTileLat);


frame.X1=qDegreesToRadians(MinTileLat);

frame.Y1=qDegreesToRadians(MinTileLong);

frame.X2=qDegreesToRadians(MaxTileLat);

frame.Y2=qDegreesToRadians(MaxTileLong);

double H=0;

mapGeoWGS84ToPlane3D(mapHandle, &frame.X1, &frame.Y1,&H);
mapGeoWGS84ToPlane3D(mapHandle, &frame.X2, &frame.Y2,&H);

HPAINT Hpaint=mapCreatePaintControl(mapHandle);

mapSetPaintControlProjection(Hpaint,4326);

XIMAGEDESC imagedesc;

long size = long(256 * 256 * 4);

char *imageBits = ::AllocateTheMemory(size);

memset(imageBits, 0x0, size);

imagedesc.Point = imageBits;

imagedesc.Width = imagedesc.Height = 256;

imagedesc.Depth = 32;

imagedesc.CellSize =  4;

imagedesc.RowSize = 256 * imagedesc.CellSize;

result=mapPaintByFrameToXImagePro
(mapHandle,&imagedesc,-2,&frame,256,256,1,0,Hpaint);
 
Уследить по коду за тем, какие значения frame передаюся в функцию, невозможно.
Попробуйте для начала какие-то осмысленные константы написать.
Оси X и Y - картографические. X - снизу вверх, Y - слева направо.
X1, Y1 - юго-западный угол прямоугольника.

Значение параметра erase (-2) тут не имеет смысла. Это значение нужно при последовательном выводе в один буфер,
начиная со второго вызова функции.
 
Брал конечно frame и X1,Y1,X2,Y2  и другие значения в пределах карты. Здесь беру тайл 10 уровня рядом с X2, Y1.

Пробовал давать на входе другую карту - результат тот же. Возвращает 0 (ошибка).
 
Информации для ответа не добавилось.
Страницы: 1
Читают тему (гостей: 1)



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

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