使用Cesium快一年了,就开源的三维地图引擎而言,个人认为是最方便的了。
在使用过程中遇到了很多的问题,如cgc2000,地图出现暗灰,加载互联网地图显示出现模糊等现像。在网上有很多资料,但是我发现大部分人是说不到重点,或乱写一通,总之最可怕的是知其然而不知其所以然的人,当然最近发现我也是。
1、地图暗灰可以参照
https://www.jianshu.com/p/4c4a6d769dc5该作者个人认为,是个实在人
至于网上其它说的调灰度等均不可信,个人认为可以学习,但实际上没有任何用处,浪费时间
2、加载互联网地图显示出现模糊
https://blog.csdn.net/weixin_46592036/article/details/106206502该作者个人认为,是个写程序的人,见不得一点瑕疵
至于网上说的调整maximumScreenSpaceError等,可以试试也有效果,但是个人认为解决得不是很彻底
3、让我最头痛的问题是进地问题
我在网上查找了很多资料,均能解决一部分问题,总会有很大的可能性进地。
算了编不了,直接说思路:
进地主要是通过鼠标抬高地图时,直接翻到地下面了,考虑的方向是实时检测是否与地面接触,但是因为是三维的是一个地球,所以只能考虑设定一个相机仰角,提前保存好坐标,超过仰角则重置相机。
网上有很多直接通过鼠标事件进行监测,经过测试完全达不到效果,要不是没解决到,要不就是进地后又回弹,使用感觉不好因此我直接修改了Cesium.js的update3D方法代码如下:
function update3D(controller) {
//开始
var scene = controller._scene;
var camera = scene.camera;
var cameraPosition = Cartesian3.clone(camera.position);
var cameraRight = Cartesian3.clone(camera.right);
var cameraDirection = Cartesian3.clone(camera.direction);
var cameraUp = Cartesian3.clone(camera.up);
reactToInput(controller, controller.enableRotate, controller.rotateEventTypes, spin3D, controller.inertiaSpin, '_lastInertiaSpinMovement');
reactToInput(controller, controller.enableZoom, controller.zoomEventTypes, zoom3D, controller.inertiaZoom, '_lastInertiaZoomMovement');
reactToInput(controller, controller.enableTilt, controller.tiltEventTypes, tilt3D, controller.inertiaSpin, '_lastInertiaTiltMovement');
reactToInput(controller, controller.enableLook, controller.lookEventTypes, look3D);
if (scene.mode == SceneMode.MORPHING) {
return;
}
if (scene.mode == SceneMode.SCENE2D) {
return;
}
if(camera.pitch>CesiumMath.toRadians(-20))
{
camera.position = cameraPosition;
camera.right = cameraRight;
camera.direction = cameraDirection;
camera.up = cameraUp;
}
//结束
}
转载请注明原文地址:https://ipadbbs.8miu.com/read-27160.html