2016-10-31 3 views
0

Ich versuche, Features zu meiner OpenLayers-Map hinzuzufügen, indem ich einen öffentlich zugänglichen WFS-Server abfrage, der GML-Daten bereitstellt.Hinzufügen von Vektordaten - GML-Format mit WFS-Transport (möglicher Fehler?)

// initalize the map 
var map = new ol.Map({ 
    layers: [ 
     new ol.layer.Tile({ 
      // OpenLayers public map server 
      source: new ol.source.OSM() 
     }), 
    ], 
    target: 'map', 
    view: new ol.View({ 
     // center on Murica 
     center: [-10997148, 4569099], 
     zoom: 4 
    }) 
}); 

var xmlhttp = new XMLHttpRequest(); 

// execute this once the remote GML xml document has loaded 
xmlhttp.onload = function() { 

    console.log("GML XML document retrieved. executing onload handler:"); 
    var format = new ol.format.GML3(); 

    var xmlDoc = xmlhttp.responseXML; 

    console.log("you will see multiple features in the xml: "); 
    console.log(xmlDoc); 

    // Read and parse all features in XML document 
    var features = format.readFeatures(xmlDoc, { 
     featureProjection: 'EPSG:4326', 
     dataProjection: 'EPSG:3857' 
    }); 

    console.log("for some reason only a single feature will have been added: ") 
    console.log(features); 
    console.log("Why is this?"); 

    var vector = new ol.layer.Vector({ 
     source: new ol.source.Vector({ 
      format: format 
     }) 
    }); 

    // Add features to the layer's source 
    vector.getSource().addFeatures(features); 

    map.addLayer(vector); 
}; 

// configure a GET request 
xmlhttp.open("GET", "http://geoint.nrlssc.navy.mil/dnc/wfs/DNC-WORLD/feature/merged?version=1.1.0&request=GetFeature&typename=DNC_APPROACH_LIBRARY_BOUNDARIES&srsname=3857", 
    true); 

// trigger the GET request 
xmlhttp.send(); 

Hier ist ein CodePen mit dem Bug demonstriert.

http://codepen.io/anon/pen/yamOEK

Hier können Sie sich in eine einzelne HTML-Datei verpackt herunterladen: https://drive.google.com/open?id=0B6L3fhx8G3H_cmp1d3hHOXNKNHM

Ich kann erfolgreich eine ganze Feature Sammlung mit mehreren Funktionen in meine Variable xmlDoc herunterladen, einen gültigen Typnamen verwendet wird. Wenn ich jedoch format.ReadFeatures (xmlDoc) verwende, scheint der OpenLayers GML-Format-Parser nur ein einzelnes Feature aus der Feature-Sammlung zu extrahieren, während es viel mehr extrahieren sollte.

Es wäre wunderbar, wenn jemand einen Blick darauf werfen könnte, ob sie herausfinden können, ob ich etwas Dummes falsch mache oder es ein legitimer Fehler in OpenLayers3 ist. Vielen Dank für alle, die helfen können!

+0

Cross-Posted als https://gis.stackexchange.com/q/216125/115 – PolyGeo

Antwort

0

Einzel Funktion wird hinzugefügt, weil gesamtes Dokument so statt format.readFeatures (xmlDoc) gelesen wird, analysiert jedes feature.Here Quellcode ist:

var vector; 
    var map = new ol.Map({ 
     layers: [ 
      new ol.layer.Tile({ 
       source: new ol.source.OSM() 
      }), 
     ], 
     target: 'map', 
     view: new ol.View({ 
      center: [-8197020.761224195,8244563.818176944], 
      zoom: 4 
     }) 
    }); 

    var xmlhttp = new XMLHttpRequest(); 
    xmlhttp.onload = function() { 
     var format = new ol.format.GML3(); 
     var xmlDoc = xmlhttp.responseXML; 
     vector = new ol.layer.Vector({ 
      source: new ol.source.Vector({ 
       format: format 
      }) 
     }); 

     for (var i = 1; i < xmlDoc.children[0].children.length; i++) { 
      var features = format.readFeatures(xmlDoc.children[0].children[i], { 
       featureProjection: 'EPSG:4326' 
      }); 


      features.getGeometry().transform('EPSG:4326', 'EPSG:3857'); 
      vector.getSource().addFeature(features); 
     } 

     map.addLayer(vector); 
     map.getView().fit(vector.getSource().getExtent(), map.getSize()) 
    }; 

    xmlhttp.open("GET", "http://geoint.nrlssc.navy.mil/dnc/wfs/DNC-WORLD/feature/merged?version=1.1.0&request=GetFeature&typename=DNC_APPROACH_LIBRARY_BOUNDARIES&srsname=3857", 
     true); 

    // trigger the GET request 
    xmlhttp.send(); 

Hier ist ein CodePen Ergebnis. http://codepen.io/anon/pen/bwXrwJ

+0

Wenn die obige Lösung nützlich ist .. bitte upvote. – dev9

+1

IT arbeitet Lob dev9 Gott aller EPSGs –

Verwandte Themen