【问题标题】:Polygon on Raster query in GeoServerGeoServer中栅格查询上的多边形
【发布时间】:2021-09-20 22:50:25
【问题描述】:

我需要使用 GeoServer 在栅格 cookie 切割和像素总和上执行多边形。多边形 (GeoJSON) 和栅格都在 WGS84 (4326) 中。该栅格是使用 GeoServer 发布的一个非常大的 GeoTIFF 人口栅格。我有两个问题:

  1. 如何在GeoServer中进行整个操作?

  2. 另外,如何从多边形的矩形范围(minx、miny、maxx、maxy)中查询原始像素值,我可以自己进行像素输入/输出总和分析。

我尝试过 WMS 查询和 WCS 查询,但找不到请求原始像素值而不是 PNG 渲染结果的方法。我也尝试了一些 WPS 示例查询,但没有成功。我从谷歌那里看到的关于多边形栅格统计的信息不多。在 GeoServer 中是否可以进行整个查询?或者至少可以从 GeoServer 的 GeoTIFF 中获取一个矩形区域的原始像素?

谢谢!!

【问题讨论】:

    标签: geoserver


    【解决方案1】:

    要获取一个像素矩形作为 GeoTiff,您需要使用 WCS 请求。定义其中之一的最简单方法是使用WCS Request generator - 例如:

    <?xml version="1.0" encoding="UTF-8"?><GetCoverage version="1.0.0" service="WCS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.opengis.net/wcs" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xsi:schemaLocation="http://www.opengis.net/wcs http://schemas.opengis.net/wcs/1.0.0/getCoverage.xsd">
      <sourceCoverage>nurc:Pk50095</sourceCoverage>
      <domainSubset>
        <spatialSubset>
          <gml:Envelope srsName="EPSG:32633">
            <gml:pos>347649.93086859107 5176214.082539256</gml:pos>
            <gml:pos>370725.976428591 5196961.352859256</gml:pos>
          </gml:Envelope>
          <gml:Grid dimension="2">
            <gml:limits>
              <gml:GridEnvelope>
                <gml:low>0 0</gml:low>
                <gml:high>545 490</gml:high>
              </gml:GridEnvelope>
            </gml:limits>
            <gml:axisName>E</gml:axisName>
            <gml:axisName>N</gml:axisName>
          </gml:Grid>
        </spatialSubset>
      </domainSubset>
      <output>
        <crs>EPSG:32633</crs>
        <format>GeoTIFF</format>
      </output>
    </GetCoverage>
    

    要提取以多边形为界的栅格值,您可以使用 WPS 请求裁剪为多边形,然后自行对像素求和:

    <?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>ras:CropCoverage</ows:Identifier>
      <wps:DataInputs>
        <wps:Input>
          <ows:Identifier>coverage</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>nurc:Pk50095</ows:Identifier>
                <wcs:DomainSubset>
                  <ows:BoundingBox crs="http://www.opengis.net/gml/srs/epsg.xml#32633">
                    <ows:LowerCorner>347649.93086859107 5176214.082539256</ows:LowerCorner>
                    <ows:UpperCorner>370725.976428591 5196961.352859256</ows:UpperCorner>
                  </ows:BoundingBox>
                </wcs:DomainSubset>
                <wcs:Output format="image/tiff"/>
              </wcs:GetCoverage>
            </wps:Body>
          </wps:Reference>
        </wps:Input>
        <wps:Input>
          <ows:Identifier>cropShape</ows:Identifier>
          <wps:Data>
            <wps:ComplexData mimeType="application/wkt"><![CDATA[POLYGON((x1 y1, x2 y2,......))]]></wps:ComplexData>
          </wps:Data>
        </wps:Input>
      </wps:DataInputs>
      <wps:ResponseForm>
        <wps:RawDataOutput mimeType="image/tiff">
          <ows:Identifier>result</ows:Identifier>
        </wps:RawDataOutput>
      </wps:ResponseForm>
    </wps:Execute>
    

    或者你也可以自己写custom process,一次性完成整个流程。

    【讨论】:

    • 我在尝试解决这个问题时还有一些问题,但我在找到方法后删除了它们,您上面的答案非常正确。对于 WGS84 查询,将 32633 替换为 4326。使用地理服务器演示请求,对于上面的矩形示例,在请求下拉列表中选择 WCS_getCoverage_2.0.1_format_geotiff.url。这将向您显示所需的 URL 和 GET 参数,
    • 对于第二个cropShape 示例,使用演示请求并滚动到底部以查找任何WPS 请求,以发现您只需要不带GET 参数的URL myserver/geoserver/wps 并且确实作为POST 请求发送。在 Postman 中,我使用 geoserver/wps 作为 URL,Content-Type=text/xml 并放置上面的 XML(我的投影 4326 和 BoundingBox 和 POLYGON x,y 值)。在 Postman 中,您必须在查询后使用 Save Response,否则您将看不到任何结果,但它们就在那里。
    • 我有两个最后的问题。 1) 我到处寻找 API 参数和 XML 内容引用,但找不到任何我需要的东西。我在哪里可以找到该信息? 2) 我在哪里寄送星巴克礼品卡?以上是救命稻草!!谢谢伊恩!
    • 如果对您有帮助,请接受答案 :-) - 您可以通过 tour 了解该网站的工作原理
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    • 1970-01-01
    • 2021-01-20
    • 2020-11-12
    相关资源
    最近更新 更多