我正在使用Geoserver 2.8.1
版本。我有netcdf and grib
个文件,我将这些文件上传到Geoserver
到Geoserver extensions
。之后,我使用这些数据在地图中显示图层要素信息。 (根据缩放比例和图像大小)我在地图中放置箭头以引用wind and wave
方向。我通过获取这样的netcdf信息来计算箭头所处的角度;
本地主机:8080 /的GeoServer / WMS服务= WMS&安培;版本= 1.3&安培; BBOX = 23.75,32.75,24.25,33.25&安培;多层= it.geosolutions:U10&安培; QUERY_LAYERS = it.geosolutions:U10&安培; FEATURE_COUNT = 10安培; REQUEST =的GetFeatureInfo&安培; INFO_FORMAT =应用/ JSON&安培; WIDTH = 20&安培; HEIGHT = 20安培; X = 10安培; Y = 10安培;时间= 2015-06-16T18:00:00.000Z
我对每个点只更改bbox进行上述请求(让我们说平均1000次)。它正在杀死我的申请。有什么方法可以在一个请求中获取所有单元格/点的功能信息/值吗?
我知道我现在无法使用WMS - getFeatureInfo
,但我对任何建议持开放态度,唯一的限制是我需要使用java。
注意:我不是在寻找多层中一个点的值,我正在寻找多个点的值。我已经可以获得多层的值。
答案 0 :(得分:2)
我不相信在没有编写新的代码服务器端的情况下可以做到这一点,ncWMS extensions中的新操作或自定义WPS进程也是如此。
答案 1 :(得分:2)
我在尝试了很多方法后解决了这个问题,但到现在为止还没有时间在这里发布答案。
首先,我正在开发自己的WPS流程。但是,在搜索代码示例时,我发现Geoserver已经有了获取原始Raster数据的WPS流程。所以,我决定尝试一下。
阅读步骤前的第一个重要注意事项;如果您使用SOAP Ui
或类似于测试请求,而不是尝试编写代码。您应该知道从请求中获取响应需要几毫秒,但是Soap Ui
需要 10-15分钟来解析返回的json数据。所以,不要担心这个过程很慢,实际上很快。
WindWaveModel:u10
EPSG:4326
GeoServer
抛出异常。request body
,Geoserver
在页面底部提供从流程输入/输出生成XML 按钮。您必须单击Geoserver的此按钮才能创建请求XML。首先,看看XML并尝试理解它是什么。bounding box
的{{1}}一样。它是从图层信息中自动提取的, gs:RasterAsPointCollection 进程为您提供了raster layer
输入。这样你就可以得到bounding box
,而不是全部。only some part of your raster layer
,因为第一个process chaining
是 wcs:GetCoverage 服务的输出。这对我来说有些挑战,因为我的<wps:input>
中有time dimensions
。 gs:RasterAsPointCollection 正在使用 wcs:1.1.1规范。如果您查看 wcs:1.1.1规范,您将看不到时间维度输入。在那里有很多尝试和失败,我将跳过细节,因为我将为您提供netcdf layers
并添加final result in the XML form
。time dimension input
<?xml version="1.0" encoding="UTF-8"?><wps:Execute version="1.0.0" service="WPS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.opengis.net/wps/1.0.0" xmlns:wfs="http://www.opengis.net/wfs" xmlns:wps="http://www.opengis.net/wps/1.0.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xmlns:wcs="http://www.opengis.net/wcs/1.1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd">
<ows:Identifier>gs:RasterAsPointCollection</ows:Identifier>
<wps:DataInputs>
<wps:Input>
<ows:Identifier>data</ows:Identifier>
<wps:Reference mimeType="image/tiff" xlink:href="http://geoserver/wcs" method="POST">
<wps:Body>
<wcs:GetCoverage service="WCS" version="1.1.1">
<ows:Identifier>yourWorkspace:yourRasterLayer(e.g. it.geosolutions:u10)</ows:Identifier>
<wcs:DomainSubset>
<ows:BoundingBox crs="http://www.opengis.net/gml/srs/epsg.xml#4326">
<ows:LowerCorner>minLon minLat(e.g. 20.0 30.0)</ows:LowerCorner>
<ows:UpperCorner>maxLon maxLat(e.g. 55.0 48.0)</ows:UpperCorner>
</ows:BoundingBox>
<wcs:TemporalSubset>
<gml:TimePosition>yourTimeDimesion(e.g.2017-03-15T06:00:00.000Z)</gml:TimePosition>
</wcs:TemporalSubset>
</wcs:DomainSubset>
<wcs:Output format="image/tiff"/>
</wcs:GetCoverage>
</wps:Body>
</wps:Reference>
</wps:Input>
<wps:Input>
<ows:Identifier>targetCRS</ows:Identifier>
<wps:Data>
<wps:LiteralData>EPSG:4326</wps:LiteralData>
</wps:Data>
</wps:Input>
<wps:Input>
<ows:Identifier>interpolation</ows:Identifier>
<wps:Data>
<wps:LiteralData>nearest</wps:LiteralData>
</wps:Data>
</wps:Input>
</wps:DataInputs>
<wps:ResponseForm>
<wps:RawDataOutput mimeType="application/json">
<ows:Identifier>result</ows:Identifier>
</wps:RawDataOutput>
</wps:ResponseForm>
</wps:Execute>
目前,我正在查询 u10 和 v10 栅格图层(进行2次WPS调用)以获取 eastward_wind 和 northward_wind 值。然后我为每个单元格计算HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://localhost:8090/geoserver/ows?Service=WPS");
HttpEntity entity = new ByteArrayEntity(xmlString.getBytes("UTF-8"));
post.setEntity(entity);
HttpResponse response = client.execute(post);
// parse the json data in the response with a streaming model as it will be big
,最后用结果值创建一个颜色图。我还用类似的几何方程计算风箭头方向。
我希望这对其他人也有帮助。
请告诉我,如果我能更快地完成此过程,或以任何其他方式对其进行优化。