Map

AMD: require(["geoscene/Map"], (Map) => { /* code goes here */ });
ESM: import Map from "@geoscene/core/Map";
类: geoscene/Map
继承于:Map Accessor
子类:WebMapWebScene
起始版本:GeoScene Maps SDK for JavaScript 4.0

Map 类包含了在 2D 和 3D 视图中存储、管理和叠加图层的通用属性和方法。通过 Map 类可以添加或移除图层,但图层的渲染是通过 MapView (2D 视图) 和 SceneView (3D视图) 类实现。因此,地图实例是保存图层的简单容器,而视图类才是显示地图图层和底图,并实现交互的类。

单个地图可由多个视图引用。例如,此示例包含可在两个单独视图 (一个位于 2D 中,另一个位于 3D 中) 中可见的单一地图。由于一个地图可由同一应用程序中的多个视图访问,因此用户与地图图层的所有交互都将在视图上处理,而不是在地图上处理。

地图实例是 MapViewSceneView 中的一个重要属性。地图对象要先于视图对象创建,然后将它赋予视图的 map 属性 (MapView.mapSceneView.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
  });
});
另请参阅

构造函数

new Map(properties)
参数
properties Object
optional

有关可能传递给构造函数的所有属性的列表,请参见属性

示例
// Typical usage
const map = new Map({
  basemap: "tianditu-vector"
});

属性概述

可以设置、检索或侦听任何属性。请参阅使用属性主题。
显示继承属性 隐藏继承属性
名称 类型 描述
Collection<Layer>

地图中所有图层的扁平化集合。

更多详情
地图
Collection<Layer>

地图层次结构中任意位置的表的扁平化集合。

更多详情
地图
Basemap

指定地图的底图。

更多详情
地图
String

类的名称。

更多详情
Accessor
Collection<(FeatureLayer|SceneLayer|SubtypeGroupLayer)>

可编辑图层的集合。

更多详情
地图
Ground

指定地图的表面属性。

更多详情
地图
Collection<Layer>

业务图层的集合。

更多详情
地图
Collection<Layer>

MapWebMap 中以表形式存储的图层集合。

更多详情
地图

属性详细信息

allLayers Collection<Layer>readonly

地图中所有图层的扁平化集合。此集合包含底图图层业务图层地面图层图层组及其子图层也是此集合的一部分。底图中的参考图层将始终包含在集合的末尾。

不应将图层直接添加到此集合中。它们只能通过 layersbasemapground 属性进行添加。

若要访问表的扁平化集合,请改为使用 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";
});
自动转换自 String|Object

指定地图的底图。底图是一组切片图层,用于为 MapViewSceneView 以及地图中的其他业务图层提供地理上下文。

此值可以是 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";
declaredClass Stringreadonly inherited
起始版本:GeoScene Maps SDK for JavaScript 4.7

类的名称。声明的类名称格式化为 geoscene.folder.className

起始版本:GeoScene Maps SDK for JavaScript 4.20

可编辑图层的集合。如果图层启用了编辑功能,并且与图层进行身份验证的用户具有编辑权限,则图层将被视为可编辑。

自动转换自 String|Object

指定地图的表面属性。在 MapView 中,当 profile 包含 ElevationProfileLineGround 时,ElevationProfile 微件将使用此属性。在 3D SceneView 中,它使用 ElevationLayers 集合在地图表面上渲染现实世界中的地形或地形变化。

此值可以是 Ground 的实例,也可以是以下字符串之一。

  • world-elevation ,用于使用 Terrain3D 服务的默认地面实例。
  • world-topobathymetry ,用于使用 TopoBathy3D 服务将表面高程和测深相结合的地面实例。

地面不能设置为 nullundefined,要保证始终包含 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 ]
  })
});
自动转换自 Layer[]

业务图层的集合。此属性包含可以执行查询、分配不同渲染器、分析等的业务图层,例如 FeatureLayersWebTileLayersGraphicsLayers。它不包括底图

图层是表示真实世界现象的一个或多个要素或图形的集合。每个要素都包含一个符号地理数据,允许其在地图上以具有空间上下文的图形进行渲染。图层中的要素还可能包含数据属性,这些属性提供可在弹出窗口中查看并用于渲染图层的附加信息。

可以使用 add()addMany() 方法在构造函数中添加图层,也可以使用 add()addMany() 直接添加到图层集合中。

在 3D 模式下,对于在地形上渲染的图层,图层的顺序还取决于图层的类型。切片图层 (VectorTileLayerWebTileLayerWMTSLayer) 始终按图层集合中指定的相同顺序首先绘制。动态图层 (MapImageLayerImageryLayerWMSLayer 和具有高程模式 on-the-ground 的基于要素的图层) 将使用图层集合中的顺序在顶部进行渲染。

图层只能添加到一个父图层中。无法将同一图层添加到多个 MapsGroupLayers 中。如果尝试这样做,图层将自动从其当前父级中移除,并放置在新的父级中。

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);

要访问要素图层中的表,请使用 MapWebMap 类中的 tables 属性。

示例
// 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);
自动转换自 Layer[]

图层实例的集合,这些实例是保存在 MapWebMap 中的表。为了以此方式识别表,FeatureLayer 的 isTable 属性必须返回 true。可以通过以下选项之一创建表:

  • 将 URL 引用到要素服务中的表。
  • 使用 Layer.fromGeoSceneServerUrl 方法创建要素图层,并使用要素图层的 isTable 属性确认该图层是表。这可以是要素服务或要素集合。
  • 使用 Layer.fromPortalItem 方法创建要素图层,并使用要素图层的 isTable 属性确认该图层是表。这可以是要素服务或要素集合。
  • 创建内存、非空间的客户端要素图层。

从 4.17 开始,可以将要素服务中的非空间表保存到 WebMap,但尚不支持内存 (要素集合) 表。

尚不支持在 GroupLayer 中保留表。如果需要,请将它们添加到 MapWebMap 中。

  • 目前,仅识别要素服务要素图层
  • 要访问空间图层,请使用 MapWebMap 类中的 layers 属性。
另请参阅
示例
// 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

将图层或图层数组添加到图层集合

更多详情
地图

销毁地图和任何相关资源,包括其 layersbasemaptablesground

更多详情
地图
Layer

返回基于给定图层 ID 的图层。

更多详情
地图
Layer

根据给定的表 ID 返回一个表。

更多详情
地图
Boolean

如果存在指定的句柄组,则返回 true。

更多详情
Accessor
Layer

从图层集合中移除指定的图层。

更多详情
地图
Layer[]

移除所有图层。

更多详情
地图

移除对象拥有的句柄组。

更多详情
Accessor
Layer[]

移除指定的图层。

更多详情
地图
Layer

更改图层顺序。

更多详情
地图

方法详细说明

add(layer, index)

将图层添加到图层集合。调用此方法时将触发 before-changesbefore-addafter-addafter-changeschange 事件。

参数

图层或解析为图层以添加到图层集合的 promise。

index Number
optional

可以在图层集合中的指定索引处添加图层。如果未指定索引或指定的索引大于当前图层数,则该图层将自动附加到图层集合中的图层列表中,并且索引会被规范化。

另请参阅
示例
// 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-changesbefore-addafter-addafter-changeschange 事件。

图层集合上的 push() 方法也可用于添加一个或多个图层。

参数
layers Layer[]

要添加到图层集合中的图层。

index Number
optional

可以在图层集合中的指定索引处添加图层。如果未指定索引或指定的索引大于当前图层数,则该图层将自动附加到图层集合中的图层列表中,并且索引会被规范化。

另请参阅
示例
// 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

销毁地图和任何相关资源,包括其 layersbasemaptablesground。一旦地图损坏,则无法再使用这些内容。为防止这些对象被销毁,请在调用 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 返回请求的表格对象。
hasHandles(groupKey){Boolean}inherited
起始版本: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-changesbefore-removeafter-removeafter-changeschange 事件。

参数
layer Layer

要从图层集合中移除的图层。

返回
类型 描述
Layer 返回从图层集合中移除的图层。
removeAll(){Layer[]}

移除所有图层。调用此方法时将触发 before-changesbefore-removeafter-removeafter-changeschange 事件。

返回
类型 描述
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");
removeMany(layers){Layer[]}

移除指定的图层。调用此方法时将触发 before-changesbefore-removeafter-removeafter-changeschange 事件。

参数
layers Layer[]

要从图层集合中移除的图层数组。

返回
类型 描述
Layer[] 返回从图层集合中移除的图层。
reorder(layer, index){Layer}

更改图层顺序。添加的第一个图层始终是基础图层,即使其顺序已更改。调用此方法时将触发 change 事件。

在 3D 模式下,对于在地形上渲染的图层,图层的顺序还取决于图层的类型。切片图层 (VectorTileLayerWebTileLayerWMTSLayer) 始终按图层集合中指定的相同顺序首先绘制。动态图层 (MapImageLayerImageryLayerWMSLayer 和具有高程模式 on-the-ground 的基于要素的图层) 将使用图层集合中的顺序在顶部进行渲染。

参数
layer Layer

要移动的图层。

index Number

放置图层的索引位置。最底部图层的索引为 0

返回
类型 描述
Layer 返回被移动的图层。

您的浏览器不再受支持。请升级您的浏览器以获得最佳体验。请参阅浏览器弃用帖子以获取更多信息