java发布WCS服务到GeoServer服务器并解析XML生成可下载的WCS服务数据url(2022.2.14)
Posted jing_zhong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java发布WCS服务到GeoServer服务器并解析XML生成可下载的WCS服务数据url(2022.2.14)相关的知识,希望对你有一定的参考价值。
GeoServer上的WCS服务发布调用及解析生成可下载为Tif的WCSUrl 2022.2.14
- 所用软件环境(Java、Tomcat、GeoServer、Google Browser、Eclipse、ArcGIS)
- 1、GeoServer 简介
- 2、 GeoServer安装及使用
- 3、WCS服务的发布与请求
- 4、根据Identifier获取WCS服务的数据URL下载地址
所用软件环境(Java、Tomcat、GeoServer、Google Browser、Eclipse、ArcGIS)
1、GeoServer 简介
GeoServer是一个用 Java
编写并允许用户共享和编辑地理空间数据的开源服务器端软件。 GeoServer
使用开放标准发布来自任何主要空间数据源的数据,它专为互操作性而设计,允许用户要素数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间地理信息。 实施 Web
地图服务 (WMS
) 标准,GeoServer
可以创建各种输出格式的地图。GeoServer
已集成免费地图库——OpenLayers
,可快速生成简单地图。 另外,GeoServer
建立在 Geotools
之上,是一个开源 Java GIS
工具包。
GeoServer
是领先的大规模发布地理空间数据的开源服务器,是用于管理和传播地理空间数据的强大解决方案。 它支持多种输入格式,用于根据 OGC
和 ISO TC 211
发布的标准以及社区标准,通过众所周知的 API
生成令人惊叹的地图、执行分析或简单地在 Web
上提供Map
。 很多组织使用 GeoServer
提供 PB 级数据,从点数据(例如全球实时船舶位置)到海量多维地球观测数据。
GeoServer
是开放地理空间联盟 Open Geospatial Consortium (OGC)、Web 要素服务Web Feature Service (WFS) 和 Web 覆盖服务 Web Coverage Service (WCS)标准的参考实现,也是经过高性能认证的兼容 Web 地图服务Web Map Service (WMS)。 GeoServer 构成了地理空间网络的核心组件。
类型 | 值 |
---|---|
输入格式 | Shapefile、GeoPackage、Oracle Spatial、PostGIS、SQL Server、MongoDB、GeoTiff、JPEG200、NetCDF、ElasticSearch、SAP Hana |
协议和输出格式 | OGC Web Map Services (WMS)、OGC Web Feature Services (WFS)、OGC Web Coverage Services (WCS)、OGC Web Processing Services (WPS)、OGC Web Map Tile Services (WMTS)、Catalogue Service for the Web (CSW)、Tile Mapping Service (TMS)、OGC Web Map Services、OGC KML/KMZ、OGC GML、New OGC REST API 、GeoJSON、GeoRSS、DDS/BIL for 3D mapping |
使用的知名世界组织 | DLR (Ge)、EUMETSAT (EU)、DigitalGlobe (US)、Halliburton (US/UK)、New York City (US)、MassGIS (US)、Topcon (Jp/It)、FarmersEdge (Can/US)、San Jose Water (US)、PDF (US)、FNMOC (US)、NOOA (US)、City of Genoa (It)、World Bank、UN FAO、UN WFP、UNEGP GRID、BEV (At)、IGN (Fr)、BRGM (Fr)、EMSA (EU)、National Land Survey (NLS) of Finland (Fi)、Swedish Agency for Maritime and Water Management (SWAM)、UNESCO、Finnish Environment Institute (Fi)、New South Wales Geological Survey (Au)、GeoScience Australia (Au)、Total (fr)、Norbit (No)、NPRA (No)、DWD (Ge)、Rennes Metropole (Fr) |
1.1 GeoServer 用户手册和文档
若用户想要深入学习GeoServer,可前往官网查看GeoServer用户手册和GeoServer文档。
|
|
1.2 GeoServer 支持的 Web 服务(WMS、WFS、WCS、WPS、CSW、WMTS)
1.2.1 WMS 网络地图服务
OGC
Web地图服务(WMS)规范定义了一个HTTP
接口,用于从服务器请求带有地理参考的地图图像。GeoServer
支持使用最广泛的WMS
版本WMS 1.1.1,以及WMS 1.3.0。WMS
提供了一个简单的HTTP
接口,用于从一个或多个分布式地理空间数据库请求地理注册地图图像。WMS
请求定义了要处理的地理层和感兴趣的区域。对请求的响应是一个或多个可以在浏览器应用程序中显示的地理注册地图图像(以JPEG
、PNG
等格式返回)。该接口还支持指定返回的图像是否应该是透明的,以便可以合并或不合并来自多个服务器的层。
1.2.2 WFS 网络要素服务
OGC
Web要素服务WFS用于使用HTTP
在互联网上创建、修改和交换矢量格式的地理信息。WFS
用地理标记语言(Geography Markup Language,GML
)编码和传输信息,GML
是XML
的一个子集。GeoServer
支持的WFS
版本2.0.0、1.1.0和1.0.0。WFS
代表了地理信息在互联网上创建、修改和交换方式的变化。例如,WFS
不使用文件传输协议FTP
在文件级别共享地理信息,而是在要素和要素属性级别提供对地理信息的直接细粒度访问。
1.2.3 WCS 网络覆盖服务
OGC
Web 覆盖服务 (WCS) 将地理空间信息的接收称为“覆盖”:表示空间变化现象的数字地理空间信息。可以将其视为光栅数据的WFS
。它获取地图的“源代码
”,但在本例中,它不是原始向量,而是原始图像。WCS
和WMS
有一个重要的区别。尽管它们十分相似都可以返回相似的格式,但WCS
能够返回更多信息,包括有价值的元数据和更多格式。
WCS
服务包含三种接口请求:GetCapabilities、DescribeCoverage和GetCoverage。
1.2.4 WPS 网络处理服务
OGC
Web 处理服务WPS是一种用于发布地理空间过程、算法和计算的服务。WPS
服务是Geoserver
的扩展,为数据处理和地理空间分析提供执行操作。默认情况下,WPS
不是GeoServer
的一部分,但可以作为扩展提供。WPS
接口标准为地理空间处理服务(如多边形叠加)的输入和输出(请求和响应)的标准化提供了规则。该标准还定义了客户机如何请求流程的执行,以及如何处理流程的输出。它定义了一个接口,用于促进地理空间过程的发布以及客户对这些过程的发现和绑定。WPS
所需的数据可以通过网络传输,也可以在服务器上获得。
1.2.5 WMTS 网络地图切片服务
OGC
Web 地图切片服务WMTS标准定义了一些操作,这些操作允许用户访问瓦片地图,WMTS
可能是OGC
首个支持RESTful
访问的服务标准。
1.2.6 CSW 网络目录服务
OGC
Web 目录服务CSW可以从GeoServer
目录中检索和显示相关数据服务和处理服务项目。
1.3 Service Metadata 服务元数据
开放Web
服务(WCS
、WFS
、WMS
和WPS
)使用通用元数据定义来描述所提供的服务,并指出任何使用限制。
2、 GeoServer安装及使用
2.1 前提条件: Java 8 或 Java 11
|
|
在安装GeoServer
前,务必记得安装好Java
才可(可Win+R打开cmd
命令行窗口输入java -version
进行测试,这里使用的是Java 8
,在GeoServer下载页面点击Archived
可下载历史各个版本的GeoServer
。
|
|
2.2 三种方式安装GeoServer
2.2.1 方式一:安装包安装 (Windows installer)
参考Windows installer,双击安装包选择适配项进行安装即可。
2.2.2 方式二:独立二进制文件复制 (Windows binary)
参考Windows binary,首先解压该文件得到下图所示的文件夹后,进入bin
文件夹后用鼠标双击startup.bat
,会弹出启动GeoServer
的命令行窗口,启动成功后的默认端口为8888,打开浏览器访问http://localhost:8888/geoserver可进入GeoServer
服务器的登录页面,默认的用户名为admin,密码为geoserver。
关闭GeoServer
服务器只需要关闭命令行窗口即可。
2.2.3 方式三:作为servlet部署到Tomcat服务器 (Web archive)
参考Web archive,首先解压该文件得到如下所示的文件夹,在文件夹中找到geoserver.war
文件并复制后粘贴到Tomcat
服务器的webapps
文件夹下(D:\\program files\\apache-tomcat-10.0.12\\webapps),之后进入bin
文件夹下双击startup.bat
,弹出Tomcat
服务器启动的命令行窗口,待启动完成后打开浏览器访问http://localhost:8080/geoserver
浏览器进入Tomcat
http://localhost:8080/主页后选择登录,使用用户名tomcat
和密码s3cret
登录可查看并管理Web
应用程序,可以看到/geoserver
,说明GeoServer
服务器部署成功,点击该项可进入相关页面。
2.3 使用GeoServer
为了更好地使用GeoServer,可参考Using the web administration interface、Publishing a shapefile等官方帮助示例。
3、WCS服务的发布与请求
这里以WGC1984
坐标系的栅格Tif
数据为例进行实验。
3.1 GeoServer发布WCS服务
3.1.1 手动发布
进入GeoServer
主页后,发布之前需要打开工作区cite
的WCS
服务功能。
先点击左侧的数据存储,选择添加新的数据存储,
之后选择新建数据源下的栅格数据源中的GeoTIFF,
在添加栅格数据源界面,这里选择已有的工作区为cite
(当然可以自己新建一个工作区),然后输入数据源名称为sample
,然后点击浏览选择要上传的Tif
数据后点击保存,会进入新建图层界面,点击发布。
进入编辑图层界面,根据自己的需要对数据、发布、维度、Tile Caching、Security五个方面进行设置后,最终点击保存即可在图层中看到。
点击左侧的图层预览,右侧查找到cite:sample
(工作区名:数据名)后点击右侧的OpenLayers
即可对Tif
影像进行预览。
3.1.2 java代码自动发布Tif影像到GeoServer服务器(利用 GeoServer的Rest API)
上传GeoTIFF
数据到GeoServer
服务器的函数,详见4.2.1。
PublishGeoTiffToGeoServer
import it.geosolutions.geoserver.rest.GeoServerRESTManager;
import it.geosolutions.geoserver.rest.GeoServerRESTPublisher;
import it.geosolutions.geoserver.rest.encoder.datastore.GSGeoTIFFDatastoreEncoder;
/**
* @function 发布本地GeoTiff到GeoServer上形成WCS服务
* @author NoName
* @createdate 2022.2.14
* @param1 Tif_fileName: D:/迅雷下载/sample.tif
* @param2 saveIP GeoServer服务器的Ip地址
* @param3 savePort GeoServer服务器的端口号
* @param4 saveIP GeoServer服务器的用户名
* @param5 savePort GeoServer服务器的密码
* @param6 workspace 待发布WCS服务的工作空间名称
* @param7 storename 待发布WCS服务的数据存储名称
* @return WCS服务的identifier
*/
public static String PublishGeoTiffToGeoServer(String Tif_fileName,String saveIP,String savePort,String username,String password,String workspace,String storename)
/**
* 上传服务
*/
String serviceurl = "http://"+saveIP+":"+savePort+"/geoserver"; //GeoServer的连接配置
int flag=0;
try
URL u = new URL(serviceurl);
GeoServerRESTManager manager = new GeoServerRESTManager(u, username, password);
GeoServerRESTPublisher publisher = manager.getPublisher();
List workspaces = manager.getReader().getWorkspaceNames();
if (!workspaces.contains(workspace)) //判断工作区(workspace)是否存在,不存在则创建
boolean createws = publisher.createWorkspace(workspace);
System.out.println("create ws : " + createws);
else
System.out.println("workspace存在 :" + workspace);
//新建数据存储,如已经存在将覆盖
GSGeoTIFFDatastoreEncoder gsGeoTIFFDatastoreEncoder = new GSGeoTIFFDatastoreEncoder(storename);
gsGeoTIFFDatastoreEncoder.setWorkspaceName(workspace);
gsGeoTIFFDatastoreEncoder.setUrl(new URL("file:" + Tif_fileName));
boolean createStore = manager.getStoreManager().create(workspace, gsGeoTIFFDatastoreEncoder);
System.out.println("create store (TIFF文件创建状态) : " + createStore);
boolean publish = manager.getPublisher().publishGeoTIFF(workspace, storename, new File(Tif_fileName));
System.out.println("publish (TIFF文件发布状态) : " + publish);
if(publish==true)
flag=1;
else
flag=0;
catch(Exception e)
e.printStackTrace();
flag = 0;
if(flag == 1)
return workspace+":"+storename;
else
return "";
3.2 GeoServer上WCS服务的三种请求
3.2.1 GetCapabilities
GetCapabilities
操作是向WCS
服务器请求该服务器提供哪些操作和服务(“功能”)的列表。
Using a GET request (standard HTTP):
http://localhost:8080/geoserver/wcs?service=wcs&version=1.0.0&request=getcapabilities
3.2.2 DescribeCoverage
DescribeCoverage
请求的目的是获取有关客户想要查询的覆盖范围的附加信息。它返回有关crs、元数据、域、范围和可用格式的信息。客户机通常需要发出DescribeCoverage
请求,然后才能确保能够发出正确的GetCoverage
请求。
http://localhost:8080/geoserver/wcs?service=wcs&version=1.0.0&request=describecoverage&identifier=cite:sample
http://localhost:8080/geoserver/wcs?service=wcs&version=1.1.0&request=describecoverage&identifiers=cite:sample
3.2.3 GetCoverage
GetCoverage
操作请求实际的空间数据。它可以检索覆盖范围的子集,结果可以是覆盖范围本身,也可以是对它的引用。GetCoverage
请求最强大的功能是能够对域(高度和时间)和范围进行裁剪。它还可以进行重采样,以不同的数据格式编码,并以不同的方式返回生成的文件。
http://localhost:8080/geoserver/wcs?request=GetCoverage&service=wcs&version=1.0.0&sourceCov
erage=cite:sample&crs=EPSG:4326&format=geotiff&BBox=114.13813710173059,30.423415944431966,114.52639379166072,30.726972419428588&width=1366&height=1068
4、根据Identifier获取WCS服务的数据URL下载地址
4.1 利用GeoServer手动拼接URL
点击GeoServer
主页下方的演示,选择右侧的WCS request builder
,进入WCS request builder
页面,Coverage name
一栏选择cite:sample
点击Get Coverage
可直接下载该Tif
影像。
点击Generate GetCoverage XML
后会弹出GetCoverage
所对应的HTTP Post
请求需要的XML
,因为本质上Get Coverage
就是利用XML
中的一些信息(版本号、服务类型、Bounding Box、宽度和高度、坐标系、数据格式)来发送请求获得GeoServer
服务器的响应而得到WCS
服务对应的Tif
影像。
利用上述XML
可得到下载sample
影像的WCSUrl
格式为 http://localhost:8080/geoserver/wcs?request=GetCoverage&service=wcs&version=1.0.0&sourceCov
erage=cite:sample&crs=EPSG:4326&format=geotiff&BBox=114.13813710173059,30.423415944431966,114.52639379166072,30.726972419428588&width=1366&height=1068,将其输入到浏览器的地址栏里后回车即可进行下载,GeoServer服务器后台进行响应。
最后利用ArcGIS
打开下载好的cite_sample.tif
进行查看,结果如下图所示。
4.2 java上传Tif到GeoServer服务器形成WCS服务并根据identifier解析生成可下载为Tif的WCSUrl
4.2.1 java代码及第三方jar包(Eclipse)
依赖的第三方jar
包如下,在Eclipse
中将这些jar
包添加到Build Path
中即可运行。
commons-beanutils-1.9.4.jar
commons-codec-1.9.jar
commons-collections-3.2.2.jar
commons-collections4-4.2.jar
commons-compiler-3.0.8.jar
commons-dbcp-1.4.jar
commons-fileupload-1.3.3.jar
commons-httpclient-3.1.jar
commons-io-2.8.0.jar
commons-jxpath-1.3.jar
commons-lang-2.5.jar
commons-lang3-3.8.1.jar
commons-logging-1.1.1.jar
commons-pool-1.5.4.jar
commons-text-1.4.jar
dom4j.jar
geoserver-manager-1.7.0-pdok2.jar
jaxen-1.1.6.jar
jdom-1.1.3.jar
json.jar
log4j-1.2.17.jar
slf4j-api-1.6.4.jar
slf4j-log4j12-1.6.4.jar
4.2.1.1 PublishGeoTiffToGeoServer函数
a、上传GeoTIFF
数据到GeoServer
服务器的函数PublishGeoTiffToGeoServer
/**
* @function 发布本地GeoTiff到GeoServer上形成WCS服务
* @author NoName
* @createdate 2022.2.14
* @param1 Tif_fileName: D:/迅雷下载/sample.tif
* @param2 saveIP GeoServer服务器的Ip地址
* @param3 savePort GeoServer服务器的端口号
* @param4 saveIP GeoServer服务器的用户名
* @param5 savePort GeoServer服务器的密码
* @param6 workspace 待发布WCS服务的工作空间名称
* @param7 storename 待发布WCS服务的数据存储名称
* @return WCS服务的identifier
*/
public static String PublishGeoTiffToGeoServer(String Tif_fileName,String saveIP,String savePort,String username,String password,String workspace,String storename)
/**
* 上传服务
*/
String serviceurl = "http://"+saveIP+":"+savePort+"/geoserver"; //GeoServer的连接配置
int flag=0;
try
URL u = new URL(serviceurl);
GeoServerRESTManager manager = new GeoServerRESTManager(u, username, password);
GeoServerRESTPublisher publisher = manager.getPublisher();
List workspaces = manager.getReader().getWorkspaceNames();
if (!workspaces.contains(workspace)) //判断工作区(workspace)是否存在,不存在则创建
boolean createws = publisher.createWorkspace(workspace);
System.out.println("create ws : " + createws);
else
System.out.println("workspace存在 :" + workspace);
//新建数据存储,如已经存在将覆盖
GSGeoTIFFDatastoreEncoder gsGeoTIFFDatastoreEncoder = new GSGeoTIFFDatastoreEncoder(storename);
gsGeoTIFFDatastoreEncoder.setWorkspaceName(workspace);
gsGeoTIFFDatastoreEncoder.setUrl(new URL("file:" + Tif_fileName));
boolean createStore = manager.getStoreManager().create(workspace, gsGeoTIFFDatastoreEncoder);
System.out.println("create store (TIFF文件创建状态) : " + createStore);
boolean publish = manager.getPublisher().publishGeoTIFF(workspace, storename, new File(Tif_fileName));
System.out.println("publish (TIFF文件发布状态) : " + publish);
if(publish==true)
flag=1;
else
flag=0;
catch(Exception e)
e.printStackTrace();
flag = 0;
if(flag == 1)
return workspace+":"+storename;
else
return "";
4.2.1.2 getWCSGetCov
以上是关于java发布WCS服务到GeoServer服务器并解析XML生成可下载的WCS服务数据url(2022.2.14)的主要内容,如果未能解决你的问题,请参考以下文章