У меня лицензионная версия ГИС Конструктора для Qt Designer x64 версия,
GetMapAccessVersion выдает 0x133ED5B.
При использовании mapSetFrameTree почему-то исчезает изображение,
а вот если закомментировать вызов mapSetFrameTree в коде приведенном ниже,
все работает правильно. При чем это происходит только для определенной карты (могу выслать приватным email),
для остальных карт вроде работает, хотя конечно я не много карт проверял.
GetMapAccessVersion выдает 0x133ED5B.
При использовании mapSetFrameTree почему-то исчезает изображение,
а вот если закомментировать вызов mapSetFrameTree в коде приведенном ниже,
все работает правильно. При чем это происходит только для определенной карты (могу выслать приватным email),
для остальных карт вроде работает, хотя конечно я не много карт проверял.
Код |
---|
#include <QApplication> #include <QImage> #include <cassert> #include <cmath> #include <cstdint> #include <mapapi.h> #include <qdmcmp.h> using Pixel = uint32_t; int main(int argc, char *argv[]) { QApplication app(argc, argv); QDMapView forProtection; mapMessageEnable(1); //mapSetFrameTree(1); mapSetMaxScreenImageSize(5000, 4000); mapSetScreenSizePro(std::sqrt(std::pow(527., 2) + std::pow(296., 2))); mapSetScreenPrecisionEx(3840 / 527. * 1000., 2160. / 296. * 1000.); qInfo("map access version %lX", GetMapAccessVersion()); long errcode = 0; HMAP hmap = mapOpenAnyData(QString::fromUtf8(argv[1]).utf16(), GENERIC_READ, &errcode); assert(hmap != 0); long int img_center_x = 0, img_center_y = 0; mapSetViewScale(hmap, &img_center_x, &img_center_y, 1000000); QImage img(QSize(4608, 3072), QImage::Format_RGB32); double x = (55. + 44. / 60.) / 180. * 3.14; double y = (37. + 38. / 60.) / 180. * 3.14; double h = 0; mapGeoWGS84ToGeo3D(hmap, &x, &y, &h); mapGeoToPlane(hmap, &x, &y); mapPlaneToPicture(hmap, &x, &y); int left = static_cast<int>(std::round(x)); int top = static_cast<int>(std::round(y)); XIMAGEDESC image_desc{reinterpret_cast<char *>(img.bits()), img.width(), img.height(), sizeof(Pixel) * 8, sizeof(Pixel), img.width() * sizeof(Pixel)}; RECT all_rect{left, top, left + img.width(), top + img.height()}; auto ret = mapPaintToXImage(hmap, &image_desc, 0, 0, &all_rect); assert(ret != 0); bool save_res = img.save("/tmp/res.png"); assert(save_res); } |