2016-07-06 8 views
1

Ich habe bbox strategie für eine datenquelle. Code sieht wie folgt aus:Openlayers bbox strategie

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 
    }); 
}, 

ich gut funktioniert, aber ... Wenn ich die Karte verschieben/bewegen dann diese loader ruft wieder und weitere Funktionen hinzuzufügen, die neue Box passen. Aber es gibt viele Duplikate, weil einige der neuen Funktionen genau so alt sind wie früher. Also wollte ich zuerst alle Funktionen mit this.clear() löschen, bevor neue Funktionen hinzufügen, aber wenn ich diesen Befehl dann Loader ist läuft die ganze Zeit und ich habe "Infinitiv-Schleife". Weißt du, warum? Wie kann ich das Laden neuer Funktionen nach dem Aufruf von this.clear() deaktivieren?

edit:

meine Antwort mit Funktionen wie folgt aussieht:

{ "type": "FeatureCollection", "crs": { "type": "Name", "Eigenschaften": {"name": "urn: ogc: def: crs: EPSG :: 3857"}}, "Merkmale": [{"Typ": "Feature", "Eigenschaften": {"ogc_fid": "2" , "Name": "AL"}, "Geometrie": {"type": "MultiPolygon", "Koordinaten": [[[]]]}}, {"type": "Feature", "Eigenschaften": {"ogc_fid": "3", "Name": "B"}, "geometr y ": { "type": "Multipolygon", "Koordinaten": [[[...]]]}} ..... und so weiter

Ich habe Koordinaten entfernt, weil es zu viele von ihnen.

Meine Funktionen werden von mapserver erzeugt und in .MAP Datei konfiguriert, die wie folgt aussieht:

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

Haben Sie einzigartige IDs für Ihre Funktionen? Wenn Sie Ihre Features von einem Geoserver oder einem Server erhalten, prüfen Sie, ob sie eindeutige IDs haben. Wenn Sie nicht die eindeutigen IDs auf Ihrem Server erstellen, sollte das Problem verschwinden. Außerdem verwenden Sie eine URL-Funktion anstelle eines Loaders. – pavlos

+0

@pavlos Ich habe diesen Code von früheren Entwickler geerbt. Das Ändern des Ladeprogramms in die URL-Funktion löst das Problem nicht. Über eindeutige IDs: Ich habe meine Fragen aktualisiert und ein Beispiel für eine Feature-Antwort hinzugefügt. Ich habe eine eindeutige Spalte in db, die 'ogc_fid' heißt. – nospor

+0

Können Sie 'ogc_fid' auf' fid' ???? – pavlos

Antwort

1

die Diskussion zusammenzufassen und die ursprüngliche Frage beantworten:

Die vom Server gesendet Bedarf Funktionen ein Attribut mit dem Namen id, das bei jeder Anfrage für das Feature eindeutig und identisch sein muss.

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

Siehe this GitHub Issue für den ursprünglichen Kommentar von ahocevar.

In GeoServer kann dies erreicht werden, wenn Sie eine Kennung in Ihrer Ebene festlegen. Ich denke, es gibt etwas Ähnliches in MapServer gesetzt.