2. 概述
优质
小牛编辑
133浏览
2023-12-01
Wish3D Earth是用于展示数据的平台,支持多种类型数据的混合加载,可对数据进行标绘、量测、分析等操作。但是这些操作必须是在场景中进行。Wish3D Earth的场景实际就是一个拟真的三维地球。如何构建一个拥有三维球的场景是开始开发的第一步。
2.1. 场景构建
场景页面构建
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Hello World</title> <link href="LSGlobe/Apps/SampleCode/templates/bucket.css" type="text/css" rel="stylesheet" /> <script type="text/javascript" src="LSGlobe/Apps/SampleCode/Sandcastle-header.js"></script> <script type="text/javascript" src="LSGlobe/Build/LSGlobe/LSGlobe.js"></script> </head> <body> <div class="fullSize"></div> <div><h1>Loading...</h1></div> </body> </html>
初始化一个球
function startup(LSGlobe) { 'use strict'; var viewer = new LSGlobe.Viewer('lsGlobe', { baseLayerPicker: false, sceneModePicker: false, fullscreenButton:false, guid:licenseCode, //许可码 licenseUrl:lincenseUrl, //许可地址 }); } if (typeof LSGlobe !== "undefined") { startup(LSGlobe); } else if (typeof require === "function") { require(["LSGlobe"], startup); }
许可配置
许可配置前需要有许可,没有许可场景是无法构建的。本地电脑配置好许可以后可用接口获取到许可码和许可路径。
获取接口
http://localhost:1000/api/license/1.0.0/getLicenseConf
返回信息是许可路径和许可码的拼接字符串用#分个开
2.2. 场景事件
1.初始化事件句柄
var handler = new LSGlobe.ScreenSpaceEventHandler(viewer.scene.canvas);
2.添加事件句柄鼠标操作类型
handler.setInputAction(function (movement){
//movement.position当前的屏幕坐标
}, LSGlobe.ScreenSpaceEventType.LEFT_CLICK);
//LEFT_DOWN左键按下时触发
//LEFT_UP 左键弹起时触发
//LEFT_CLICK 左击时触发
//RIGHT_CLICK 右击时触发
//DOUBLE_CLICK 双击时触发
//MOUSE_MOVE 鼠标移动时触发
3.事件销毁
Handler.destroy();
2.3. 场景坐标转换
1.屏幕坐标转换和世界坐标相互转换
//屏幕坐标转世界坐标
var Pos=scene.pickGlobe(movement.position);
//movement.position 鼠标事件触发时返回的坐标
//世界坐标转屏幕坐标
var movement = LSGlobe.SceneTransforms.wgs84ToWindowCoordinates(scene, pos);
//scene 场景对象 pos世界坐标
2.世界坐标和经纬度相互转换
//世界坐标转换为经纬度
var cartographic = LSGlobe.Cartographic.fromCartesian(Pos);
//Pos世界坐标对象
var currentClickLon = LSGlobe.Math.toDegrees(cartographic.longitude);
//经度
var currentClickLat = LSGlobe.Math.toDegrees(cartographic.latitude);
//纬度
var height= cartographic.height;
//高度
//经纬度换为世界坐标转
var ellipsoid=viewer.scene.globe.ellipsoid;
直接转换
var cartographic=LSGlobe.Cartographic.fromDegrees(longitude,latitude,height);
//longitude经度 latitude维度 height高度
var cartesian3=ellipsoid.cartographicToCartesian(cartographic);
3.经纬度弧度相互转换
经纬度转弧度
LSGlobe.Math.toRadians(degrees)
弧度转经纬度
LSGlobe.Math.toDegrees (radians)