【问题标题】:Openlayers bbox strategyOpenlayers bbox 策略
【发布时间】:2016-07-06 11:05:40
【问题描述】:

我有一个数据源的 bbox 策略。代码如下所示:

bbox: function newBboxFeatureSource(url, typename) {
    return new ol.source.Vector({
        loader: function (extent) {
            let u = `${url}&TYPENAME=${typename}&bbox=${extent.join(",")}`;

            $.ajax(u).then((response) => {
                this.addFeatures(
                    geoJsonFormat.readFeatures(response)
                );
            });
        },
        strategy: ol.loadingstrategy.bbox
    });
},

我工作正常,但是...当我平移/移动地图时,这个 loader 再次调用并添加另一个适合新框的功能。但是有很多重复,因为一些新功能与旧功能相同。 所以我想在添加新功能之前首先使用this.clear() 清除所有功能,但是当我添加此命令时,loader 一直在运行并且我有“不定式循环”。你知道为什么吗?调用this.clear()后如何禁用加载新功能?

编辑:

我对功能的回复如下所示:

{ "type": "FeatureCollection", "crs": { "type": "name", "properties": {“名称”:“urn:ogc:def:crs:EPSG::3857”}}, “特征”:[{“类型”:“特征”,“属性”:{“ogc_fid”:“2”, “名称”:“AL”},“几何”:{“类型”:“MultiPolygon”,“坐标”: [ [ [ ... ] ] } },{“类型”:“特征”,“属性”:{“ogc_fid”: "3", "name": "B" }, "geometry": { "type": "MultiPolygon" , “坐标”:[ [ [ ...] ] ] } } .....等等

我删除了坐标,因为它们太多了。

我的功能由 mapserver 生成,并在 .map 文件中配置,如下所示:

LAYER
    NAME "postcode_area_boundaries"
    METADATA
        "wfs_title"                 "Postcode area boundaries"
        "wfs_srs"                   "EPSG:3857"
        "wfs_enable_request"        "*"
        "wfs_getfeature_formatlist" "json"
        "wfs_geomtype"              "multipolygon"
        "wfs_typename"              "postcode_area_boundaries"
        "wms_context_fid"           "id"
        "wfs_featureid"             "id"
        "gml_featureid"             "id"
        "gml_include_items"         "id,postarea,wkb_geometry"
        "gml_postarea_alias"        "name"
        "ows_featureid"             "id"
        "tinyows_table"             "postcode_area_boundaries"
        "tinyows_retrievable"       "1"
        "tinyows_include_items"     "id,postarea,wkb_geometry"
    END
    TYPE POLYGON
    STATUS ON
    CONNECTIONTYPE POSTGIS
    CONNECTION "..."
    DATA "wkb_geometry FROM postcode_area_boundaries USING UNIQUE id"
    DUMP TRUE
END

【问题讨论】:

  • 您的功能是否有唯一的 ID?如果您从地理服务器或任何服务器获取要素,请检查它们是否具有唯一 ID,如果没有,则在您的服务器上创建唯一 ID,问题应该会消失。另外,考虑使用 url 函数而不是加载器。
  • @pavlos 我从以前的开发人员那里继承了这段代码。将 loader 更改为 url 函数并不能解决问题。关于唯一 ID:我更新了我的问题并添加了功能响应示例。我在 db 中有一个独特的列,称为 ogc_fid
  • 你能把ogc_fid换成fid吗????
  • @pavlos 要做到这一点,我将不得不更改很多 js 代码......还有隐藏的逻辑。不过好吧,我会试试的。谢谢您的回答。当我这样做时,我会告诉你:)
  • 只需在您的数据库中添加一个名为fid 的新列,用ogc_fid 填充它并在您的地理服务器上重新加载。祝你好运

标签: openlayers-3


【解决方案1】:

总结讨论并回答最初的问题:

服务器发送的特征需要一个名为 id 的属性,该属性必须是唯一的,并且对于每个请求的特征来说都是相同的。

{type: "Feature", id: "some-wfs.1234", properties: { "ogc_fid": 2, ...

有关 ahocevar 的原始评论,请参阅 this GitHub Issue

在 GeoServer 中,如果您在图层中设置标识符,则可以实现这一点。 我猜想在 MapServer 中有类似的设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 2019-04-21
    • 2018-07-17
    相关资源
    最近更新 更多