Cesium获取视野边界的方法
Cesium.js获取视野边界坐标
本文没有太多需要手写的逻辑,只是对Cesium理解不够深、没有中文文档的情况下,查询起来比较费时,下面就是总结出来的方法。转载需注明出处。
1. 利用屏幕坐标转换
用百度搜索到的大部分雷同的博文(都是抄同一个人的)都是基于这个方法,这个方法适用于屏幕坐标落在球体上的情况,如果屏幕坐标落在球体之外,屏幕坐标转世界坐标会出错算出undefined。以下代码示例引自Super洛伽博客。
// 屏幕坐标转世界坐标 var pick= new Cesium.Cartesian2(window.innerWidth,window.innerHeight); var cartesian = scene.globe.pick(viewer.camera.getPickRay(pick), scene); // 世界坐标转地理坐标(弧度) var cartographic = scene.globe.ellipsoid.cartesianToCartographic(cartesian); // 或 var cartographic = Cesium.Cartographic.fromCartesian(cartesian); //地理坐标(弧度)转经纬度坐标 var point=[ cartographic.longitude / Math.PI * 180, cartographic.latitude / Math.PI * 180];
2. 利用方法viewer.camera.computeViewRectangle
因为要考虑屏幕点落在球体外的情况,我选择了google…然后找到了这个方法computeViewRectangle
:计算视野矩形四条边界的地理坐标(弧度)。
得到的返回值示例:
result = { west: 2.024049072178046, south: 0.6802243852966677, east: 2.025114792449733, north: 0.681132284488564 }
然后通过弧度转经纬度,即可获取视野边界的经纬度坐标。
代码示例如下:
var rectangle = viewer.camera.computeViewRectangle(); // 弧度转为经纬度,west为左(西)侧边界的经度,以下类推 var west =rectangle.west / Math.PI * 180; var north = rectangle.north / Math.PI * 180; var east = rectangle.east / Math.PI * 180; var south = rectangle.south / Math.PI * 180; // 鉴于高德、leaflet获取的边界都是southwest和northeast字段来表示,本例保持一致性 var bounds = { southwest: { lng: west, lat: south }, northeast: { lng: east, lat: north } } return bounds;
这个故事告诉我们善用google…
本文榕树岛原创,转载需注明出处。