如何在Geoserver WMS中过滤大数据集?


12

在Geoserver中,有没有一种好的方法来过滤具有大约50,000个要素的数据集?我必须根据ID在100到200个功能之间进行选择。这些ID与FeatureId不同。在OGC筛选器编码标准中找不到类似于SQL的“ IN”运算符。组合多个PropertyIsEqualTo运算符的效果确实很差。

Answers:


8

啊。在这种情况下,您可以使用GeoServer的WMS CQL过滤器支持,即:

http://<hostname>/wms?service=WMS&version=1.1.1&request=GetMap&....&cql_filter=IN ('id_1','id_2','id_3')

有关更多信息,请访问http://geoserver.org/display/GEOSDOC/WMS+vendor+parameters


大!不知道CQL中有一个IN运算符。在使用“ =”运算符尝试此操作时,Apache遇到“ 414 Request-URI Too Long”。也许以这种方式保存的字符有所作为。
昏暗

2
切换为发布而不是获取。
伊恩·特顿

@iant:您是对的,POST(而不是GET)有效。虽然性能仍然很差。
昏暗

FID列上有索引吗?
伊恩·特顿

@iant:我要过滤的ID上有一个索引,但FID上没有。
昏暗

2

您可以通过以下方式传递功能部件ID的列表:

得到:

http://<hostname>/wfs?service=WFS&version=1.1.0&request=GetFeature&typename=foo&featureid=id_1,id_2,id_3

开机自检:

<?xml version="1.0" encoding="UTF-8"?>
<wfs:GetFeature version="1.1.0" outputFormat="text/xml; subtype=gml/3.1.1" service="WFS" resultType="results" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd" xmlns:ogc="http://www.opengis.net/ogc" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <wfs:Query typeName="foo">
        <wfs:PropertyName>String</wfs:PropertyName>
        <ogc:Filter>
            <ogc:FeatureId fid="id_1"/>
            <ogc:FeatureId fid="id_2"/>
            <ogc:FeatureId fid="id_3"/>
        </ogc:Filter>
    </wfs:Query>
</wfs:GetFeature>

POST选项显然更冗长,但比循环PropertyIsEqualTo构造要少。


看起来是过滤FeatureId的好方法。不幸的是,我必须过滤的id(另一方算法的结果)与FeatureIds不同。我更新了问题。
昏暗
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.