Map 类包含了在 2D 和 3D 视图中存储、管理和叠加图层的通用属性和方法。通过 Map 类可以添加或移除图层,但图层的渲染是通过 MapView (2D 视图) 和 SceneView (3D视图) 类实现。因此,地图实例是保存图层的简单容器,而视图类才是显示地图图层和底图,并实现交互的类。
单个地图可由多个视图引用。例如,此示例包含可在两个单独视图 (一个位于 2D 中,另一个位于 3D 中) 中可见的单一地图。由于一个地图可由同一应用程序中的多个视图访问,因此用户与地图图层的所有交互都将在视图上处理,而不是在地图上处理。
地图实例是 MapView 和 SceneView 中的一个重要属性。地图对象要先于视图对象创建,然后将它赋予视图的 map
属性 (MapView.map、SceneView.map)。
// Load the Map and MapView modules
require(["geoscene/Map", "geoscene/views/MapView"], function(Map, MapView) {
// Create a Map instance
const myMap = new Map({
basemap: "tianditu-vector"
});
// Create a MapView instance (for 2D viewing) and reference the map instance
const view = new MapView({
map: myMap
});
});
构造函数
属性概述
名称 | 类型 | 描述 | 类 |
---|---|---|---|
Collection<Layer> | 地图中所有图层的扁平化集合。 更多详情 | 地图 | |
Collection<Layer> | 地图层次结构中任意位置的表的扁平化集合。 更多详情 | 地图 | |
Basemap | 指定地图的底图。 更多详情 | 地图 | |
String | 类的名称。 更多详情 | Accessor | |
Collection<(FeatureLayer|SceneLayer|SubtypeGroupLayer)> | 可编辑图层的集合。 更多详情 | 地图 | |
Ground | 指定地图的表面属性。 更多详情 | 地图 | |
Collection<Layer> | 业务图层的集合。 更多详情 | 地图 | |
Collection<Layer> | 更多详情 | 地图 |
属性详细信息
-
allLayers Collection<Layer>readonly
-
地图中所有图层的扁平化集合。此集合包含底图图层、业务图层和地面图层。图层组及其子图层也是此集合的一部分。底图中的参考图层将始终包含在集合的末尾。
不应将图层直接添加到此集合中。它们只能通过 layers、basemap 或 ground 属性进行添加。
若要访问表的扁平化集合,请改为使用 allTables 属性。
示例// Find a layer with title "US Counties" const foundLayer = map.allLayers.find(function(layer) { return layer.title === "US Counties"; }); // Create a filtered collection of the non-group layers const nonGroupLayers = map.allLayers.filter(function(layer) { return !foundLayer.layers; }); // Listen for any layer being added or removed in the Map 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 Maps SDK for JavaScript 4.17
-
地图层次结构中任意位置的表的扁平化集合。这将包含地图表中的单个表,以及任何图层组表。为了以此方式识别表,FeatureLayer 属性必须返回
true
。目前,仅识别要素图层表。
要访问空间图层,请改为使用 allLayers 属性。
示例// A feature layer where isTable = true. const foundTable = map.allTables.find(function(table) { // Find a table with title "US Counties" return table.title === "US Counties"; });
-
指定地图的底图。底图是一组切片图层,用于为 MapView 或 SceneView 以及地图中的其他业务图层提供地理上下文。
此值可以是 Basemap 实例,也可以是下表中列出的字符串之一。
值 源 geoscene-community
中国地图彩色版 geoscene-gray
中国地图灰色版 geoscene-blue
中国地图蓝黑版 geoscene-warm
中国地图暖色版 tianditu-vector
天地图矢量底图 tianditu-image
天地图影像底图 tianditu-topography
天地图地形底图 示例// Set the basemap in the constructor const map = new Map({ basemap: "tianditu-vector" }); // Set the basemap after the map instance is created map.basemap = "tianditu-vector";
-
起始版本:GeoScene Maps SDK for JavaScript 4.7
-
类的名称。声明的类名称格式化为
geoscene.folder.className
。
-
editableLayers Collection<(FeatureLayer|SceneLayer|SubtypeGroupLayer)>readonly起始版本:GeoScene Maps SDK for JavaScript 4.20
-
可编辑图层的集合。如果图层启用了编辑功能,并且与图层进行身份验证的用户具有编辑权限,则图层将被视为可编辑。
-
指定地图的表面属性。在 MapView 中,当 profile 包含 ElevationProfileLineGround 时,ElevationProfile 微件将使用此属性。在 3D SceneView 中,它使用 ElevationLayers 集合在地图表面上渲染现实世界中的地形或地形变化。
此值可以是 Ground 的实例,也可以是以下字符串之一。
world-elevation
,用于使用 Terrain3D 服务的默认地面实例。world-topobathymetry
,用于使用 TopoBathy3D 服务将表面高程和测深相结合的地面实例。
地面不能设置为
null
或undefined
,要保证始终包含 Ground 类型的实例。可以通过将 ground 属性设置为新的空 Ground 实例或移除所有地面图层来从地面中移除高程。- 另请参阅
示例// Use the world elevation service const map = new Map({ basemap: "tianditu-vector", ground: "world-elevation" });
// Create a map with the world elevation layer overlaid by a custom elevation layer const worldElevation = ElevationLayer({ url: "//links.geoscene.cn/elevation3d/rest/services/WorldElevation3D/Terrain3D/ImageServer" }); const customElevation = 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
的基于要素的图层) 将使用图层集合中的顺序在顶部进行渲染。图层只能添加到一个父图层中。无法将同一图层添加到多个 Maps 或 GroupLayers 中。如果尝试这样做,图层将自动从其当前父级中移除,并放置在新的父级中。
let layer = new GraphicsLayer(); // The layer belongs to map1 map1.layers.add(layer); // The layer now belongs to map2 // and implicitly does: map1.layers.remove(layer) map2.layers.add(layer);
示例// Add layers in the constructor of Map using an array let fl = new FeatureLayer(url); let gl = new GraphicsLayer(); let map = new Map({ layers: [fl, gl] }); // Add layers using add() map.addMany([fl, gl]); // Add layers using layers collection map.layers.addMany([fl, gl]); // Add layers using layers collection's push method map.layers.push(fl, gl);
-
tables Collection<Layer>autocast
-
图层实例的集合,这些实例是保存在 Map 或 WebMap 中的表。为了以此方式识别表,FeatureLayer 的 isTable 属性必须返回
true
。可以通过以下选项之一创建表:- 将 URL 引用到要素服务中的表。
- 使用 Layer.fromGeoSceneServerUrl 方法创建要素图层,并使用要素图层的 isTable 属性确认该图层是表。这可以是要素服务或要素集合。
- 使用 Layer.fromPortalItem 方法创建要素图层,并使用要素图层的 isTable 属性确认该图层是表。这可以是要素服务或要素集合。
- 创建内存、非空间的客户端要素图层。
从 4.17 开始,可以将要素服务中的非空间表保存到 WebMap,但尚不支持内存 (要素集合) 表。
尚不支持在 GroupLayer 中保留表。如果需要,请将它们添加到 Map 或 WebMap 中。
示例// This snippet shows how to add a table to a map's table collection. // 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" }); // Add featureLayer to the map map.add(featureLayer); // In order for the table to be stored within // the map's table collection, load it and confirm it is the right type. table.load().then(() => { // Add the table to the collection map.tables.add(table); console.log("Table is added to map's table collection"); });
// This snippet shows how to persist a table to an existing web map // FeatureLayer.isTable = true const table = new FeatureLayer({ url: "https://services.arcgis.com/V6ZHFr6zdgNZuVG0/arcgis/rest/services/Crash_details_table/FeatureServer/0" }); // Create Webmap instance const webmap = new WebMap({ portalItem: { id: webmapId } }); // When web map is ready, load the table and add it to the web map webmap.when(() => { table.load().then(() => { console.log("Adding table"); // Add table to the webmap's table collection webmap.tables.add(table); }); }); // Call updateFrom on webmap and pass in the existing view webmap.updateFrom(view).then(() => { // Call saveAs (or save) on the web map webmap.saveAs({ // autocasts as new PortalItem() title: "New WebMap" }); });
// This snippet shows how to add an in-memory table to a map // Create the array of objects containing field info const fields = [{ name: "ObjectID", alias: "ObjectID", type: "oid" }, { name: "tree_type", alias: "Tree type", type: "string" }, { name: "species", alias: "Species", type: "string" }]; // Create the array of graphics holding attribute info const graphics = [{ attributes: { "tree_type": "deciduous", "species": "maple", "ObjectID": 2 } }, { attributes: { "tree_type": "coniferous", "species": "pine", "ObjectID": 3 } }]; // Create the feature layer (feature collection) table const table = new FeatureLayer({ fields: fields, objectIdField: "ObjectID", source: graphics }); // Check when map is ready and load the table map.when(() => { table.load().then(() => { console.log("Adding table"); map.tables.add(table); }); });
方法概述
名称 | 返回值类值 | 描述 | 类 |
---|---|---|---|
将图层添加到图层集合。 更多详情 | 地图 | ||
添加一个或多个与对象的生命周期相关联的句柄。 更多详情 | Accessor | ||
将图层或图层数组添加到图层集合。 更多详情 | 地图 | ||
销毁地图和任何相关资源,包括其 layers、basemap、tables 和 ground。 更多详情 | 地图 | ||
Layer | 返回基于给定图层 ID 的图层。 更多详情 | 地图 | |
Layer | 根据给定的表 ID 返回一个表。 更多详情 | 地图 | |
Boolean | 如果存在指定的句柄组,则返回 true。 更多详情 | Accessor | |
Layer | 从图层集合中移除指定的图层。 更多详情 | 地图 | |
Layer[] | 移除所有图层。 更多详情 | 地图 | |
移除对象拥有的句柄组。 更多详情 | Accessor | ||
Layer[] | 移除指定的图层。 更多详情 | 地图 | |
Layer | 更改图层顺序。 更多详情 | 地图 |
方法详细说明
-
add(layer, index)
-
将图层添加到图层集合。调用此方法时将触发 before-changes、before-add、after-add、after-changes 和 change 事件。
参数图层或解析为图层以添加到图层集合的 promise。
index Numberoptional可以在图层集合中的指定索引处添加图层。如果未指定索引或指定的索引大于当前图层数,则该图层将自动附加到图层集合中的图层列表中,并且索引会被规范化。
- 另请参阅
示例// add() and push methods can be used // to add a layer to layers collection // add a layer to layers collection using add map.add(layer); // add a layer at the end of layers collection map.layers.push(layer);
-
addHandles(handleOrHandles, groupKey)inherited起始版本:GeoScene Maps SDK for JavaScript 4.25
-
添加一个或多个与对象的生命周期相关联的句柄。当对象被销毁时,将移除句柄。
// Manually manage handles const handle = reactiveUtils.when( () => !view.updating, () => { wkidSelect.disabled = false; }, { once: true } ); // Handle gets removed when the object is destroyed. this.addHandles(handle);
参数handleOrHandles WatchHandle|WatchHandle[]对象销毁后,标记为要移除的句柄。
groupKey *optional标识句柄应添加到的组的键。组中的所有句柄稍后都可使用 Accessor.removeHandles() 进行删除。如果未提供键,则句柄将被添加到默认组。
-
addMany(layers, index)
-
将图层或图层数组添加到图层集合。调用此方法时将触发 before-changes、before-add、after-add、after-changes 和 change 事件。
图层集合上的 push() 方法也可用于添加一个或多个图层。
参数要添加到图层集合中的图层。
index Numberoptional可以在图层集合中的指定索引处添加图层。如果未指定索引或指定的索引大于当前图层数,则该图层将自动附加到图层集合中的图层列表中,并且索引会被规范化。
- 另请参阅
示例// addMany and push methods can be used // to add layers to layers collection // add an array of layers to layers collection using addMany map.addMany([layer, layer2]); // add layers to layers collection using push method map.layers.push(layer, layer2);
-
destroy()起始版本:GeoScene Maps SDK for JavaScript 4.17
-
销毁地图和任何相关资源,包括其 layers、basemap、tables 和 ground。一旦地图损坏,则无法再使用这些内容。为防止这些对象被销毁,请在调用
destroy()
之前将它们从地图中移除。// prevent the layers from being destroyed by removing them from the map const layers = map.layers.removeAll(); // prevent the tables from being destroyed by removing them from the map const tables = map.tables.removeAll(); // unset basemap from the map so that it is not destroyed const basemap = map.basemap; map.basemap = null; // unset ground from the map so that it is not destroyed const ground = map.ground; map.ground = null; // destroy the map and any remaining associated resources map.destroy();
-
findLayerById(layerId){Layer}
-
返回基于给定图层 ID 的图层。
参数layerId String分配给图层的 ID。
返回类型 描述 Layer 返回请求的图层对象。
-
findTableById(tableId){Layer}起始版本:GeoScene Maps SDK for JavaScript 4.18
-
根据给定的表 ID 返回一个表。
参数tableId String分配给表的 ID。
返回类型 描述 Layer 返回请求的表格对象。
-
起始版本:GeoScene Maps SDK for JavaScript 4.25
-
如果存在指定的句柄组,则返回 true。
参数groupKey *optional组键。
返回类型 描述 Boolean 如果存在指定的句柄组,则返回 true
。示例// Remove a named group of handles if they exist. if (obj.hasHandles("watch-view-updates")) { obj.removeHandles("watch-view-updates"); }
-
remove(layer){Layer}
-
从图层集合中移除指定的图层。调用此方法时将触发 before-changes、before-remove、after-remove、after-changes 和 change 事件。
参数layer Layer要从图层集合中移除的图层。
返回类型 描述 Layer 返回从图层集合中移除的图层。
-
移除所有图层。调用此方法时将触发 before-changes、before-remove、after-remove、after-changes 和 change 事件。
返回类型 描述 Layer[] 返回从图层集合中移除的图层。
-
removeHandles(groupKey)inherited起始版本:GeoScene Maps SDK for JavaScript 4.25
-
移除对象拥有的句柄组。
参数groupKey *optional要移除的组键或组键的数组或集合。
示例obj.removeHandles(); // removes handles from default group obj.removeHandles("handle-group"); obj.removeHandles("other-handle-group");
-
移除指定的图层。调用此方法时将触发 before-changes、before-remove、after-remove、after-changes 和 change 事件。
参数要从图层集合中移除的图层数组。
返回类型 描述 Layer[] 返回从图层集合中移除的图层。
-
reorder(layer, index){Layer}
-
更改图层顺序。添加的第一个图层始终是基础图层,即使其顺序已更改。调用此方法时将触发 change 事件。
在 3D 模式下,对于在地形上渲染的图层,图层的顺序还取决于图层的类型。切片图层 (VectorTileLayer、WebTileLayer、WMTSLayer) 始终按图层集合中指定的相同顺序首先绘制。动态图层 (MapImageLayer、ImageryLayer、WMSLayer 和具有高程模式
on-the-ground
的基于要素的图层) 将使用图层集合中的顺序在顶部进行渲染。参数layer Layer要移动的图层。
index Number放置图层的索引位置。最底部图层的索引为
0
。返回类型 描述 Layer 返回被移动的图层。