Map

AMD: require(["geoscene/Map"], (Map) => { /* 代码 */ });
ESM: import Map from "@geoscene/core/Map";
类: geoscene/Map
继承于: Map Accessor
子类: WebMap , WebScene
起始版本: GeoScene API for JavaScript 4.22

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

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

Map 实例是 MapViewSceneView 的重要组成部分。应在视图之前创建 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
  });
});
示例:

构造函数

new Map(properties)
参数:
properties Object
optional

所有可传入构造函数的属性,请参见属性列表

示例代码:
// 典型用法
const map = new Map({
  basemap: "tianditu-vector"
});

属性列表

可以设置、检索或监听的属性。参见 使用属性
展示继承属性 隐藏继承属性
属性 类型 描述
Collection<Layer>更多信息

地图中所有图层的拼合集合。

更多信息Map
Collection<Layer>更多信息

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

更多信息Map
Basemap更多信息

指定地图的底图。

更多信息Map
String更多信息

类名。

更多信息Accessor
Collection<(FeatureLayer|SceneLayer|SubtypeGroupLayer)>更多信息

可编辑图层的集合。

更多信息Map
Ground更多信息

指定地图的表面属性。

更多信息Map
Collection<Layer>更多信息

业务图层的集合。

更多信息Map
Collection<Layer>更多信息

图层实例的集合,这些实例是保存在 地图 和/或 Web 地图中的表。

更多信息Map

属性详细说明

allLayers Collection<Layer>readonly

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

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

要访问扁平化的表集合,请使用 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";
});
basemap Basemapautocast
自动转换自 String|Object
定地图的底图。底图是一组切片图层,用于为MapViewSceneView以及地图中的其他业务图层提供地理上下文。

此值可以是底图的实例,也可以是下表中列出的字符串之一。

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";
declaredClass Stringreadonly inherited
起始版本: GeoScene API for JavaScript 4.22

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

起始版本: GeoScene API for JavaScript 4.22

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

自动转换自 String|Object

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

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

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

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

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

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

在 3D 模式下,对于在地形上渲染的图层,图层的顺序还取决于图层的类型。平铺层(VectorTileLayer,WebTileLayer,WMTSLayer)总是按照图层集合中指定的相同顺序首先绘制。 动态图层(MapImageLayer、ImageryLayer、WMSLayer 和具有高程模式 on-the-ground 的基于要素的图层 ),使用图层集合中的顺序在顶部渲染。

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

let layer = new GraphicsLayer();
// 该图层属于map1
map1.layers.add(layer);
// 该图层属于map2
// 并且隐含地: map1.layers.remove(layer)
map2.layers.add(layer);

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

示例代码:
// 使用数组在 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);
自动转换自 Layer[]

图层实例的集合,这些实例是保存在地图和/或 Web地图中的表。为了使表被识别为这样,FeatureLayer 的 isTable 属性必须返回true 。可以通过以下选项之一创建表:

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

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

尚不支持在 GroupLayer 中保留表。如果需要,请将其添加到地图和/或 Web 地图

目前,仅识别要素服务要素图层

要访问空间图层,请使用 MapWebMap 类中的 layers 属性。

示例:
示例代码:
// 此代码段显示如何将表添加到地图的表集合中。

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

将图层添加到图层集合中。调用此方法时,将发出更改前添加前、添加后更改后更改事件。

参数:
layer Layer|Promise

图层或解析为要添加到图层的图层集合的承诺。

index Number
optional

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

示例:
示例代码:
// 可以使用 add() 和 push 方法
// 将图层添加到图层集合 // 使用 add 将图层添加到图层集合
map.add(layer); // 在图层集合的末尾添加一个图层
map.layers.push(layer);
addMany(layers, index)

将图层或图层数组添加到图层集合中。调用此方法时,将发出更改前添加前、添加后更改后更改事件。

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

参数:
layers Layer[]

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

index Number
optional

可以在 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 返回请求的表对象。
remove(layer){Layer}

从图层集合中删除指定的图层。调用此方法时,将发出更改前删除前、删除后更改后更改事件。

参数:
layer Layer

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

返回值:
类型描述
layer
返回从图层集合中删除的图层。

removeAll(){Layer[]}

删除所有的图层。调用此方法时,将发出更改前删除前、删除后更改后更改事件。

返回值:
类型 描述
Layer[] 返回从图层集合中删除的图层。
removeMany(layers){Layer[]}

删除指定的图层。调用此方法时,将发出更改前删除前、删除后更改后更改事件。

参数:
layers Layer[]

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

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

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

在 3D 模式下,对于在地形上渲染的图层,图层的顺序还取决于图层的类型。平铺层(VectorTileLayer,WebTileLayer,WMTSLayer)总是按照图层集合中指定的相同顺序首先绘制。 动态图层(MapImageLayer、ImageryLayer、WMSLayer 和具有高程模式 on-the-ground 的基于要素的图层)使用图层集合中的顺序在顶部渲染。

参数:
layer Layer

要移动的图层。

index Number

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

返回值:
类型 描述
Layer 返回已移动的图层。

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.