Javascript 使用集群时,如何使GeoJSON属性显示在openlayers 3弹出窗口中?

Javascript 使用集群时,如何使GeoJSON属性显示在openlayers 3弹出窗口中?,javascript,geojson,openlayers-3,Javascript,Geojson,Openlayers 3,我已经构建了一个相对简单的openlayers映射,我正在尝试让我的geoJSON属性显示在我的点击弹出窗口中,但无论我尝试什么,它要么返回几何体名称对象对象要么未定义。我认为openlayers将集群数据存储为一系列特性,而不是多个单独的特性?以下是我的点击功能的代码: var container = document.getElementById('popup'), content_element = document.getElementById('popup-content'

我已经构建了一个相对简单的openlayers映射,我正在尝试让我的geoJSON属性显示在我的点击弹出窗口中,但无论我尝试什么,它要么返回几何体名称
对象对象
要么
未定义
。我认为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 {

}
var
container=document.getElementById('popup'),
content\u element=document.getElementById('popup-content'),
closer=document.getElementById('popup-closer');
closer.onclick=函数(){
覆盖设置位置(未定义);
closer.blur();
返回false;
};
var overlay=新ol.overlay({
元素:容器,
定位:'底部中心',
stopEvent:false
});
map.addOverlay(覆盖);
//单击时显示弹出窗口
映射打开('click',函数(evt){
var feature=map.forEachFeatureAtPixel(evt.pixel,
功能(特征、图层){
返回特性;
});
如果(功能){
var geometry=feature.getGeometry();
var coord=geometry.getCoordinates();
var含量=坐标;
//------------------------------------------------------------------------------
内容+=''+功能。获取('MMSI')+'';
//--------^^^^^^^这不适用于集群^^^^^^------------------------
//------------------------------------------------------------------------------
content\u element.innerHTML=内容;
覆盖。设置位置(坐标);
}否则{
}
我不需要实际群集的属性,但我需要单个点的属性(一旦放大,群集已分离为单个点)。非常感谢您的帮助!

请尝试以下方法:

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'));

        });
    }
});
试着这样做:

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'));

        });
    }
});

啊哈!非常感谢!已经研究这个问题一段时间了…现在看起来有点简单…啊哈!非常感谢!已经研究这个问题一段时间了…现在看起来有点简单。。。