Во время тестирования нашего программного продукта обнаружили, что на некоторых картах 2 запуска функции mapPaintToXImage в рамках разных процессов с одними и теми же параметрами дают разные результаты.
Добрый день уважаемые форумчане. Столкнулся с такой проблемой. Мы используем функцию для генерации тайлов - mapPaitToDib Примерно так:
Код
// выделение памяти под изображение
long size = newW * newH * 4;
char* lpImage = new char[size];
memset(lpImage, 0xff, size);
// заполняются информационные поля
BITMAPINFOHEADER lpDibInfo;
lpDibInfo.biSize = sizeof(BITMAPINFOHEADER);
lpDibInfo.biWidth = newW;
lpDibInfo.biHeight = newH;
lpDibInfo.biPlanes = 1;
lpDibInfo.biBitCount = (unsigned short)(8 * 4);
lpDibInfo.biCompression = BI_RGB;
lpDibInfo.biSizeImage = size;
lpDibInfo.biXPelsPerMeter = 0;
lpDibInfo.biYPelsPerMeter = 0;
lpDibInfo.biClrUsed = 256;
lpDibInfo.biClrImportant = 0;
char *lpBits = lpImage;
wrapper->mapPaintToDib(hMap, &lpDibInfo, lpBits, &rect);
// переворачиваем изображение
// (в MAPAPI карты отрисовываются кверх ногами поэтому
// их следует переворачивать)
char *string = (char*) AllocateTheMemory(newW * 4);
for (int i = 0; i < newH / 2; i++)
{
char *pointE;
char *pointB;
pointE = lpBits + (newH - i - 1) * newW * 4;
pointB = lpBits + i * newW * 4;
memcpy(string, pointB, newW * 4);
memcpy(pointB, pointE, newW * 4);
memcpy(pointE, string, newW * 4);
}
FreeTheMemory(string);
//создаем графическую переменную и записываем туда карту
QImage* img = new QImage((uchar *)lpBits, newW, newH, QImage::Format_RGB32);
int mSecs = t.elapsed();
qDebug() << "Image created in" << mSecs << "mSecs";
return img;
Ранее использовались библиотеки версии 11.0 и проблем никаких не было. Картинка размера 800:800 формировалась порядка 100-200мс. При переходе на версию 11.12 - таже самая картинка, того же размера стала формироваться порядка 2-3сек!!!!
1. В чем может быть причина? 2. Может мы используем устаревшую функцию или не так ее используем? 3. Какой метод формирования изображения под win еще можно использовать, что бы работало быстрее?
Анастасия пишет: Здравствуйте! Открыли карту RU_MOW.sxf, скаченную с нашего сайта, в последней версии ГИС Карта 2011. Координаты центра Москвы в WGS 84:
55.44.59
37.37.28
Да. Действительно в ГИС Карта 2011 Версия 11.12 этой ошибки нет. Проявляется на ГИС Карта 2011 Версия 11.11.
Добрый день уважаемые разработчики. Столкнулся с такой проблемой. Беру ГИС Карта 2011 (под windows, это важно!!!), открываю карту RU_MOW.sxf благополучно скаченную с офф-сайта. В качестве классификатора использую OSM.rsc c сайта Панорама. Карта благополучно преобразуется в sit формат.
1. Далее навожу мышкой на центр москвы и смотрю координаты, вижу: 55.55.42 37.37.35. Это же совсем не центр, а скорее самый север Москвы!?!?!?!
2. Далее смотрю туже карту (sxf) под linux (открытую при помощи gistoolkit) и вуаля, там координаты: 55.44.59 37.37.28 Далее проверяю все по яндексу, там точка совпадает с координатами под linux. В качестве теста запустил тот же самый код (подготовленный в пункте 2) под linux. И вижу, что координаты такие же, как в пункте 1.
Поясню задачу. Мне надо отображать маршрута движения автотранспорта на карте панорама и по этому погрешность в 20 метров ощутима, а тем более в 20 КМ!!!!
Подскажите, почему на разных ОС, я получаю различные карты? Может я пропускаю какой-то шаг?
gislinux пишет: Опечатка - конвертирование . Прошу проверить конвертирование данных карт через пример myfirst, пример должен быть собран согласно README для FREE-версии.
Извините за глупый вопрос, что за пример myfirst? Вы имеете в виду собственный контрольный пример?
gislinux пишет: Программа, в которой вызывает функцию - безключевая? Должна быть обязательно. Пожалуйста, проверьте консервирование через компонент QDMapConverter, допустим примера myfirst
Не очень понял, что Вы имеете в виду. Что такое консервирование?
Последний параметр - "Параметр handle содержит идентификатор окна, которому будут посылаться сообщения о ходе процесса с кодом 0х585". А если мне окно не требуется, да и нету у меня его? Нужно просто сконвертировать. Да и потом, под win работает же.
Добрый день уважаемые разработчики. Столкнулся с проблемой конвертации карт. Имеются 2 файла скаченные с Вашего сайта - ru-kk.sxf и osm.rsc. Подаю их напрямую на вход LoadSxfToMap("ru-kk.sxf", "ru-kk.sit", "osm.rsc", NUL); В результате получаю "ШИШ" = 0. Запускаю на AstraLinux 1.3 (ГИС Конструктор для Qt Designer Free версия 11). Странно то, что в windows тот же самый код работает.
Может нужно сделать некоторые предварительные операции, перед тем, как вызывать LoadSxfToMap в linux?
Александр Кружков пишет: Вероятно под словом "стиль" подразумевается и сглаживание шрифта, который находится под иконками или на кнопках. Чтобы обычным пользователям (не программистам) было понятнее.
меня смущают не "стили", а "при отображении кнопок и окон". Конечно можно догадаться, что в этот параметр входит параметр сглаживания шрифта, но с БОЛЬШООООООЙ натяжкой!
Все заработало. Все участникам обсуждения спасибо! Как ни странно дело было в параметре оптимизации: "использования стилей при отображении кнопок и окон". Только не понятно, как он может влиять вывод текста средствами mapapi ?!?!?!?!?!