2016-07-06 9 views
1

私は1つのデータソースに対してbbox戦略を持っています。コードは次のようになります。Iパン/マップを移動し、このローダーを再度呼び出して、新しいボックスに収まる別の機能を追加した場合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_fid": "2"、 {"name": "urn:ogc:def:crs:EPSG :: 3857"}}、 "フィーチャー" 「タイプ」:「マルチポリゴン」、「座標」: [[[...]]]}}、{"タイプ": "フィーチャー"、 "名前": "AL"}、 "properties":{"ogc_fid": "3"、 "name": "B"}、 "geometr Y ":{ "タイプ": "MultiPolygonの"、 "座標":[[[...]]]}} ...とがあったので、そう

にI座標を削除しましたあまりにも多くの。

私の機能は、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 
+0

あなたの機能に固有のIDがありますか?ジオサーバまたは任意のサーバからユニークなIDを持っているかどうかをチェックする場合は、サーバ上にユニークなIDを作成せず、問題がなくなるはずです。また、ローダの代わりにurl関数を使用するcosider。 – pavlos

+0

@pavlos私は以前の開発者によってこのコードを継承しました。ローダーをURL関数に変更しても問題は解決しません。ユニークなIDについて:私は質問を更新し、フィーチャーレスポンスの例を追加しました。私は 'ogc_fid'と呼ばれる独自の列をデータベースに持っています。 – nospor

+0

'ogc_fid'を' fid'だけに切り替えることができますか? – pavlos

答えて

1

議論を要約し、最初の質問に答えるために:サーバーの必要性によって送信さ

機能をidと呼ばれる属性。一意であり、要求ごとにその機能に対して同じでなければなりません。

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

ahocevarの元のコメントについては、this GitHub Issueを参照してください。

ジオサーバーでは、レイヤーに識別子を設定するとこれを実現できます。 MapServerに設定されているものと似ていますね。