Openlayers 3 GetClosesFeatureToCoordinate不适用于点
我做了一个函数,使功能更接近单击的功能。我使用Openlayers 3.9.0和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
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问题。事件本身应该有坐标。然后删除该特性,将这些坐标传递给函数并将该特性放回原处。