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

Павел Матвеев (Все сообщения пользователя)

Поиск  Пользователи  Правила  Войти
Форум » Пользователи » Павел Матвеев
Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 ... 44 45 46 47 48 49 50 51 52 53 54
Ошибка при получении изображения знака классификатора, Ошибка при получении изображения знака классификатора
 
При использовании библиотек из состава ГИС Конструктор для Qt Designer x64 (версия 11.7.0), ОС Astra Linux данная проблема тоже не проявляется
Ошибка при получении изображения знака классификатора, Ошибка при получении изображения знака классификатора
 
Приветствую!

При переходе на библиотеки из состава ГИС Конструктор для Qt Designer x64 (версия 11.8.0), ОС Astra Linux столкнулся с проблемой при получении изображений для ряда знаков классификатора

Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [libqdmapacces.so+0x3255b3] XVisualVector::ShowVectorMarkExtend(POLYDATAEX const*, char const*, float, int, VECTORMIX*)+0x99
C  [libqdmapacces.so+0x32540e] VectorMix(void*, POLYDATAEX const*, char const*, float)+0x8a
C  [libqdmapacces.so+0x10dcb8] imgPaintImageEx+0x120
C  [rscarmy.iml64+0xb3e3] imgPrepareImage(POLYDATAEX const*, int, char const*, IMGCONTEXT const*, int, FRAME*)+0x62
C  [rscarmy.iml64+0x27807] ComPointTrp(POLYDATAEX const*, IMGDRAW const*, IMGCONTEXT const*, int, FRAME*)+0x902
C  [rscarmy.iml64+0x2bd98] imlPaintExampleEx+0x1db3
C  [libqdmapacces.so+0x195d4c] llPaintExample(int, long, IMGDRAW const*, IMGCONTEXT const*, long, char const*)+0x8c
C  [libqdmapacces.so+0x25d0d1] CallExample(void*, char const*, float, int, long, char const*)+0x179
C  [libqdmapacces.so+0x1a5258] TMapPaint::PaintExampleObjectDib(unsigned long, _RECT&, int, char const*, POLYDATAEX*)+0xb2e
C  [libqdmapacces.so+0x1a4116] TMapPaint::PaintExampleObject(unsigned long, _RECT&, int, int, char const*, POLYDATAEX*)+0x76
C  [libqdmapacces.so+0x16795b] TMapAccess::PaintExampleObjectByFuncData(unsigned long, _RECT&, int, char const*, POLYDATAEX*, int, int*, int, int)+0x2fd
C  [libqdmapacces.so+0x1673b9] TMapAccess::PaintExampleObjectByFunc(unsigned long, _RECT&, int, char const*, int, int*, int, wchar_t const*, int, int, TMapRsc*, int, SEMANTIC*)+0x725
C  [libqdmapacces.so+0x166b5d] TMapAccess::PaintExampleObject(unsigned long, _RECT&, int, TMapRsc*, int, wchar_t const*, int, SEMANTIC*)+0x2d5
C  [libqdmapacces.so+0x2d5199] mapPaintExampleSiteObject+0x98

При использовании библиотек из состава ГИС Конструктор для Qt Designer x64 (версия 11.6.0), ОС Astra Linux данная проблема не проявлялась

С уважением,
Матвеев П.В.
Проблема с рисованием WMS\WMTS карты в XIMAGEDESC
 
Приветствую!

Проверил указанную версию. Проблема устранена.
Спасибо!

Метод mapPaintMapAndObjectToXImage удален, считать что окончательно или он вернется?

Версия Оператора с исправлениями доступна?

По поводу возвращения пустых картинок с web-сервиса при интенсивной работе, что-то можно сделать? или в какой-то другой форум писать?

С уважением,
Матвеев П.В.
Проблема с рисованием WMS\WMTS карты в XIMAGEDESC
 
Итоговый тайл (хотя это не тайл, раз мы говорим о WMS) получается неполный и изображение искажено.

Метод  mapPaintToXImage помещает результат выполнения в XIMAGEDESC. В данной структуре есть размеры картинки, и ряд других полей, которые я указываю и, соответственно установленным значениям, выделяю память под результат.
Например:
Width=256
Height=256
Depth=значение полученное при помощи метода mapGetMapScreenDepth (допустим 32)
CellSize=Depth/8 (при Depth 32 получается 4)
RowSize=Width*CellSize (1024)
соответственно, под результат необходимо height*RowSize байт (262144)

вызываю mapPaintToXImage...
как я уже неоднократно писал, при изучении запросов на WMS сервис с помощью wireshark,я вижу, что запрашивается картинка размерами меньше чем запрашиваемая у метода mapPaintToXImage
соответственно заполняя результат метод mapPaintToXImage записывает меньше байт чем я ожидаю (я ожидаю 262144). т.к. никаких дополнительных данных о том какого размера картинка запрошена и получена с WMS у меня нет, то при отображении картинка будет испорченая
Такую же искаженную картинку я наблюдаю и в Операторе, т.к. клиентская область размерами например 400x300, а картинка у WMS спрашивается 390x295 (числа условные).
Проблема с рисованием WMS\WMTS карты в XIMAGEDESC
 
Приветствую!
Вот как выглядит картинка:

http://www.picshare.ru/view/6081653/
Проблема с рисованием WMS\WMTS карты в XIMAGEDESC
 
Приветствую!

Проверил версию ГИС Конструктор (11.7.0)
1. Проблема с WMTS решилась, т.е. при масштабировании и отрисовке действительно запрашиваются тайлы с нужных уровней, а не только первого. при указании масштаба использовал значения получаемые при помощи MapScaleToRoundScaleEx
2. Проблема с WMS осталась, т.е. при запросе на отрисовку фрагмента WxH (например 256x256) у сервиса WMS функция отрисовки запрашивает картинку меньшего размера, соответственно изображение отображается неправильно. При некоторых масштабах и размерах окна запрашиваемый размер совпадает с указанным при вызове функции, соответственно изображение отображается правильно.
Проблема с рисованием WMS\WMTS карты в XIMAGEDESC
 
Приветствую!

Если подробнее...

Задача: Реализовать элемент управления для отображения карты. Для простоты будем считать карту открываемую первой (при помощи mapOpenAnyData картой-подложкой). к карте подложке добавляются Site-ы (пользовательские карты если я не ошибаюсь в терминологии) на которых рисуются значки, соответственно эти site скрываются, отображаются при необходимости, значки на них перемещаются и .т.п.

0. Здесь пока проблем нет.
0.1 В качестве карты-подложки используем локальную карту из файловой системы или карту открываемую с MapServer
0.2 При необходимости отображения фрагмента карты, который попадает в клиентскую область элемента управления, вызывается метод mapPaintToXImage, полученный результат отображается в соотв области элемента управления. Область задается верхним левым углом, шириной и высотой. в текущий момент left top в пикселях (то что возвращает planeToPicture())
0.3 все хорошо, все работает, site-ы добавляются соответствующими методами API, превью значков из классиикатора, с которым созданы пользовательские карты отображаются, значки создаются, метрики, семантики задаются, все как и должно быть.

1. WMTS в качестве основной карты
1.1 Прописал карту в wmslist.xml, установил путь к рабочей директории с этим файлом и другим необходимыми epsg*, *.rsc...
1.2 mapOpenAnyData открываем карту hmap!=0 все ок.
1.3 wireshark показывает запрос на сервер GetCapabilities.. service=WMTS.. version 1.0.0 все пока совпадает с запросами Оператора
1.5 wireshark показывает запрос на сервер GetTile нулевого уровня, картинка возвращается
1.6 mapPaintToXImage рисует тайл первого уровня, все как и ожидалось
1.7 пытаюсь изменить масштаб карты (т.е. вызываю методы MapApi установки мастшабов для hmap полученного при открытии карты) методов несколько, mapSetViewScale, mapSetRealShowScale передавал им то что возвращает MapScaleToRoundScaleEx, то что из MapScaleTableItem, значения scale denominator из TileMatrix соответствующей открываемой карте в wmslist.xml, или возвращаемой GetCapabilities
1.8 mapPaintToXImage продолжает усиленно рисовать тайл первого уровня, wireshark не показывает ни одного запроса на сервис.
1.9 пробовал рзличные TileMatrixSetы результат тот же.
1.10 Если такое возможно в случае если я промахиваюсь с масштабом, то как не промахиваться? Оператор отображает карту правильно, в status line выводит масштаб, который, вероятно, чему-то соответствует или расчитывается, но я так и не смог расчитать чему. При установке масштаба 1:1 в оператор он показывает базовый, но ведь он, вероятно, не соответствует масштабам в которых нарезана пирамида?

2. WMS Раз уж с WMTS не получилось...
2.1 Прописал карту в wmslist.xml, установил путь к рабочей директории с этим файлом и другим необходимыми epsg*, *.rsc...
2.2 mapOpenAnyData открываем карту hmap!=0 все ок.
2.3 wireshark показывает запрос на сервер GetCapabilities.. service=WTS.. все пока совпадает
2.4 Начинаем масштабировать, двигать карту, для отображения картинки используем все тот же mapPaintToXImage
* В примере, который я описывал ранее, я не имел в виду что каждый раз пытаюсь отрисовать картинку размером в mapGetPictureSize. Его результат 198x336 был для примера. Такая картинка вполне небольшая и в int влезают ее размеры.
2.5 При попытке отрисовать карту при помощи mapPaintToXImage наблюдаем, что в запросе на сервер (все тот же wireshark нам это показывает) размеры запрашиваемого изображения отличаются от того размера который я запросил при вызове mapPaintToXImage (для примера описанного выше, у метода mapPaintToXImage я попросил 198x336 , а на сервер ушел запрос картинки с размерами  182x320) как такое могло случиться? в чем я не прав?
2.6 открываем Оператор. открываем ту же карту, смотрим. Картинка в зависимости от размеров окна и масштаба карты, то нормальная, то "сдвинутая" в большей или меньшей степени (сдвинутая это означает, что каждый ряд пикселей смещен влево относительно своего нормального положения, т.е. первый ряд точек (если считать с 0) сдвинут на delta влево, второй на 2delta, третий на 3delta и т.п.

3. WMTS дубль №2
3.1 Реализовал получение картинок тайлов без использования MapApi.
3.2 Все хорошо.
3.3 Спустя какое-то время WMTS сервис начинает возвращать белые картинки (т.е. не SOCKETERROR (к этому уже вроде как уже привыкли)) а именно белые картинки
3.4 Все плохо
Данная проблема стабильно воспроизводится второй день, извесно об этом что-либо?
Проблема с рисованием WMS\WMTS карты в XIMAGEDESC
 
При отображении каждая строка пикселей смещается влево. т.е. прямоугольник отображается как параллелограмм. (это связано с тем что ширина картинки, которая получена меньше чем запрашиваемая(left top для вывода картинки 0,0))
Я читал в документации и форуме про масштабы тайлов, для определения допустимых значений использую MapScaleTableCount и MapScaleTableItem, корректно ли устанавливать масштабы возвращаемые данным методом или необходимо использовать MapScaleToRoundScaleEx?
Проблема с рисованием WMS\WMTS карты в XIMAGEDESC
 
В гис оператор карта отображается тоже со сдвигом, до тех пор пока скроллы не появятся, т.е. пока клиентская область меньше чем карта не станет.
Да, WMS рисует правильно, к нему претензий нет, а вот по пути до формирования запроса размеры где-то уменьшаются.
Координаты переводил и из пикселей в координаты карты и обратно, используя то, что в запросе к сервису передается (bbox), откуда такие цифры берутся непонятно. Самописный код по получению картинок с wms и их отрисовке работает, но задача стоит использовать функции отрисовки из mapapi.  
При открытии карты с wmts при помощи оператор, карта отображается нормально и при изменении масштаба я вижу запросы по получению тайлов, в отличии от случая описанного в посте, когда я вызываю отрисовку в картинку средствами mapapi. оттого и возник вопрос, как же мне указывать масштаб для hmap что бы не просто растягивался тайл первого уровня, а запросы на сервер выполнялись при отрисовке.
Проблема с рисованием WMS\WMTS карты в XIMAGEDESC
 
Приветствую.

Окружение:
1. AstraLinux SE
2. ГИС Конструктор для AstraLinux SE

Пытаюсь отрисовать карту открытую с портала (WMS)в XIMAGEDESC
1. Открыл карту при помощи mapOpenAnyData
2. Установил масштаб
3. Запрашиваю размеры картинки mapGetPictureSize результат: 198x336
4. Вызываю mapPaintToXImage (указываю размеры картинки, выделяю необходимое количество памяти)
5. wireshark показывает запрос на сервер с параметрами height=320 width=182 и bbox, который я не понял как вычислился.
6. рисую картинку - картинка отображается со сдвигом (что понятно, т.к. рисую исходя из ожидаемых размеров 198x336)
7. в браузере картинка по ссылке из wireshark нормальная, действительно с размерами 182x320, но не той области которую ожидал (казалось что вся карта должна быть, а рисуется только какой-то угол)
Как объяснить такое поведение и что с этим делать?

Пытаюсь отрисовать карту открытую с портала WMTS
Действия аналогичные, но после получения тайла первого уровня и масштабирования карты тайл увеличивается, но дальнейших обращений на сервер wireshark не показывает.
Может надо как-то особенным образом масштаб выставлять? или еще какой-нибудь метод мапапи дергать?

qdmapview не использую

исправления из topic6849 в какой сборке можно наблюдать?
крайняя версия operator падает при открытии карты с WMS\WMTS если ее часто двигать мышкой из стороны в сторону. возможно это проблема из topic6849?
Страницы: Пред. 1 ... 44 45 46 47 48 49 50 51 52 53 54



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

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