MapView
MapView显示Map实例的2D视图。 必须创建一个MapView实例才能以2D形式渲染Map(及其操作层和基础层)。 要以3D形式渲染地图及其图层,请参见SceneView的文档。
为了使地图在DOM中对用户可见,必须创建一个MapView并至少引用两个对象:一个Map实例和一个DOM元素。 每个都分别在map和container属性中设置。
//创建一个MapView实例(用于2D查看)
var view = new MapView({
map: myMap, // 引用一个Map实例
container: "viewDiv" // 引用DOM元素的ID
background: { // 自动广播新的Color Background()
color: "magenta" // 自动广播为新的Color()
}
});
在MapView中设置地图比例尺
view.scale = 24000; // 在视图上设置1:24,0000比例尺
设置初始范围
//通过center和zoom设置view范围
view.center = [-112, 38];// 将视图的中心点设置为指定的经度/纬度
view.zoom = 13;// 将缩放层次设置为13
//设置视图范围
view.extent = new Extent({
xmin: -9177882,
ymin: 4246761,
xmax: -9176720,
ymax: 4247967,
spatialReference: {
wkid: 102100
}
});
通过调用MapView实例上的.when()方法来执行在加载地图后才能运行的程序。
view.when(function(){
// MapView和地图中的所有资源均已加载。 现在执行其他程序
}, function(error){
// 当视图无法正确加载时,使用errback()函数进行处理
console.log("The view's resources failed to load: ", error);
});
视图属性优先级
Property | Overrides |
viewpoint | extent, center, scale, zoom |
extent | center, scale, zoom |
scale | zoom |
使用goTo()方法也可以进行动画处理,将MapView从一个范围更改或移动到另一个范围。
view.goTo({
center: [-126, 49]
})
.catch(function(error) {
if (error.name != "AbortError") {
console.error(error);
}
});
/***********************************************************************/
var pt = new Point({
latitude: 49,
longitude: -126
});
// 转到给定的点
view.goTo(pt);
/***********************************************************************/
var opts = {
duration: 5000 // 动画时间为5秒
};
// 使用自定义持续时间指向15级
view.goTo({
target: pt,
zoom: 15
}, opts);
/***********************************************************************/
// 使用中心和缩放到同一点
view.goTo({
center: [-126, 49],
zoom: 15
});
/***********************************************************************/
//更新视图的center属性切换点位
var pt = new Point({
x: 12804.24,
y: -1894032.09,
spatialReference: 2027
});
view.center = pt;
/***********************************************************************/
view.goTo({//之前使用过的点位跳转
position: {
x: node.x,
y: node.y,
z: 10000,
spatialReference: {wkid: 4545}
},
heading: 0,
title: 0
// zoom: 5
});
MapView事件
销毁视图以及所有相关资源,包括其地图,弹出窗口和UI元素。 一旦视图被销毁,将无法再使用它们。 为防止这些组件被破坏,请在调用destroy()之前将它们从视图中删除。
// 从视图中删除弹出窗口和图例,以免它们被破坏
const popup = view.popup;
view.popup = null;
view.ui.remove(legend);
// 从视图中取消设置地图,以免破坏地图
const map = view.map;
view.map = null;
// 销毁视图和任何剩余的关联资源
view.destroy();
click事件
// 从视图的click事件中获取屏幕点
view.on("click", function (event) {
// 在单击的位置搜索图形
// 屏幕位置的x,y坐标
// 屏幕坐标定义
view.hitTest(event).then(function (response) {
if (response.results.length) {
var graphic = response.results.filter(function (result) {
// 检查图形是否属于感兴趣的图层
return result.graphic.layer === myLayer;
})[0].graphic;
// 应用结果图形
console.log(graphic.attributes);
}
});
});
// 获取屏幕视角的指针移动事件
view.on("pointer-move", function(event){
// 在悬停位置的图层上搜索图形
// 从hotTest中排除view.graphics
view.hitTest(event, {exclude: view.graphics}).then(function(response){
// 如果返回图形,则对结果进行处理
if (response.results.length){
// do something
}
})
})
监听事件
view.on("click", function(event){
// event是事件处理后的反射
console.log(event.mapPoint);
});
// 当用户单击“ Shift”时触发“指针移动”事件
// 在视图上点击或者移动鼠标
view.on('pointer-move', ["Shift"], function(event){
var point = view2d.toMap({x: event.x, y: event.y});
bufferPoint(point);
});
SceneView
SceneView使用WebGL显示Map或WebScene实例的3D视图。
为了使地图在DOM中对用户可见,SceneView必须同时具有有效的Map实例和在其中进行渲染的高度和宽度非零的DOM元素。
注:在视图开始渲染地图之前,地图中必须有有效的数据,例如操作层或具有基础层的底图。
// 创建具有底图和世界高程的基本SceneView实例
var view = new SceneView({
// Map或WebScene的实例
map: new Map({
basemap: "hybrid"
}),
// DOM元素的ID(也可以是实际的DOM元素)
container: "viewDiv"
});
var view = new SceneView({
map: map,
alphaCompositingEnabled: true,
environment: {
background: {
type: "color",
color: [0, 0, 0, 0]
},
starsEnabled: false,
atmosphereEnabled: false
}
})
构造一个SceneView后,它可能不会立即准备好显示。 例如,可能需要先加载地图数据以确定视图的spatialReference,否则DOM容器可能尚未具有非零大小。 许多视图方法(例如hitTest或goTo)都需要先准备好视图,然后才能使用它们。
可以通过goTo()和视图属性以编程方式导航视图,也可以使用鼠标,键盘或触摸输入进行交互。 默认情况下,SceneView导航处于启用状态,包括鼠标,键盘和触摸的交互,如下表所述。 触摸互动可在任何支持触摸的显示器或笔记本电脑屏幕上进行。
传统的2D映射属性(例如比例,缩放,中心和范围)在3D中并不总是能很好地工作。 例如,在地球仪的背景下查看时,地图的比例不清晰。 因此,SceneView在尽力而为的基础上支持这些属性,但有某些限制(有关更多信息,请参见各个属性的文档)。
SceneView支持两种不同的查看模式,全局的(上方的左图)和局部的(上方的右图),由viewingMode属性指定。 全球场景将地球渲染为地球,而局部场景则将表面渲染为平面。 本地模式允许在本地化或裁剪的区域中导航和显示功能。 在两种查看模式下,用户都可以通过将esri / Ground#navigationConstraint#type设置为none来在地面以下导航相机。
基于视图的空间参考确定查看模式(如果用户未明确设置)。 如果空间参考是Web Mercator或WGS84,则viewingMode将默认为global。 对于任何其他空间参考,viewingMode将默认为本地。
支持坐标:
SceneView在全局场景中支持以下坐标系:
具有这些坐标系的场景具有以下限制:
(1)不支持动态图层,矢量平铺图层和场景图层
(2)当前无法正确显示日光
(3)无法保存到门户项目
在局部场景中,支持以下坐标系:
注:SceneView不支持多点几何的渲染。