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

Проблемы при использовании wmsapi.

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: Пред. 1 2
RSS
Проблемы при использовании wmsapi.
 
Цитата
Сергей Карунас пишет:
Решили проблему с масштабированием, но обнаружилось падение при перемещении карты, загруженной с геопортала.

Ситуация следующая: карта в нашем приложении двигается мышкой при нажатом колесе. То есть слот по пермещению карты законекчен на сигнал SignalMouseMove от QDMapView. В слоте положение карты меняется через функцию QDMapView->SetMapLeftTop.

Когда открыта локальная карта, проблем нет. Но после открытия карты с геопортала (http://gisserver.info/GISWebServiceSE/service.php) приходится двигать карту очень плавно, иначе происходит SIGSEGV с таким стек-трейсом:



0 TWMSBaseList::GetImageWMTS wmsclas.cpp 1602 0x7fffbf55f383

1 TWMSBaseList::GetImage wmsclas.cpp 2098 0x7fffbf5605a3

2 wmsGetImage wmsapi.cpp 296 0x7fffbf559589

3 TMapWMS::GetImage(unsigned long, _RECT&, DFRAME&, DFRAME&, int, double, long, int, void*) /usr/lib/libqdmapacces.so 0x7ffff765b6ca

4 WMSCHAIN::GetImage(_RECT&, DFRAME&, DFRAME&, int, double, long, int, void*) /usr/lib/libqdmapacces.so 0x7ffff765bc2e

5 TMapControl::ShowWMS(WMSCHAIN&, DFRAME&, int, DIBCONTEXT*) /usr/lib/libqdmapacces.so 0x7ffff765d4b6

6 TMapControl::ShowWMS(int, DIBCONTEXT*) /usr/lib/libqdmapacces.so 0x7ffff765e336

7 TMapControl::ShowWMSPlace(int, DIBCONTEXT*) /usr/lib/libqdmapacces.so 0x7ffff765e48c

8 TMapControl::ShowData() /usr/lib/libqdmapacces.so 0x7ffff74b8a84

9 TMapPaint::PaintToDib(unsigned long, int, _RECT&, TObjectInfo*, int, int, TMapSelect*) /usr/lib/libqdmapacces.so 0x7ffff74fdae0

10 TMapPaint::Paint(unsigned long, int, _RECT&) /usr/lib/libqdmapacces.so 0x7ffff74fe411

11 TMapAccess::Paint95(unsigned long, int, _RECT&, int) /usr/lib/libqdmapacces.so 0x7ffff748bfe2

12 mapPaint95Ex /usr/lib/libqdmapacces.so 0x7ffff74d8b56

13 mapPaint95 /usr/lib/libqdmapacces.so 0x7ffff74d8b74

14 TMapScreen::DrawMap(int, long, _RECT*, tagPOINT*, int) /usr/lib/libqdmapacces.so 0x7ffff74db0c1

15 mapDrawImageMap /usr/lib/libqdmapacces.so 0x7ffff74dccd2

16 QDMapViewWindow::SetMapLeftTop(int, int) /usr/lib/libmapcomponents.so 0x7ffff7172cdb

17 MainWidget::onMapViewMouseMoved mainwidget.cpp 332 0x40fde4

18 MainWidget::qt_static_metacall moc_mainwidget.cpp 114 0x42cd48

19 QObject::event(QEvent*) /usr/lib/x86_64-linux-gnu/libQtCore.so.4 0x7ffff5f1ec1e

20 QWidget::event(QEvent*) /usr/lib/x86_64-linux-gnu/libQtGui.so.4 0x7ffff648755b

... <More>



Видимо, при быстром движении карты что-то не успевает отработать, а уже приходит следующий запрос. Или там у вас синхронные вызовы используются? В общем, подскажите, можно ли как то исправить эту проблему. Возможно, есть ещё способ перемещения карты?

Там используются синхронные вызовы. Ошибку поправим. Перемещать возможно с помощью скроллбаров.
Изменено: Владимир Железняков - 12.12.2014 09:18:17
 
Цитата
Сергей Карунас пишет:
Ещё хотелось проконсультироваться по вопросу использования функции mapEditWms(TASKPARMEX *parm, char* wmsstring, int size, int flag), а точнее по заполнению структуры TASKPARMEX *parm. Не удалось понять, для чего она используется в этой функции, передавал и заполненную структуру и пустую (TASKPARMEX parm = {0};). Разницы в работе не заметил.



Надеялся что заполнение поля PathShell в этой структуре укажет, где брать файлы epsg.csg, epsg.csp, epsg.csu, wmslist.xml, но ничего не вышло.

В первую очередь как раз это и интересует:   как задать путь поиска этих файлов и путь, где хранить кэш при работе с геопорталами?  

Сейчас приложение всегда ищет файлы рядом с собой, там же создаётся каталог Temp для кэша. Это не всегда подходит...

Перед вызовом функций wms необходимо один раз установить рабочий каталог с помощью функции mapSetPathShell. Кэш устанавливается в файле wmslist.xml. Api функции пока нет, добавим. Установить можно его в поле
<Geoportal>  
 <Cache>
   <Path><![CDATA[C:\AMD\]]></Path>
 </Cache>
 
Цитата
Сергей Карунас пишет:
Решили проблему с масштабированием, но обнаружилось падение при перемещении карты, загруженной с геопортала.

Ситуация следующая: карта в нашем приложении двигается мышкой при нажатом колесе. То есть слот по пермещению карты законекчен на сигнал SignalMouseMove от QDMapView. В слоте положение карты меняется через функцию QDMapView->SetMapLeftTop.

Когда открыта локальная карта, проблем нет. Но после открытия карты с геопортала (http://gisserver.info/GISWebServiceSE/service.php) приходится двигать карту очень плавно, иначе происходит SIGSEGV с таким стек-трейсом:
...
Видимо, при быстром движении карты что-то не успевает отработать, а уже приходит следующий запрос. Или там у вас синхронные вызовы используются? В общем, подскажите, можно ли как то исправить эту проблему. Возможно, есть ещё способ перемещения карты?

Пришлите, пожалуйста, Ваш адрес электронной почты: на нее будет выслана тестовая версия ГИС Конструктор (с исправленной ошибкой), на которой Вы сможете проверить свой пример.
Изменено: Александр Савелов - 12.12.2014 12:23:08
 
Цитата
Александр Савелов пишет:
...

Пришлите, пожалуйста, Ваш адрес электронной почты: на нее будет выслана тестовая версия ГИС Конструктор (с исправленной ошибкой), на которой Вы сможете проверить свой пример.

Собрал проект с тестовой версией, падение при перемещении исчезло, но и карта перестала загружаться с портала.
Т.е. открываю карту Подольска, подгружаю к ней "Карта России (OSM)" с http://gisserver.info/GISWebServiceSE/service.php, вокруг Подольска всё серое. С предыдущей версией отрисовывалось нормально.

Ещё обнаружил, что если сначала загрузить карту с http://khm.google.com/kh/v=150&hl=ru, а потом с http://gisserver.info/GISWebServiceSE/service.php, то обе эти карты отрисовываются хорошо.
Изменено: Сергей Карунас - 18.12.2014 10:59:15
 
Цитата
Владимир Железняков пишет:

Перед вызовом функций wms необходимо один раз установить рабочий каталог с помощью функции mapSetPathShell. Кэш устанавливается в файле wmslist.xml. Api функции пока нет, добавим. Установить можно его в поле

<Geoportal>  

 <Cache>

   <Path><![CDATA[C:\AMD\]]></Path>

 </Cache>

Попробовал использовать mapSetPathShell, каталог устанавливается, но после каждого открытия карты
(mapView->SetMapFileName; mapView->SetMapActive(TRUE); mapView->SetMapVisible(TRUE);) опять сбрасывается к каталогу, из которого запущено приложение. По крайней мере, mapGetPathShell возвращает именно его.
Такое поведение и было задумано? То есть, директорию приложения надо задавать после каждого открытия карты?
Установка пути для кэша через wmslist.xml тоже не заработала, кэш в итоге хранится в директории приложения, но это не проблема для нас, такое поведение вполне устраивает на данный момент.
 
Цитата
Сергей Карунас пишет:
Попробовал использовать mapSetPathShell, каталог устанавливается, но после каждого открытия карты
(mapView->SetMapFileName; mapView->SetMapActive(TRUE); mapView->SetMapVisible(TRUE)smile;) опять сбрасывается к каталогу, из которого запущено приложение. По крайней мере, mapGetPathShell возвращает именно его.
Такое поведение и было задумано? То есть, директорию приложения надо задавать после каждого открытия карты?

Согласно алгоритму программы после открытия карты в качестве рабочего каталога устанавливается текущий каталог приложения. Поэтому, если Вы устанавливаете собственный рабочий каталог, то данную операцию нужно производить после каждого открытия карты.
 
Цитата
Собрал проект с тестовой версией, падение при перемещении исчезло, но и карта перестала загружаться с портала.
Т.е. открываю карту Подольска, подгружаю к ней "Карта России (OSM)" с http://gisserver.info/GISWebServiceSE/service.php, вокруг Подольска всё серое.
Исправленная версия ГИС Конструктор доступна по ссылке - http://gisinfo.ru/download_linux?id=56
 
Цитата
gislinux пишет:

Исправленная версия ГИС Конструктор доступна по ссылке - http://gisinfo.ru/download_linux?id=56

Спасибо. С этой версией всё отлично работает!

Единственный момент, касающийся установки пакета: после установки компонентов конструктора у файла maptype.h не стоят права на чтение для всех, приходится делать это вручную. Иначе ничего не собирается.
Изменено: Сергей Карунас - 24.12.2014 16:33:29
Страницы: Пред. 1 2
Читают тему (гостей: 1)



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

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