2016-07-06 238 views
1

我有一個數據源的bbox策略。代碼如下所示:Openlayers 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 
    }); 
}, 

我工作得很好,但是......當我平移/移動地圖那麼這裝載機被再次調用,並添加其適合新的框另一個特點。但是有很多重複的東西,因爲一些新功能和舊版本一樣。 所以我想用this.clear()之前增加新的功能首先要明確所有的功能,但是當我添加此命令,然後裝載機運行所有的時間和我有「的不定式循環」。你知道爲什麼嗎?在撥打this.clear()之後,如何禁用加載新功能?

編輯:

我與功能響應如下所示:

{ 「類型」: 「的FeatureCollection」, 「CRS」:{ 「類型」: 「名字」, 「屬性」: { 「名稱」: 「甕:OGC:DEF:CRS:EPSG :: 3857」}}, 「特徵」:[{ 「類型」: 「功能」, 「屬性」:{ 「ogc_fid」: 「2」 , 「名稱」: 「AL」}, 「幾何」:{ 「類型」: 「的MultiPolygon」, 「座標」: [[[...]]]}},{ 「類型」: 「功能」, 「properties」:{「ogc_fid」: 「3」,「name」:「B」},「geometr Y「:{ 」類型「: 」是MultiPolygon「, 」座標「:[[[...]]]}} .....等等

我已經刪除座標,因爲有太多了。

我的特點是通過地圖服務器生成和.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 
+0

你有你的特點唯一ID?如果您從地理服務器或任何服務器獲取功能,請檢查它們是否具有唯一的ID,如果不在服務器上創建唯一的ID,則問題應該消失。另外,cosider使用url函數而不是加載器。 – pavlos

+0

@pavlos我以前的開發者已經繼承了這段代碼。將加載器更改爲url函數不能解決問題。關於獨特的ID:我已經更新了我的問題並添加了功能回覆的示例。我有一個名爲'ogc_fid'的獨特的db列。 – nospor

+0

你能把'ogc_fid'切換到'fid'嗎? – pavlos

回答

1

總結討論,並回答最初的問題:服務器需要發送

特點一個名爲id的屬性,它必須是唯一的,並且對於每個請求上的功能都是相同的。

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

請參閱this GitHub Issue獲取ahocevar的原始評論。

在GeoServer的,如果你設置你的層的標識符可以做到這一點。 我猜在MapServer中有類似的設置。