需求:
根据后台传过来的对象id进行定位。这里是后台传过来的id不是前端交互得来的,所以就不要给我说点击对象后能获取到对象的位置了。
背景:
网上好多问这个问题的也看了supermap的技术问答社区,给出的答案是在数据属性表里面增加坐标字段,但是一个场景的对象往往成百上千所以你懂的!
原理:
想办法拿到要定位的对象的属性。
举例:
我要定位的对象id是【1045】,所在图层的图层名为【layer1】,至于为什么会一直图层名就不解释了,超图的数据格式:数据源——数据集——SMID;呈现后图层——数据集——ID。不懂得自己去补课。
代码:
let layerName = "layer1"
let id = "1045";
let selectObj = null;
let layer = this.$globe.scene.layers.find(layerName);
let pickObjects = layer._context._pickObjects;
for(let obj in pickObjects){
if(pickObjects[obj].id == id){
selectObj = pickObjects[obj];
console.log(selectObj );
let cartesian3 = selectObj.primitive._position;
let cartographic=ellipsoid.cartesianToCartographic(cartesian3);
let lon = Cesium.Math.toDegrees(cartographic.longitude);
let lat = Cesium.Math.toDegrees(cartographic.latitude);
let height = cartographic.height;
console.log( lon,lat,height );//位置一
console.log( selectObj.primitive.lon, selectObj.primitive.lat);//位置二
break;
}
}
结果:
这里能拿到两个位置但都是一样的。坐标经纬度都给你了 接下来的操作就不用说了。