Map 类包含用于存储、管理和叠加 2D 和 3D 查看通用图层的属性和方法。可以在地图中添加和移除图层,但可通过 MapView(用于在 2D 模式下查看数据)或 SceneView(用于在 3D 模式下查看数据)进行渲染。因此,地图实例是保存图层的简单容器,而视图是显示地图图层和底图并与之交互的方法。
单个地图可由多个视图引用。例如,此示例包含一个在两个单独的视图中可见的地图 —— 一个在 2D 中,另一个在 3D 中。由于一个地图可由同一应用程序中的多个视图访问,因此用户与地图图层的所有交互都将在视图上处理,而不是在地图上处理。
Map 实例是 MapView 和 SceneView 的重要组成部分。应在视图之前创建 Map 对象,以便将其传递到该视图的 map
属性中(例如 MapView.map 、SceneView.map)。
// 加载 Map 和 MapView 模块
require(["geoscene/Map", "geoscene/views/MapView"], function(Map, MapView) {
// Create a Map instance
const myMap = new Map({
basemap: "tianditu-vector"
});
// 创建一个 MapView 实例(用于 2D 查看)并引用地图实例
const view = new MapView({
map: myMap
});
});
构造函数
属性列表
属性 | 类型 | 描述 | 类 | |
---|---|---|---|---|
Collection<Layer> | 更多信息 地图中所有图层的拼合集合。 | 更多信息 | Map | |
Collection<Layer> | 更多信息 地图层次结构中任意位置的表的拼合集合。 | 更多信息 | Map | |
Basemap | 更多信息 指定地图的底图。 | 更多信息 | Map | |
String | 更多信息 类名。 | 更多信息 | Accessor | |
Collection<(FeatureLayer|SceneLayer|SubtypeGroupLayer)> | 更多信息 可编辑图层的集合。 | 更多信息 | Map | |
Ground | 更多信息 指定地图的表面属性。 | 更多信息 | Map | |
Collection<Layer> | 更多信息 业务图层的集合。 | 更多信息 | Map | |
Collection<Layer> | 更多信息 | 更多信息 | Map |
属性详细说明
-
allLayers Collection<Layer>readonly
-
地图中所有图层的扁平集合。此集合包含底图图层、操作图层和地面图层。图层组及其子图层也是这个集合的一部分。底图中的参考图层将始终包含在集合的末尾。
图层不应直接添加到此集合中。它们只能通过 layers、basemap 或 ground 属性添加。
要访问扁平化的表集合,请使用 allTables 属性。
示例代码:// 查找标题为“US Counties”的图层 const foundLayer = map.allLayers.find(function(layer) { return layer.title === "US Counties"; }); // 创建非组图层的过滤集合 const nonGroupLayers = map.allLayers.filter(function(layer) { return !foundLayer.layers; }); // 侦听地图中添加或删除的任何图层 map.allLayers.on("change", function(event) { console.log("Layer added: ", event.added); console.log("Layer removed: ", event.removed); console.log("Layer moved: ", event.moved); });
-
allTables Collection<Layer>readonly起始版本: GeoScene API for JavaScript 4.22
-
地图层次结构中任意位置的扁平化表格集合。除了任何图层组表之外,这将包含地图的表中的各个表。为了使表能够识别,FeatureLayer 属性必须返回
true
。目前,仅识别 要素图层 表.
要访问空间层,请使用 allLayers 属性。
示例代码:// isTable = true 的要素图层。 const foundTable = map.allTables.find(function(table) { // 查找标题为 "US Counties" 的表格 return table.title === "US Counties"; });
-
定地图的底图。底图是一组切片图层,用于为MapView或SceneView以及地图中的其他业务图层提供地理上下文。
此值可以是底图的实例,也可以是下表中列出的字符串之一。
值 源 geoscene-community
中国地图彩色版 geoscene-gray
中国地图灰色版 geoscene-blue
中国地图蓝黑版 geoscene-warm
中国地图暖色版 tianditu-vector
天地图矢量底图 tianditu-image
天地图影像底图 tianditu-topography
天地图地形底图 示例代码:// 在构造函数中设置底图 const map = new Map({ basemap: "tianditu-vector" }); // 创建地图实例后设置底图 map.basemap = "tianditu-vector";
-
起始版本: GeoScene API for JavaScript 4.22
-
类名。类的名称声明格式为
geoscene.folder.className
。
-
editableLayers Collection<(FeatureLayer|SceneLayer|SubtypeGroupLayer)>readonly起始版本: GeoScene API for JavaScript 4.22
-
可编辑图层的集合。如果图层具有编辑功能,而且进行身份验证后的用户具有编辑权限,则图层被视为可编辑。
-
指定地图的表面属性。在 MapView 中,当配置文件包含 ElevationProfileLineGround 时,ElevationProfile 微件使用此属性。在 3D SceneView 中,它使用 ElevationLayers 集合在地图表面上渲染现实世界中的地形或地形变化。
此值可以是 Ground 的实例,或以下字符串之一:
world-elevation
使用 Terrain3D 服务。world-topopathymetry
用于使用 TopoBathy3D 服务。
ground 不能设置为
null
或undefined
,要保证始终包含 Ground 类型的实例。可以通过将 ground 属性设置为新的空 Ground 实例或移除所有地面层来从地面移除高程。- 示例:
示例代码:// 使用世界海拔服务
const map = new Map({ basemap: "tianditu-vector", ground: "world-elevation" });// 使用自定义高程图层覆盖的世界高程图层创建地图
const worldElevation = new ElevationLayer({ url: "//links.geoscene.cn/elevation3d/rest/services/WorldElevation3D/Terrain3D/ImageServer" }); const customElevation = new ElevationLayer({ url: "https://my.geoscene.cn/geoscene/rest/service/MyElevationService/ImageServer" }); const map = new Map({ basemap: "tianditu-vector", ground: new Ground({ layers: [ worldElevation, customElevation ] }) });
-
layers Collection<Layer>autocast
-
业务图层的集合。此属性包含可以查询、分配不同渲染器、分析等的业务图层,例如 FeatureLayers 、WebTileLayers 和 GraphicsLayers。它不包括底图。
图层是表示真实世界现象的一个或多个要素或图形的集合。每个要素都包含一个符号和地理数据,允许其在地图上以具有空间上下文的图形进行渲染。图层中的要素还可能包含数据属性,这些属性提供可在弹出窗口中查看并用于渲染图层的附加信息。
层可以在构造函数中添加,使用 add()或 addMany()方法,或者使用 add()或 addMany()直接添加到层集合中。
在 3D 模式下,对于在地形上渲染的图层,图层的顺序还取决于图层的类型。平铺层(VectorTileLayer,WebTileLayer,WMTSLayer)总是按照图层集合中指定的相同顺序首先绘制。 动态图层(MapImageLayer、ImageryLayer、WMSLayer 和具有高程模式
on-the-ground
的基于要素的图层 ),使用图层集合中的顺序在顶部渲染。示例代码:// 使用数组在 Map 的构造函数中添加图层
let fl = new FeatureLayer(url); let gl = new GraphicsLayer(); let map = new Map({ layers: [fl, gl] }); // 使用add()添加图层 map.addMany([fl, gl]); // 添加图层集合 map.layers.addMany([fl, gl]); // 使用图层集合的push方法添加图层 map.layers.push(fl, gl);
-
tables Collection<Layer>autocast
-
图层实例的集合,这些实例是保存在地图和/或 Web地图中的表。为了使表被识别为这样,FeatureLayer 的 isTable 属性必须返回
true
。可以通过以下选项之一创建表:- 将 URL 引用到要素服务中的表。
- 使用 Layer.fromGeoSceneServerUrl 方法创建要素图层,并使用要素图层的 isTable 属性确认该图层是表。这可以是要素服务或要素集合。
- 使用 Layer.fromPortalItem 方法创建要素图层,并使用要素图层的 isTable 属性确认该要素图层是表。这可以是要素服务或要素集合。
- 创建内存中、非空间的客户端要素图层。
从 4.17 开始,可以将要素服务中的非空间表保存到 WebMap,但尚不支持内存中(要素集合)表。
尚不支持在 GroupLayer 中保留表。如果需要,请将其添加到地图和/或 Web 地图。
目前,仅识别要素服务要素图层。
示例代码:// 此代码段显示如何将表添加到地图的表集合中。 // FeatureLayer.isTable = false const featureLayer = new FeatureLayer({ url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/SF311/FeatureServer/0" }); // FeatureLayer.isTable = true const table = new FeatureLayer({ url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/SF311/FeatureServer/1" }); // 将 featureLayer 添加到地图 map.add(featureLayer); // 为了将表存储在地图的表集合中, // 加载它并确认它是正确的类型。 table.load().then(function() { // 将表添加到集合中 map.tables.add(table); console.log("Table is added to map's table collection"); });
// 此代码段显示如何将表持久化到现有 web 地图 // FeatureLayer.isTable = true const table = new FeatureLayer({ url: "https://services.arcgis.com/V6ZHFr6zdgNZuVG0/arcgis/rest/services/Crash_details_table/FeatureServer/0" }); // 创建 Webmap 实例 const webmap = new WebMap({ portalItem: { id: webmapId } }); // 准备好网络地图后,加载表格并将其添加到网络地图 webmap.when(function() { table.load().then(function() { console.log("Adding table"); // 将表格添加到 webmap 的表格集合 webmap.tables.add(table); }); }); // 在 webmap 上调用 updateFrom 并传入现有视图 webmap.updateFrom(view).then(function() { // 在 web 地图上调用 saveAs(或 save) webmap.saveAs({ // 转换成 new PortalItem() title: "New WebMap" }); });
// 此片段显示如何将内存中的表添加到地图 // 创建包含字段信息的对象数组 const fields = [{ name: "ObjectID", alias: "ObjectID", type: "oid" }, { name: "tree_type", alias: "Tree type", type: "string" }, { name: "species", alias: "Species", type: "string" }]; // 创建包含属性信息的图形数组 const graphics = [{ attributes: { "tree_type": "deciduous", "species": "maple", "ObjectID": 2 } }, { attributes: { "tree_type": "coniferous", "species": "pine", "ObjectID": 3 } }]; // 创建要素图层(要素集合)表 const table = new FeatureLayer({ fields: fields, objectIdField: "ObjectID", source: graphics }); // 检查地图何时准备就绪并加载表格 map.when(function() { table.load().then(function() { console.log("Adding table"); map.tables.add(table); }); });
方法列表
属性 | 返回值类型 | 描述 | 类 | |
---|---|---|---|---|
更多信息 将图层添加到图层集合中。 | 更多信息 | Map | ||
更多信息 将图层或图层数组添加到图层集合中。 | 更多信息 | Map | ||
更多信息 | 更多信息 | Map | ||
Layer | 更多信息 返回基于给定图层 ID 的图层。 | 更多信息 | Map | |
SearchTable | 更多信息 返回基于给定表 ID 的表。 | 更多信息 | Map | |
Layer | 更多信息 从图层集合中删除指定的图层。 | 更多信息 | Map | |
Layer[] | 更多信息 删除所有图层。 | 更多信息 | Map | |
Layer[] | 更多信息 删除指定的图层。 | 更多信息 | Map | |
Layer | 更多信息 更改图层顺序。 | 更多信息 | Map |
方法详细说明
-
add(layer, index)
-
参数:
图层或解析为要添加到图层的图层集合的承诺。
index Numberoptional可以在图层集合中的指定索引处添加图层。如果未指定索引或指定的索引大于当前图层数,则该图层将自动追加到图层集合中的图层列表中,并且索引将归一化。
- 示例:
示例代码:// 可以使用 add() 和 push 方法
// 将图层添加到图层集合 // 使用 add 将图层添加到图层集合
map.add(layer); // 在图层集合的末尾添加一个图层
map.layers.push(layer);
-
addMany(layers, index)
-
参数:
要添加到图层集合的图层。
index Numberoptional可以在 layers 集合中的指定索引处添加层。 如果未指定索引或指定的索引大于当前层数,则该层会自动附加到 layers 集合中的层列表中,并标准化索引 。
- 示例:
示例代码:// 可以使用 addMany 和 push 方法 // 将图层添加到图层集合 // 使用 addMany 将图层数组添加到图层集合 map.addMany([layer, layer2]); // 使用 push 方法将图层添加到图层集合 map.layers.push(layer, layer2);
-
destroy()起始版本: GeoScene API for JavaScript 4.22
-
销毁地图和所有相关资源,包括其图层、底图、表格和地面。 一旦地图被摧毁,这些就不能再使用了。 为了防止这些对象被破坏,请在调用
destroy()
之前将它们从地图中移除。// 通过从地图中移除图层来防止图层被破坏 const layers = map.layers.removeAll(); // 通过从地图中删除它们来防止表被破坏 const tables = map.tables.removeAll(); // 从地图中取消设置底图,使其不被破坏 const basemap = map.basemap; map.basemap = null; // 从地图中取消设置地面,使其不会被破坏 const ground = map.ground; map.ground = null; // 销毁地图和任何剩余的相关资源 map.destroy();
-
findLayerById(layerId){Layer}
-
返回基于给定图层 ID 的图层。
参数:layerId String分配给图层的 ID。
返回值:类型 描述 Layer 返回请求的图层对象。
-
findTableById(tableId){SearchTable}起始版本: GeoScene API for JavaScript 4.22
-
返回基于给定表 ID 的表。
参数:tableId String分配给表的 ID。
返回值:类型 描述 SearchTable 返回请求的表对象。
-
reorder(layer, index){Layer}
-
改图层顺序。添加的第一个图层始终是基础图层,即使其顺序已更改。调用此方法时,将发出更改事件。
在 3D 模式下,对于在地形上渲染的图层,图层的顺序还取决于图层的类型。平铺层(VectorTileLayer,WebTileLayer,WMTSLayer)总是按照图层集合中指定的相同顺序首先绘制。 动态图层(MapImageLayer、ImageryLayer、WMSLayer 和具有高程模式
on-the-ground
的基于要素的图层)使用图层集合中的顺序在顶部渲染。参数:layer Layer要移动的图层。
index Number用于放置图层的索引位置。最底部图层的索引为
0
。返回值:类型 描述 Layer 返回已移动的图层。