Как заставить свойства GeoJSON отображаться во всплывающем окне openlayers 3 при использовании CLUSTERS?

Я построил относительно простую карту openlayers и пытаюсь, чтобы мои свойства geoJSON отображались во всплывающем окне при нажатии, но независимо от того, что я пытаюсь, он либо возвращает имя геометрии object Object, либо Undefined. Я думаю, что openlayers хранит данные кластера как массив функций, а не несколько отдельных функций? Вот код для моей функции по клику:

var
   container = document.getElementById('popup'),
   content_element = document.getElementById('popup-content'),
   closer = document.getElementById('popup-closer');

closer.onclick = function() {
overlay.setPosition(undefined);
closer.blur();
return false;
};

var overlay = new ol.Overlay({
element: container,
positioning: 'bottom-center',
stopEvent: false
});

map.addOverlay(overlay);
// display popup on click
map.on('click', function(evt) {
var feature = map.forEachFeatureAtPixel(evt.pixel,
  function(feature, layer) {
    return feature;
  });
if (feature) {
var geometry = feature.getGeometry();
    var coord = geometry.getCoordinates();

    var content =coord;
//------------------------------------------------------------------------------
    content += '<h5>' + feature.get('MMSI') + '</h5>';
//--------^^^^^^^ This does not work for clusters ^^^^^^------------------------
//------------------------------------------------------------------------------
    content_element.innerHTML = content;
    overlay.setPosition(coord);
} else {

}

Мне не нужны свойства фактических кластеров, но мне нужны свойства одной точки (после увеличения и кластеры разделились на отдельные точки). Любая помощь высоко ценится!


person trevinator    schedule 09.07.2015    source источник


Ответы (1)


Попробуйте так:

map.on('click', function(evt) {
    var ft = map.forEachFeatureAtPixel(evt.pixel, function(f, l){return f;});
    if (ft) {
        var features = ft.get('features'); //this is from the official examples
        features.forEach(function(feature){

            //assumption there is a 'name' property
            console.info(feature.get('name'));

        });
    }
});
person Jonatas Walker    schedule 09.07.2015
comment
Аааа! Большое спасибо! Некоторое время работал над этой проблемой... теперь кажется все просто... - person trevinator; 09.07.2015