我做了一个函数来获得单击的特征。我使用Openlayers 3.9.0和getClosestFeatureToCoordinate
方法。
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")) ;
});
但是在以下情况下
如果我点击“你”多边形(自下而上)我会得到“你”,而不是说“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'));
})
仍然没有。那么,我如何解决这个问题呢?
由于
答案 0 :(得分:0)
当您点击" u" polygon - 到它的距离是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);
}
})