Здравствуйте !
Пытаюсь использовать фунцию 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);
Пытаюсь использовать фунцию 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);