admin管理员组文章数量:1570427
背景:
由于entity实体过多,而又要一次性加载,所以用聚合(后台聚合),前端cesium也可以聚合,cesium前端渲染大量点很快很快的,但是由于请求后台时数据量太大,光请求时间都很长。不能忍受,所以改为后台聚合。后台聚合用的是pg的空间函数。前端去后台请求时 需要要携带当前屏幕所在地理范围参数(经纬度格式)
获取当前屏幕所在地理范围:
getViewExtend() {
let params = {};
let extend = viewer.cameraputeViewRectangle();
if (typeof extend === "undefined") {
//2D下会可能拾取不到坐标,extend返回undefined,所以做以下转换
let canvas = viewer.scene.canvas;
let upperLeft = new Cesium.Cartesian2(0, 0);//canvas左上角坐标转2d坐标
let lowerRight = new Cesium.Cartesian2(
canvas.clientWidth,
canvas.clientHeight
);//canvas右下角坐标转2d坐标
let ellipsoid = viewer.scene.globe.ellipsoid;
let upperLeft3 = viewer.camera.pickEllipsoid(
upperLeft,
ellipsoid
);//2D转3D世界坐标
let lowerRight3 = viewer.camera.pickEllipsoid(
lowerRight,
ellipsoid
);//2D转3D世界坐标
let upperLeftCartographic = viewer.scene.globe.ellipsoid.cartesianToCartographic(
upperLeft3
);//3D世界坐标转弧度
let lowerRightCartographic= viewer.scene.globe.ellipsoid.cartesianToCartographic(
lowerRight3
);//3D世界坐标转弧度
let minx = Cesium.Math.toDegrees(upperLeftCartographic.longitude);//弧度转经纬度
let maxx = Cesium.Math.toDegrees(lowerRightCartographic.longitude);//弧度转经纬度
let miny = Cesium.Math.toDegrees(lowerRightCartographic.latitude);//弧度转经纬度
let maxy = Cesium.Math.toDegrees(upperLeftCartographic.latitude);//弧度转经纬度
console.log("经度:" + minx + "----" + maxx);
console.log("纬度:" + miny + "----" + maxy);
params.minx = minx;
params.maxx = maxx;
params.miny = miny;
params.maxy = maxy;
} else {
//3D获取方式
params.maxx = Cesium.Math.toDegrees(extend.east);
params.maxy = Cesium.Math.toDegrees(extend.north);
params.minx = Cesium.Math.toDegrees(extend.west);
params.miny = Cesium.Math.toDegrees(extend.south);
}
return params;//返回屏幕所在经纬度范围
}
版权声明:本文标题:Cesium 获取屏幕窗口经纬度范围(2D和3D) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1727668961a1124959.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论