【发布时间】: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