在进入地图时,会获取到一个地区范围标记起来,然后通过queryByGeometry 查询出来当前范围内的所有建筑元素也标注出来。
如下图:
然后我现在点击这个范围内的建筑,通过点击的坐标想要获取到点击建筑的feature的 SmID,
但是经常获取不到,有时又个别的能获取到,
下面是我获取的方法:
// 地图点击
map.on('singleclick', function(e) {
let coordinate = e.coordinate;
map.removeLayer(clickBuildhLayer);
var point = new ol.geom.Point(coordinate)
var param = new SuperMap.QueryByGeometryParameters({
queryParams: {
name: "build@build"
},
geometry: point,
});
new ol.supermap.QueryService(url).queryByGeometry(param, function(serviceResult) {
console.log(serviceResult)
if (serviceResult.result.recordsets.length > 0) {
if (serviceResult.result.recordsets[0].features.features[0] != undefined) {
var vectorSource = new ol.source.Vector({features: (new
ol.format.GeoJSON()).readFeatures(serviceResult.result.recordsets[0].features),
wrapX: false
});
var clickBuildhLayer = new ol.layer.Vector({
source: vectorSource,
zIndex: 6,
style: new ol.style.Style({
stroke: new ol.style.Stroke({
color: 'orange',
width: 5,
}),
})
});
map.addLayer(clickBuildhLayer)
var smid = serviceResult.result.recordsets[0].features.features[0].properties.SmID;
console.log(smid)
}
} else {
alert('数据集里没有查到')
}
})
})
点击大部分查询都是查询不到,返回一个空数组:
只有很少点击才能返回,点击同一个建筑,都是有时能返回有时返不回来
想问下大佬们 这个获取的方法对吗? 还有什么方法可以获取到