2016-03-24 8 views
0

Ich versuche, die Eigenschaft "SCHULNAME" aus einer Geojson-Datei zu bekommen.Openlayers 3: "undefined" für Geojson-Eigenschaft in einer Schicht

Hier ist ein Ausschnitt aus der GeoJSON Datei:

{"type":"FeatureCollection", 

"crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:OGC:1.3:CRS84"}}, 

"features":[{"type":"Feature","properties":{"spatial_name":"01A01", 
    "spatial_alias":"1. Schulpraktisches Seminar (S) Mitte", 
    "spatial_type":"Point", 
    "SCHULNAME":"1. Schulpraktisches Seminar (S) Mitte", 
    "SCHULART":"Schulpraktisches Seminar", 
    "TRAEGER":"Bezirk", 
    "ZWEIG_01":"Schulpraktisches Seminar", 
    "ZWEIG_02":null, 
    "ZWEIG_03":null, 
    "ZWEIG_04":null, 
    "BEZIRK":"Mitte", 
    "ORTSTEIL":"Wedding", 
    "PLZ":"13353", 
    "ADRESSE":"Tegeler Str. 16", 
    "TELEFON":"4677779713", 
    "FAX":"4677779720", 
    "EMAIL":"<a href=\"mailto:[email protected]\">[email protected]</a>", 
    "INTERNET":null,"LEITUNG":null}, 
"geometry":{"type":"Point", 
    "coordinates":[13.35812948892163,52.54071751171907]}},... 

Hier kann die Funktion ist ein Popup-Fenster mit den Eigenschaften zu öffnen:

map.on('singleclick', function(evt) { 
    var feature = map.forEachFeatureAtPixel(evt.pixel, 
       function(feature, layer) { 
       return feature; 
       }); 
    if (feature) { 
    var coordinate = evt.coordinate; 
    var printCoord = ol.proj.transform(feature.getGeometry().getCoordinates(), 'EPSG:3857','EPSG:4326'); 
    var printProps = feature.getProperties(); 
    PopupContent.innerHTML = '<table style="width:100%">'+ 
           '<tr>' + '<td>'+'<b>Coordinates:</b> ' + Math.round(printCoord[1] * 100)/100 + 'N, ' + Math.round(printCoord[0] * 100)/100 +'E' +'</td>'+'</tr>'+ 
           '<tr>'+'<td>'+"<b>Name:</b> " +printProps.SCHULNAME+'</td>'+'</tr>'+ 
           '</table>'; 
    Popup.setPosition(coordinate); 


    }}); 

Die Koordinaten korrekt angezeigt werden. Für die Eigenschaft "SCHULNAME" bekomme ich das Ergebnis undefined. wenn ich den gleichen Code für die folgende GeoJSON Datei und deren Eigenschaft verwenden jedoch "name" es funktioniert perfekt:

{"type":"FeatureCollection", 
"features":[{"type":"Feature","properties":{"name":"Mitte", 
    "description":"", 
    "cartodb_id":1, 
    "created_at":"2013-09-03T12:32:04+0200", 
    "updated_at":"2013-09-03T12:32:04+0200"}, 
"geometry":{"type":"MultiPolygon", 
    "coordinates":[[[[13.403528,52.540212], ... 

Was bin ich hier?

+0

Sind Sie sicher, dass Sie die erwartete Funktion erhalten? –

+0

Wie schon gesagt: Die Koordinaten werden korrekt angezeigt. Ich bin mir ziemlich sicher, dass ich die erwartete Funktion bekommen werde. – TotoSchillaci

+0

@ user3725485 Bit Die Koordinaten sind nur die Koordinaten des Klickereignisses. Könnte es ein anderes Feature geben, das nah genug für ein Match ist? –

Antwort

0

Ich fand heraus, was der Grund für das Problem war, aber ich würde eine Erklärung von Ihnen schätzen, da ich nicht verstehe, warum das passieren könnte.

Ich habe ein ol.source.Cluster für die erste GeoJSON Schicht und bezeichnet die Quelle dieser ol.layer.Vector Schicht zu dieser Quelle Cluster:

var schoolCluster = new ol.source.Cluster({ 
    source:new ol.source.Vector({ 
     url: 'Schools.geojson', 
     format: new ol.format.GeoJSON(), 
    }) 
}); 

var Schools = new ol.layer.Vector({ 
    source: schoolCluster, 
    style: iconStyleSchools 
    }); 

Aber irgendwie funktioniert es nur um die Eigenschaften zu erhalten, wenn ich die Quelle direkt in die verweisen Vektor-Ebene ohne Cluster wie folgt aus:

var Schools = new ol.layer.Vector({ 
    source:new ol.source.Vector({ 
     url: 'Schools.geojson', 
     format: new ol.format.GeoJSON(), 
    }), 
    style: iconStyleSchools 
    }); 

Mit diesem Code, den ich alle Eigenschaften bekommen konnte ich von der GeoJSON Datei gesucht und bekommen keinen undefined mehr. Könnte jemand erklären warum?