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

Владимир Железняков (Все сообщения пользователя)

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

Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 80 След.
Асинхронная работа с mapPortalMenu
 
Полностью избавиться от проверки соединения не получиться.
Для ускорения можно удалить адреса Url2 и Url3.
Если вы выставите Url1 в localhost, то он будет считать, что интернет есть. В этом случае, если тайл будет не найден то к недостающим данным будут посылаться запросы GetTile.
Мы можем добавить свойство в файл настроек и апи функцию, чтобы для всех геопорталов данные брались только из кэша без посылки каких либо запросов.
Также вы можете сохранить кэш в базу данных mbtiles или bir, или geopackage  и просто работать с данными как с локальными.
В данный момент wmsSetUpdateCashTime влияет только на периодичность перезапроса векторных тайлов. Поэтому на тайлы в виде картинок данный параметр не оказывает воздействие.
Асинхронная работа с mapPortalMenu
 
1) Функция не сообщает, что было изменено. Для работы необходимо хранить список слоёв. Также полный список слоёв, добавленный функцией mapPortalMenu можно запросить по HMAP.
2) Функции wmsapi.h более высокого уровня. Предпочтительнее использовать их. Но в  wmsaccapi.h есть функции, которые не дублируются в wmsapi.h. Если использование функций из wmsaccapi.h происходит впервые необходимо перед первым использованием проинициализировать библиотеку, вызвав функцию wmsInitWMSLibrary.
3) Ф-ция mapSetTimeout - время ожидания ответа от сервера по истечении указанных миллисекунд. Это не общее время рисования. Это время выполнения отдельного запроса к серверу геопорталов. Например, если область отрисовки содержит несколько тайлов, то это время запроса каждого тайла в отдельности.
4) Дополнительные настройки работы с гепорталами возможно произвести в файле настроек wmslist_ru.xml. Обратите внимание на параметры:
<!--Повторная загрузка тайлов, если сервер не дал ответ на запрос-->
<ReloadBadTile>1</ReloadBadTile>
<!--Количество повторных итераций-->
<ReloadBadTileCount>3</ReloadBadTileCount>
<!--Если параметр выставлен в 1, то успехом при загрузке области будет считаться только все загруженные тайлы на область-->
<SuccesOnlyIfAllTilesLoad>1</SuccesOnlyIfAllTilesLoad>
<!--Максимальное время ожидания соединения с сервером в миллисекундах-->
<ConnectTimeout>10000</ConnectTimeout>
<!--Максимальное время ожидания ответа в миллисекундах-->
<ReadTimeout>5000</ReadTimeout>
При данных параметрах рисование будет действовать следующим образом. Будет произведена попытка соединения с сервером в течении 10с. Если попытка удачна, то на загрузку каждого тайла будет потрачено не более 5с. Успехом будет считаться, если удалось загрузить с сервера все тайлы. Если тайл не получен при запросе, то будет осуществлено еще на более 3 попыток на загрузку каждого неудавшегося тайла. Если была ошибка при загрузка тайлов то в HPAINT выставиться ошибка, несмотря на то, что рисование других данных было успешно. Запросить была ли ошибка при рисовании можно функцией mapGetPaintErrorCode.
Также понять причину отказа некоторых функций возможно сформировав лог работы, с помощью mapOpenDiagnostics. После её вызова все данные будут протоколироваться, в том числе и все запросы к геопорталам.
Изменено: Владимир Железняков - 26.05.2023 17:31:21
Асинхронная работа с mapPortalMenu
 
Нельзя асинхронно производить отрисовку карту с одним и тем же HMAP, если работает функция mapPortalMenu, так как может измениться состав данных.
Если вам нужна асинхронная отрисовка, то Вы можете в функции асинхронного потока запросить список открытых данных геопорталов, открыть их заново, сформировав свой  HMAP, и отрисовку делать уже по своему локальному HMAP и HPAINT.
Асинхронная работа с mapPortalMenu
 
Добрый день. При выборе геопортала из списка функция посылает сообщение об изменении состава данных MT_CHANGEDATA (данное описание добавим в функцию (пример посылки::SendMessage(Parm->DocHandle, MT_CHANGEDATA, 0, 0)).
При изменении списка данных нельзя производить отрисовку - поэтому и происходит вылет.
Изменено: Владимир Железняков - 25.05.2023 16:47:35
Доработка кода, работающего с bir, для работы с картами mbtiles
 
Добрый день!
При подключении пирамид тайлов mbtiles они добавляются в список геопорталов. С ними можно работать, как с обычными локальными файлами, например открыть функцией mapOpenAnyData. Использование mapPaintWMS необязательно. Для отрисовки можете воспользоваться mapPaintAndSelectToXImage.
Доработка кода, работающего с bir, для работы с картами mbtiles
 
Добрый день!
В стандарте mbtiles это не описано.
Задание каталога для кеша WMS-тайлов
 
Функция mapSetCachePathUn устанавливает путь к кэшу ГИС Сервера и если путь к кэшу wms не был установлен то и к нему.
Проблему с созданием директории и разделителем для  wmsSetCachePath поправим.
Задание каталога для кеша WMS-тайлов
 
Да я ошибся, необходимо вызвать wmsInitWMSLibrary. Ей необходимо указать путь до библиотек ядра libqdwmsacces.so, там же должен находится и файл настроек wmslist_ru.xml.
Задание каталога для кеша WMS-тайлов
 
[QUOTE]Олег Темеров написал:
Добрый день. Прошу разъяснить порядок работы с функцией wmsSetCachePath.

К документу карты HMAP подключён геопортал Яндекс.Спутник, данные с WMS отображаются корректно. Перед открытием документа вызывается функция wmsSetCachePath с различными вариантами ("/var/cache/PanoramaCache", "/tmp/PanoramaCache2", "/home/user/PanoramaCache", все каталоги существуют и для них настроен доступ) нестандартного расположения локального кеша тайлов. Во всех случаях установка каталога игнорируется и создаётся каталог кеша по стандартному пути - "/tmp/Panorama.Cache/YandexSat/EPSG_3395".

При замене вызова wmsSetCachePath на mapSetCachePathUn (установка папки кеша для всего документа) с параметром "/tmp/PanoramaCache2" создаются два каталога - непосредственно "/tmp/PanoramaCache2" (пустой) и "/tmp/ PanoramaCache2YandexSat /EPSG_3395" с кешем WMS-тайлов. То есть ГИС Панорама не добавляет разделитель путей "/" при объединении строк "/tmp/PanoramaCache2" и "YandexSat/EPSG_3395" для формирования пути каталога WMS-кеша.

Вызов функции wmsSetCachePath(QString("/tmp/PanoramaCache2").utf16())  возвращает 1, то есть успех, но последующий вызов wmsGetCachePath  возвращает "/tmp/Panorama.Cache/", то есть стандартный каталог.

Если вызвать функции: [CODE] mapSetCachePathUn(QString("/tmp/PanoramaCache2/").utf16());
wmsSetCachePath(QString("/tmp/PanoramaCache2/WMS/").utf16()); [/CODE] То обе они вернут 1, но wmsGetCachePath вернёт "/tmp/PanoramaCache2/", то есть путь установленный функцией
mapSetCachePathUn, а не msSetCachePath.

Проверка проводилась на последней версии ГИС Конструктор для Qt Designer для Ubuntu 20.04.


В связи с этим возникает три вопроса:
1) Почему не работает функция wmsSetCachePath хотя возвращает 1? Она является устаревшей как и функция wmsGetCachePath? То есть надо пользоваться только функциями mapSetCachePathUn и mapGetCachePathUn?
2) Программист должен самостоятельно следить за тем, чтобы строка каталога кеша, передаваемая в функцию mapSetCachePathUn, оканчивалась разделителем путей, то есть "/"?
[/QUOTE]

Добрый день!
1) Для использования функций библиотеки wmsacces предварительно необходимо проинициализировать библиотеки, вызвав функцию  wmsInitLibrary, поэтому функция wmsSetCachePath может некорректно работать.
2) Проблему с анализом разделителя поправим.
Получение границ отдельного открытого тайла
 
Запросить габариты можно функциями mapGetWMSPlaneFrame/mapGetWMSGeoFrame
Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 80 След.



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

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