Openlayers 3 GetClosesFeatureToCoordinate不适用于点

Openlayers 3 GetClosesFeatureToCoordinate不适用于点,openlayers-3,Openlayers 3,我做了一个函数,使功能更接近单击的功能。我使用Openlayers 3.9.0和getClosestFeature来协调方法 var select = new ol.interaction.Select();//simple click interaction map.addInteraction(select);//add it to the map select.on('select', function(e) { //get the extent of the first s

我做了一个函数,使功能更接近单击的功能。我使用Openlayers 3.9.0和
getClosestFeature来协调
方法

var select = new ol.interaction.Select();//simple click interaction
 map.addInteraction(select);//add it to the map

 select.on('select', function(e) {

   //get the extent of the first selected feature 
    var aa = e.selected[0].getGeometry().getExtent();

   //in case of line or polygon get the center of that extent 
    var oo = ol.extent.getCenter(aa);

   //use it to get the name of the closest feature
   console.log((sourceVector.getClosestFeatureToCoordinate(oo)).get("mylayer_name")) ;
 });
但在如下情况下

如果我点击“u”多边形(从下到下),我得到的是“u”,而不是说“e” 如果单击任何点,我将获得其名称,而不是最近要素的名称。我点击“testpoint9”,得到的是“testpoint9”,而不是“u”或“e”。我点击“h”,得到的是“h”,而不是“p”或“k”

所以可能与点有关,所以我将
select.on
事件函数改为

select.on('select', function(e) {
    var closestType = e.selected[0].getGeometry().getType();
    var oo;
    if (closestType === 'Point'){
        oo = e.selected[0].getGeometry().getCoordinates();
    }
    else{
        var aa = e.selected[0].getGeometry().getExtent();
        oo = ol.extent.getCenter(aa);
    }

    console.log("---------------------------------------------------");
    console.log("Name: "+sourceVector.getClosestFeatureToCoordinate(oo).get('mylayer_name'));
})
还是什么都没有。那么,我如何解决这个问题呢

当您在“u”形多边形内单击时,感谢您-到它的距离为0。 当你点击某个东西时,它总是离你最近的。 在那里,您可以做的是从层中删除单击的元素,运行算法(没有单击点)并将点放回层上。 如果您担心该点可能长时间不可见(但不应该),请在算法执行期间将其放置在另一层中

    select.on('select', function(e) {
        var clicked = e.selected[0];
        sourceVector.removeFeature(clicked);
        var closest = sourceVector.getClosestFeatureToCoordinate(e.coordinate);
        sourceVector.addFeature(clicked);
        var closestType = closest.getType();
        if (closestType === 'Point'){
            oo = e.selected[0].getGeometry().getCoordinates();
        }
        else{
            var aa = e.selected[0].getGeometry().getExtent();
            oo = ol.extent.getCenter(aa);
        }
    })

感谢您的时间和代码,但是,首先,当您使用
var-closest=sourceVector.getClosestFeatureToCoordinate(oo)时oo的值是多少?它不是空的吗?更重要的是,如果我正确地得到了你,如果我必须删除该功能,以获得坐标,那么我基本上必须获得点击地图的坐标。我可以使用而不必删除/添加单击的功能。但在这种情况下,我刚才单击的功能将始终最接近这些地图坐标,因此我们回到起点。要么我根本不明白,要么这是一个严重的OL问题。事件本身应该有坐标。然后删除该特性,将这些坐标传递给函数并将该特性放回原处。