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

Выбор средств разработки

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
Выбор средств разработки
 
Добрый день. Появилась задача взять данные об объектах со стороннего сервера по протоколу wfs (сервер PostgreSql + PostGis). Данные нужны для внутренних расчетов. Можно ли это реализовать средствами ГИС Конструктор для Qt или нужно использовать дополнительные программные продукты/сервисы?  
 
Библиотеки ГИС Конструктор позволяют открывать данные по протоколам WFS, WFS-T, WMS, WMTS.
По протоколу WFS может передаваться, в частности GML и GeoJSON.
Открытие данных выполняется путем передачи в штатные функции типа mapOpenDataUn/mapAppendDataUn строки,
содержащей URL с путем к соответсвующему сервису.
 
Спасибо за быстрый ответ, будем разбираться с mapOpenDataUn.
 
Если в ГИС Панорама (Панорама Мини и т.п.) открыть данные с некоторого сервиса (геопортала)
и закрыть приложение, то в INI-файле будет записана строка для доступа к этому сервису, которая может быть передана в функцию mapOpenDataUn или подобную.

Например:

PATH1%=%WMTS#Type=UTMS&IP=https://tile.openstreetmap.org/&ID1=OpenStreetMap&Name1=OpenStreetMap Карта&Projection=GoogleMapsCompatible

%=% означает кодировку UTF-8

Строка для доступа:

WMTS#Type=UTMS&IP=https://tile.openstreetmap.org/&ID1=OpenStreetMap&Name1=OpenStreetMap Карта&Projection=GoogleMapsCompatible

или

PATH1%=%WMTS#IP=http://gisserver.info/GISWebServiceSE/service.php&ID1=noginsk_area&Name1=Богородский городской округ&Matrix=GoogleMapsCompatible

строка -

WMTS#IP=http://gisserver.info/GISWebServiceSE/service.php&ID1=noginsk_area&Name1=Богородский городской округ&Matrix=GoogleMapsCompatible

Или WFS:

PATH1%=%WFS#IP=http://gisserver.info/GISWebServiceSE/service.php&ID1=ROADGRAF&Name1=Граф дорог&ID2=ROADADDR&Name2=Адресные данные&ID3=ROADSERVICE&Name3=Объекты придорож.инфраструктуры&ID4=ROADINFO&Name4=Информация об условиях движения&ID5=SYSTEM&Name5=Системный&LayerID=G0001&Scale=100000&TurnCoordinate=0&Projection=EPSG:4326


В моем случае ini-файл расположен так:

c:\Users\user1\AppData\Roaming\Panorama\mapview64.ini
 
Здравствуйте!

Приводим небольшой пример работы с WFS:
Код
#include <assert.h>

#include "mapapi.h"
#include "maptype.h"

int main(int argc, char **argv)
{
  HMAP hmap = mapOpenAnyData(WTEXT("WFS#IP=https://gisserver.info/GISWebServiceSE/service.php&ID1=LAYER1716&Name1=LAYER1716&ID2=LAYER17&Name2=LAYER17&ID3=LAYER16&Name3=LAYER16&ID4=LAYER15&Name4=LAYER15&ID5=LAYER14&Name5=LAYER14&ID6=LAYER12&Name6=LAYER12&ID7=LAYER11&Name7=LAYER11&ID8=LAYER10&Name8=LAYER10&ID9=LAYER9&Name9=LAYER9&ID10=LAYER8&Name10=LAYER8&ID11=LAYER7&Name11=LAYER7&ID12=LAYER6&Name12=LAYER6&ID13=LAYER5&Name13=LAYER5&ID14=LAYER4&Name14=LAYER4&ID15=LAYER3&Name15=LAYER3&ID16=LAYER2&Name16=LAYER2&ID17=LAYER1&Name17=LAYER1&ID18=SYSTEM&Name18=SYSTEM&LayerID=NoginskEdit&Scale=100000&Projection=urn:ogc:def:crs:EPSG::4326"));
  assert(hmap);

  int count = mapGetObjectCount(hmap, 1);
  assert(count == 4959);

  mapCloseData(hmap);

  return 0;
}
Дополнительно, для корректной работы библиотеки libqdwmsacces.so рядом с приложением должны располагаться файлы wmslist_ru.xml и crsregister.xml (пункт 3.9.33 Подключение и отображение геопорталов Руководства программиста https://gistoolkit.com/download/doc/gisdesigner_prog.pdf#page=153). Данные файлы можно взять из примера mapportal (/usr/share/gisdesigner/examples/mapportal) в составе инсталляции ГИС Конструктор.
 

Спасибо за примеры. Моей первой ошибкой были попытки засунуть в функции mapapi запрос который работает в браузере, типа такого: http://gisserver.info/GISWebServiceSE/service.php?SERVICE=WFS&REQUEST=GetFeature&LAY...

Где можно почитать в каком формате должен формироваться запрос для функций mapapi, перечень обязательных и необязательных параметров?

Запрос для карты «Граф дорог» получилось выполнить только с указанием одного слоя:

WFS#IP=http://gisserver.info/GISWebServiceSE/service.php&ID1=ROADGRAF&Name1=Граф дорог&LayerID=G0001&Projection=EPSG:4326

другие комбинации слоёв не загружают ничего, даже из-под Панорамы 14.

Самый неясный момент с кодировками. Если пройтись по всем загруженным объектам и попытаться вывести результат функций mapSemanticName и mapSemanticValue, значения служебных семантик записаны в кодировке KOI8-R, а другие уже в CP1251. А для некоторых значений mapSemanticValue у меня так и получилось подобрать кодировку, все какие-то кракозябры выдает. Это нормальная ситуация? Можно как-то программно узнать кодировку значения семантики, а не подбором?

 
Формирование строки подключения к геопорталу можно посмотреть в документе Прикладные задачи. Разработка новых модулей. https://gistoolkit.com/download/doc/mapapi.pdf#page=121
Рекомендуется работать с Unicode версиями функций, например, запрашивать значения семантик можно с помощью mapSemanticValuePro(mapapi.h).
Значения служебных семантик, отдающиеся в разных кодировках, могут свидетельствовать о некорректности исходных данных.
Код
 // Запросить значение семантической характеристики объекта в UNICODE
 // Значение преобразуется в символьный вид без раскодирования
 // info   - идентификатор объекта карты в памяти
 // number - последовательный номер характеристики (c 1),
 // value  - адрес размещения строки,
 // size   - максимальная длина строки в байтах
 // separator - разделитель целой и дробной части
 //             0 - десятичную точку не изменять
 //             1 - заменить десятичную точку на символ, установленный в системе
 //             '.' или ',' - заменить десятичную точку на separator: '.' или ','
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapSemanticValuePro(HOBJ info, long int number,
                                             WCHAR * place, long int size, long int separator);
Изменено: Константин Ганюшин - 13.12.2022 16:14:03 (добавил описание функции)
Страницы: 1
Читают тему (гостей: 1)



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

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