前面两个属性不用管,主要时后面三个。
1、先看position,position用来确定照相机的位置,照相机就像我们人眼一样,position意在确定人是位于哪个地方开始看的。
position主要的参数latitude(经度)、longitude(维度)、z(高程)。
2、heading(方向)是旋转角度,确定好position位置,那就可以确定视角的水平角度,10即向右旋转10°。
3、tilt(倾斜),如上图所示,绿色的点为照相机的位置(即人眼睛的位置)。y为照相机到地面的垂线,x为视线,t就是tilt,通过控制tilt的大小,就可以控制视线的垂直角度。
应用:
方法一:经过了一番测试,想用camera可以用clone方法对scene view的camera进行克隆,然后将克隆得到的结果进行修改,再用goTo()调用修改的结果,这样camera才能够用。代码如下
var view = new SceneView({ container: "viewDiv", map: map, extent: kansasExtent }); document.getElementById('testbutton').addEventListener("click",function(){ var cam = view.camera.clone(); cam.heading = -90; view.goTo(cam); }这种方法有一个问题,就是如果时页面还没渲染完时,clone()方法是会报错的。所以这里用了一个按钮来出发clone()致使避开了一个坑。
方法二:new一个camera然后直接用goTo(camera)。这里记得加入camera类和point类
require([ "esri/Map", "esri/views/SceneView", "esri/layers/SceneLayer", "esri/geometry/Point", "esri/Camera", "dojo/domReady!" ], function(Map, SceneView,SceneLayer, Point, Camera) { document.getElementById('testbutton').addEventListener("click",function(){ var cam = new Camera({ position: new Point({ x: 396625.65327835083, y: 3126900.9483306026, z: 700, spatialReference: { wkid: 4547 } }), heading: 20, // facing due south tilt: 45 // bird's eye view }); view.goTo(cam); console.log(cam); console.log('相机执行完毕'); }) })对于position,也可以直接设置,这样就不用加point类然后通过new Point来设置了。
position: { x: 396625.65327835083, y: 3126900.9483306026, z: 700, spatialReference: { wkid: 4547 } }方法二的巨坑:在new camera时必须要设置position的值,这里官网只在例子里说了,一开始我也没发现,一直报错。而且这里说了Point默认的坐标系时WGS84,如果你的坐标系不是WGS84,也没有给点设置参考系的话,camera会失效的。所以当参考系不是WGS84时必须通过设置position中的spatialReference属性来设置好照相机position的参考系。