前面两个属性不用管,主要时后面三个。
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的参考系。