GeoServer-REST应用(基于Qt网络编程一键同步发布空间数据和样式至GeoServer)
【GeoServer-REST应用(基于Qt网络编程一键同步发布空间数据和样式至GeoServer)】@
目录
- 简介
- 配置
- 步骤
- ??1.引入Qt网络模块
- ??2.创建网络管理、网络响应、网络请求
- ??3.创建工作空间
- ??4.创建数据存储并上传数据
- ??5.上传样式文件
- ??6.图层发布
- ??6.图层和样式绑定
- ??7.网络响应结束
简介 ??GeoServer 提供 RESTful 接口, 通过使用REST 接口的简单 HTTP 调用,客户端可以无需使用 Web 管理接口来配置 GeoServer并检索有关资源的信息进行配置更改。对资源的操作基于 HTTP 标准:GET 读取;以及 PUT、POST 和 DELETE 来写入更改; 每个URL指向一个资源。
??REST (REpresentational State Transfer)对命名资源采用一组固定的操作,其中每个资源的表示是相同的,可以检索(读取)XML 格式的数据,也可以将数据以类似的 XML 格式发送回服务器,以便对系统进行设置(写入)更改。
??链接: GeoServer-REST API.
配置 ??IDE:Qt Creator 5.0.2
??C++框架:Qt 5.12
??Web服务器:tomcat 8.5.70
??GeoServer版本:2.19.2
步骤 ??1.引入Qt网络模块 ??pro文件中添加QT += network;并在头文件中引入
#include //网络管理,发送请求,创建响应
#include //网络请求
#include //网络响应
??2.创建网络管理、网络响应、网络请求
//创建网络管理器
QNetworkAccessManager *accessManager = new QNetworkAccessManager(this);
//创建网络响应
QNetworkReply *reply;
//创建网络请求对象,并设置请求内容
QNetworkRequest request;
//请求头,媒体类型、编码
request.setHeader(QNetworkRequest::ContentTypeHeader, QLatin1String("text/xml;
charset=utf-8"));
request.setRawHeader("Authorization",getAuthorizationInfo().toUtf8());
//身份验证
??由于访问GeoServer需要进行身份验证,因此在请求头中还需要设置身份验证信息。
//获取身份验证信息并转换格式,用户名:admin,密码:geoserver
QString MainWindow::getAuthorizationInfo()
{
QString userPwd = QString("%1:%2").arg("admin").arg("geoserver");
QString userPwdBase64 = userPwd.toUtf8().toBase64();
QString AuthorizationInfo = QString("Basic %1").arg(userPwdBase64);
return AuthorizationInfo;
}
??3.创建工作空间
//url设为workspaces端点
request.setUrl(QUrl("http://localhost:8080/geoserver/rest/workspaces/"));
//请求发送的数据(xml格式)
data ="https://www.it610.com/article/RestTest ";
//发送请求创建响应
reply = accessManager->post(request,data.toUtf8());
//响应置空
reply=Q_NULLPTR;
??4.创建数据存储并上传数据
//url设为datastores端点,工作空间名需已经创建
request.setUrl(QUrl("http://localhost:8080/geoserver/rest/workspaces/RestTest/datastores"));
//数据源为本地数据
data ="https://www.it610.com/article/test file://F:/GeoServerDatabase/data/test.shp ";
//数据源为PostGIS
//data ="https://www.it610.com/article/test localhost5432TestGIS postgres 123456postgis ";
reply = accessManager->post(request,data.toUtf8());
reply=Q_NULLPTR;
??5.上传样式文件
//url设为styles端点
request.setUrl(QUrl("http://localhost:8080/geoserver/rest/styles"));
//样式名和样式文件名,样式文件需在geoserver的styles文件夹下,例如E:\apache-tomcat-8.5.70\webapps\geoserver\data\styles
data = "https://www.it610.com/article/teststyle teststyle.sld ";
reply = accessManager->post(request,data.toUtf8());
reply=Q_NULLPTR;
??6.图层发布
//url设为featuretypes端点
request.setUrl(QUrl("http://localhost:8080/geoserver/rest/workspaces/RestTest/datastores/test/featuretypes"));
data = "https://www.it610.com/article/test EPSG:4326 ";
reply = accessManager->post(request,data.toUtf8());
reply=Q_NULLPTR;
??6.图层和样式绑定
//url设为layers端点,图层为(工作空间%3A图层名)
request.setUrl(QUrl("http://localhost:8080/geoserver/rest/layers/RestTest%3Atest"));
data = "https://www.it610.com/article/test teststyle ";
reply = accessManager->post(request,data.toUtf8());
??7.网络响应结束
//绑定响应结束信号与槽函数
connect(reply,SIGNAL(finished()),this,SLOT(replyFinished()));
void MainWindow::replyFinished()
{
//打印响应返回的信息
QTextCodec *codec = QTextCodec::codecForName("utf8");
QString backInfo = codec->toUnicode(reply->readAll());
qDebug()<deleteLater();
reply=Q_NULLPTR;
}
推荐阅读
- PHP 基于 SW-X 框架,搭建RPC微服务支持
- 基于OpenCV与JVM实现矩阵处理图像
- spring|spring IOC容器管理必须知道的一些操作(基于XML方式)
- Linux系统安全及应用
- 浏览器动态显示服务器日志,基于 websocket 实现远程实时日志 在浏览器中查看设备的运行日志...
- testflight 公开版本中应用90天到期失效了该怎么处理-testflight 到期如何续期
- 数据库|TiDB Online DDL 在 TiCDC 中的应用丨TiDB 工具分享
- 基于Lumisoft.NET组件,使用IMAP协议收取邮件
- 神经网络基础|基于频谱的GCN 图卷积神经网络数学原理
- REST架构及RESTful应用程序简介