Сергей Карунас пишет: Решили проблему с масштабированием, но обнаружилось падение при перемещении карты, загруженной с геопортала.
Ситуация следующая: карта в нашем приложении двигается мышкой при нажатом колесе. То есть слот по пермещению карты законекчен на сигнал SignalMouseMove от QDMapView. В слоте положение карты меняется через функцию QDMapView->SetMapLeftTop.
Когда открыта локальная карта, проблем нет. Но после открытия карты с геопортала (http://gisserver.info/GISWebServiceSE/service.php) приходится двигать карту очень плавно, иначе происходит SIGSEGV с таким стек-трейсом:
Видимо, при быстром движении карты что-то не успевает отработать, а уже приходит следующий запрос. Или там у вас синхронные вызовы используются? В общем, подскажите, можно ли как то исправить эту проблему. Возможно, есть ещё способ перемещения карты?
Там используются синхронные вызовы. Ошибку поправим. Перемещать возможно с помощью скроллбаров.
Сергей Карунас пишет: Ещё хотелось проконсультироваться по вопросу использования функции 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 с таким стек-трейсом: ... Видимо, при быстром движении карты что-то не успевает отработать, а уже приходит следующий запрос. Или там у вас синхронные вызовы используются? В общем, подскажите, можно ли как то исправить эту проблему. Возможно, есть ещё способ перемещения карты?
Пришлите, пожалуйста, Ваш адрес электронной почты: на нее будет выслана тестовая версия ГИС Конструктор (с исправленной ошибкой), на которой Вы сможете проверить свой пример.
Пришлите, пожалуйста, Ваш адрес электронной почты: на нее будет выслана тестовая версия ГИС Конструктор (с исправленной ошибкой), на которой Вы сможете проверить свой пример.
Собрал проект с тестовой версией, падение при перемещении исчезло, но и карта перестала загружаться с портала. Т.е. открываю карту Подольска, подгружаю к ней "Карта России (OSM)" с http://gisserver.info/GISWebServiceSE/service.php, вокруг Подольска всё серое. С предыдущей версией отрисовывалось нормально.
Перед вызовом функций 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, вокруг Подольска всё серое.
Единственный момент, касающийся установки пакета: после установки компонентов конструктора у файла maptype.h не стоят права на чтение для всех, приходится делать это вручную. Иначе ничего не собирается.