在cesium中实现空间查询(思路解析加源码)
空间查询作为GIS数据分析的基本手段,在三维GIS中也是必不可少的,下面就对具体实现做具体介绍
目录
前言
如果你不是GIS专业,那么你对空间查询的也许会很陌生,下面我就简单解释一下什么是空间查询,就在一个范围里面有很多个点,你随手圈出来一部分区域,要查出你圈出来的区域里面的点有哪些,这就是空间查询。
一、获取待查询的点
第一步就是要把我们需要查询的点数据准备好。方法如下:
var res = response.data;
var Towerspoints = [];
for (var i = 0; i < res.length; i++) {
var feature = new Object();
feature.type = "Feature";
feature.properties = { Name: res[i].evid };
feature.geometry = {
type: "Point",
coordinates: [res[i].jingdu, res[i].weidu],
};
Towerspoints.push(feature);
}
TowersCollection = {
type: "FeatureCollection",
features: Towerspoints,
};
二、获取待查询的面
第二步就是要把我们需要查询的范围(就是面对象)数据准备好。方法如下:
var ellipsoid = viewer.scene.globe.ellipsoid;
for (var i = 0; i < arrPoint.length; i++) {
var cartograhpinc = ellipsoid.cartesianToCartographic(arrPoint[i]);
var lng = Cesium.Math.toDegrees(cartograhpinc.longitude); //经度
var lat = Cesium.Math.toDegrees(cartograhpinc.latitude); //维度
searchRegion.push([lng, lat]);
}
var startPoint = ellipsoid.cartesianToCartographic(arrPoint[0]);
var lng_S = Cesium.Math.toDegrees(startPoint.longitude);
var lat_S = Cesium.Math.toDegrees(startPoint.latitude);
searchRegion.push([lng_S, lat_S]);
searchWithin.push(searchRegion);
var searchWithinEntity = Cesium.turf.polygon(searchWithin);
二、面和点求交
这一步就是最后一步了,利用前面俩步我们准备好的点对象和面对象就行空间计算,这里我们利用到了turf库,方法如下:
var ptsWithin = Cesium.turf.pointsWithinPolygon(
TowersCollection,
searchWithinEntity
);
总结
1、主要是cesium对象和turf对象进行互相贯通
2、其次就是利用turf接口进行求交计算
效果如下:
四、更多
这里有个地方需要说明,由于篇幅和时间有限,没有写出所有代码,这里主要列出来了主要实现思路。
如果你还有不了解的地方,
如果你还需要进行cesium交流,
那一起学习探讨吧。
你可以加入我们的基地,我们基地的地址是:450342630(QQ群号)