WebScene

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

Web 场景是跨 GeoScene 进行 3D 制图的核心元素。它定义了场景的内容、样式、环境和幻灯片,并且可以在多个 GeoScene Web 和桌面应用程序之间共享。可以使用场景查看器 场景查看器在 GeoScene ProGeoScene Pro 和 GeoScene Online 中创建、发布和使用 Web 场景。Web 场景被保存为 JSON 文档,GeoScene API 可以通过 WebScene 类使用该文档,以便轻松创建引人注目的 3D 应用程序。JSON 文档是根据 Web 场景规范Web 场景规范编写的。

虽然您可以轻松创建自己的场景,但 GeoScene OnlineGeoScene Online 中有数千个公开可用的 Web 场景可用于开始使用 API。您可以修改这些场景或向这些场景添加新内容。

要将 WebScene 加载到 SceneView 中,只需通过此类的 portalItem 属性引用 GeoScene Online 中 Web 场景项的 ID 即可。

const scene = new WebScene({
  portalItem: { // 转换成 new PortalItem()
    id: "3a9976baef9240ab8645ee25c7e9c09f"  // ID of the WebScene on arcgis.com
  }
});

要从本地门户加载 WebScene,请在 geosceneConfig.portalurl中设置门户url。

geosceneConfig.portalUrl = "https://myHostName.geoscene.cn/geoscene";

const scene = new WebScene({
  portalItem: { // 转换成 new PortalItem()
    id: "3a9976baef9240ab8645ee25c7e9c09f"  // ID of the WebScene on the on-premise portal
  }
});

然后,必须在 SceneView 的 map 属性中引用 WebScene 实例。

const view = new SceneView({
  map: scene,  // 上面创建的WebScene实例
container: "viewDiv" });

这将开始将所有图层和场景选项加载到 3D SceneView 中。可以调用 WebScene 实例上的 when() 方法来执行可能仅在加载WebScene 后运行的进程。

scene.when(function() {
  // 所有图层和底图都已创建
}); view.when(function() { // 所有图层和底图资源都已加载并准备好显示
});

webscene

WebScene 定义场景的内容以及场景在应用程序中加载时的外观。使用此类时,可能会与 web 场景的几个常见属性进行交互:

  • 图层:定义 web 场景的内容和样式,以及弹出窗口、标注、图例和其他设置。
  • 底图:定义 web 场景的底图图层。
  • 地面:定义 Web 场景的高程图层。
  • 演示文稿:包含 Web 场景幻灯片。
  • InitialViewProperties
    • 环境:配置场景的照明、阴影和氛围。
    • 视点:配置初始视点。
    • 查看模式:定义 web 场景是全局的还是本地的。

有关 web 场景属性的详细信息,请参阅 web 场景规范web 场景规范

有两种类型的 web 场景:globallocal 。全局场景将地球渲染为球体,而本地场景则在平面上渲染地球。可以使用 Web 服务器、WGS84、CGCS2000、Mars_2000_(球体)、GCS_Mars_2000和GCS_Moon_2000创建全局 Web 场景。可以使用 WGS84、CGCS2000 或任何投影坐标系创建本地 web 场景。阅读 GeoScene Online 帮助以了解有关选择全局或本地场景的详细信息选择全局或本地场景的详细信息

幻灯片存储场景可视化状态的快照,以后可以将其重新应用于场景。幻灯片包含视点、图层可见性、底图和环境(以及标题和缩略图)的属性,以便 3D 应用程序的用户可以轻松地导航场景并准确地重新创建该场景的存储视图。

Web 场景可以使用 saveAs() 或 save() 保存到 GeoScene Online 或 Portal。定义门户,加载后保存 web 场景。

const portal = new Portal({
  url: "https://myportal.geoscene.cn/", // 门户地址
  authMode: "immediate" // 加载门户时,用户通过登录进行身份验证
}); // 加载门户后,将 Web 场景作为新 Web 场景保存到门户
portal.load().then(function() { webscene.saveAs({ title: "My Scene", portal: portal }) .then(function() { console.log("Scene was saved"); }) .catch(function(err) { console.log(err); }); })

请务必注意,GraphicsLayerImageryLayer 和 StreamLayer 无法保存到 web 场景中。通过将缓存影像服务声明为切片图层,可将其保存到 web 场景中。OpenStreetMapLayer可以保存为baseLayer。有关可保存在 web 场景中的图层类型的详细信息,请参阅 web 场景规范。

示例:

构造函数

new WebScene(properties)
参数:
properties Object
optional

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

示例代码:
// 典型用法
const scene = new WebScene({
  portalItem: {
    id: "affa021c51944b5694132b2d61fe1057"
  }
});

属性列表

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

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

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

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

更多信息Map
ApplicationProperties更多信息

应用程序和 UI 元素的配置。

更多信息WebScene
String更多信息

创作 WebScene 的应用程序的名称。

更多信息WebScene
String更多信息

创作 WebScene 的应用程序的版本。

更多信息WebScene
Basemap更多信息

指定地图的底图。

更多信息Map
Extent更多信息

此属性仅适用于本地场景。

更多信息WebScene
Boolean更多信息

此属性仅适用于本地场景。

更多信息WebScene
String更多信息

类名。

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

可编辑图层的集合。

更多信息Map
MapFloorInfo更多信息

当 web 场景配置为楼层感知时,它具有定义的 floorInfo 属性。

更多信息WebScene
Ground更多信息

指定地图的表面属性。

更多信息Map
HeightModelInfo更多信息

WebScene 的高度模型信息。

更多信息WebScene
InitialViewProperties更多信息

WebScene 的初始视图。

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

业务图层的集合。

更多信息Map
Boolean更多信息

指示实例是否已加载。

更多信息WebScene
Error更多信息

如果在加载时发生错误,则返回 Error 对象。

更多信息WebScene
String更多信息

表示加载操作的状态。

更多信息WebScene
PortalItem更多信息

从中加载 WebScene 的门户项。

更多信息WebScene
Presentation更多信息

提供用作书签的幻灯片集合,用于保存预定义的视点和可见图层。

更多信息WebScene
Object更多信息

从中读取 WebScene 的源文档的版本。

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

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

更多信息Map
String更多信息

用于 web 场景的缩略图的 URL。

更多信息WebScene

属性详细说明

allLayers Collection<Layer>readonly inherited

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

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

若要访问表的平展集合,请改用 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 inherited
起始版本: 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"; });
applicationProperties ApplicationProperties
起始版本: GeoScene API for JavaScript 4.22

应用程序和 UI 元素的配置。

authoringApp String
起始版本: GeoScene API for JavaScript 4.22

创作 WebScene 的应用程序的名称。

authoringAppVersion String
起始版本: GeoScene API for JavaScript 4.22

创作 WebScene 的应用程序的版本。

自动转换自 String|Object

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

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

使用这些底图需要有效的  GeoScene Enterprise 许可

tianditu-vector中国地图彩色版
tianditu-image中国地图灰色版
geoscene-blue中国地图蓝黑版
geoscene-warm中国地图暖色版

示例代码:
// Set the basemap in the constructor
const map = new Map({
  basemap: "tianditu-image"
});

// Set the basemap after the map instance is created
map.basemap = "tianditu-vector";
clippingArea Extentautocast

此属性仅适用于本地场景。表示用于定义局部场景的边界或范围的可选剪切区域。如果已定义,则仅显示区域内的数据(包括底图)。

剪贴启用属性设置为true将指定的剪贴区域应用于视图。

示例:
clippingEnabled Boolean

此属性仅适用于本地场景。确定是否启用了使用剪贴区域进行裁剪。

默认值:false
示例:
declaredClass Stringreadonly inherited
起始版本: GeoScene API for JavaScript 4.22

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

起始版本: GeoScene API for JavaScript 4.22

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

起始版本: GeoScene API for JavaScript 4.22

当 web 场景配置为楼层感知时,它具有定义的 floorInfo 属性。楼层感知场景是包含室内 GIS 数据的场景,用于表示可位于建筑物特定楼层的要素。楼层信息必须至少包含关卡层设施层属性。站点层属性是可选的。

默认值:null
自动转换自 String|Object

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

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

地面不能设置为null 或 undefined,它保证始终包含 Ground 类型的实例。通过将地面属性设置为新的空地面实例或移除所有地面图层,可以从地面上移除高程。

示例:
示例代码:
// 使用世界高程服务
const map = new Map({ basemap: "tianditu-image", ground: "world-elevation" });
// 使用自定义高程图层覆盖的世界高程图层创建地图
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-image", ground: new Ground({ layers: [ worldElevation, customElevation ] }) });
heightModelInfo HeightModelInfoautocast
起始版本: GeoScene API for JavaScript 4.22

WebScene 的高度模型信息。此对象定义场景使用的垂直坐标系的特征。在 SceneView 中,高度模型信息用于避免合并具有不兼容垂直坐标系的图层。

initialViewProperties InitialViewPropertiesautocast

WebScene 的初始视图。此对象包含视点空间参考查看模式和环境等属性,这些属性应在场景加载时应用于 SceneView

自动转换自 Layer[]

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

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

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

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

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

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

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

loaded Booleanreadonly

指示实例是否已加载。当值为true时,可以访问对象的属性。当 WebScene 的图层底图已完全创建但尚未加载时,将被视为已加载。

默认值:false
loadError Errorreadonly

如果在加载时发生错误,则返回 Error 对象。

默认值:null
loadStatus Stringreadonly

表示加载操作的状态。

描述
not-loaded 该对象的资源尚未加载。
loading 该对象的资源正在加载。
loaded 该对象的资源已正确加载。
failed 对象的资源加载失败。 有关详细信息,请参阅 loadError

可选值:"not-loaded"|"loading"|"failed"|"loaded"

默认值:not-loaded
portalItem PortalItemautocast

从中加载 WebScene 的门户项。

presentation Presentationautocast

提供用作书签的幻灯片集合,用于保存预定义的视点和可见图层。

示例:
sourceVersion Objectreadonly
起始版本: GeoScene API for JavaScript 4.1

从中读取 WebScene 的源文档的版本。WebScene 必须是 1.x 版才能加载到应用程序中。

属性:
major Number

WebScene 的主要版本。

minor Number

WebScene 的次要版本。

自动转换自 Layer[]

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

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

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

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

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

要访问空间图层,请使用 Map 或 WebMap 类中的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" }); // 添加要素图层到地图 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" }); // 创建实例 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); }); });
thumbnailUrl String
起始版本: GeoScene API for JavaScript 4.22

用于 web 场景的缩略图的 URL。默认情况下,缩略图将是与 web 场景关联的门户项目的缩略图 URL。可通过更改缩略图 URL 并保存 web 场景来更新 web 场景的缩略图。使用 updateFrom 从指定视图自动更新缩略图。

示例代码:
scene.updateFrom(view)
  .then(function() {
    return scene.save();
  })
  .then(function(portalItem) {
    console.log("Saved to portal", portalItem.id);
  })
  .catch(function(error) {
    console.error("Error saving to portal", error);
  });

方法列表

展示继承方法 隐藏继承方法
属性 返回值类型 描述
更多信息

将图层添加到图层集合

更多信息Map
更多信息

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

更多信息Map
更多信息

销毁 web 场景和任何关联的资源,包括其图层底图地面门户项目

更多信息WebScene
Layer更多信息

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

更多信息Map
SearchTable更多信息

返回基于给定表 ID 的表。

更多信息Map
*更多信息

创建此类的新实例并使用从 GeoScene产品生成的 JSON 对象的值对其进行初始化。

更多信息WebScene
Boolean更多信息

isFulfilled() 可用于验证创建类的实例是否已完成(无论成功或失败)。

更多信息WebScene
Boolean更多信息

isRejected() 可用于验证创建类的实例是否失败。

更多信息WebScene
Boolean更多信息

isResolved() 可用于验证创建类的实例是否成功。

更多信息WebScene
Promise更多信息

触发 WebScene 实例的加载。

更多信息WebScene
Promise<WebScene>更多信息

加载与 Web 场景关联的所有外部可加载资源。

更多信息WebScene
Layer更多信息

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

更多信息Map
Layer[]更多信息

删除所有图层。

更多信息Map
Layer[]更多信息

删除指定的图层。

更多信息Map
Layer更多信息

更改图层顺序。

更多信息Map
Promise<PortalItem>更多信息

将 web 场景保存到其关联的门户项目。

更多信息WebScene
Promise<PortalItem>更多信息

将网页场景保存到新的门户项目。

更多信息WebScene
Object更多信息

将此类的实例转换为其 GeoScene 门户 JSON 表示形式。

更多信息WebScene
Promise更多信息

将此类的实例转换为其 GeoScene 门户 JSON 表示形式。

更多信息WebScene
Promise更多信息

when() 创建类的实例后,会被执行一次。

更多信息WebScene

方法详细说明

add(layer, index)inherited

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

参数:
layer Layer|Promise

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

index Number
optional

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

示例:
示例代码:
// 可以使用 add() 和 push 方法添加一个图层到图层集合

// 使用 add 将图层添加到图层集合
map.add(layer);

// 在图层集合的末尾添加一个图层
map.layers.push(layer);
addMany(layers, index)inherited

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

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

参数:
layers Layer[]

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

index Number
optional

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

示例:
示例代码:
// 可以使用 addMany 和 push 方法将图层添加到图层集合

// 使用 addMany 将图层数组添加到图层集合
map.addMany([layer, layer2]);

// 使用 push 方法将图层添加到图层集合
map.layers.push(layer, layer2);
destroy()
起始版本: GeoScene API for JavaScript 4.22

销毁 web 场景和任何关联的资源,包括其图层底图地面门户项目。一旦地图被破坏,这些就无法再使用。要防止这些对象被销毁,请在调用destroy()之前从 Web 场景中删除它们。

// 通过从网络场景中删除图层来防止图层被破坏
const layers = webscene.layers.removeAll(); // 从网络场景中取消设置底图,使其不会被破坏
const basemap = webscene.basemap; webscene.basemap = null; // 从网络场景中移除地面,使其不被破坏
const ground = webscene.ground; webscene.ground = null; // 从 web 场景中取消设置 portalItem,使其不会被破坏
const portalItem = webscene.portalItem; webscene.portalItem = null; // 销毁 web 场景和任何剩余的相关资源
webscene.destroy();
示例:
findLayerById(layerId){Layer}inherited

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

参数:
layerId String

分配给图层的 ID。

返回值:
类型 描述
Layer 返回请求的图层对象。
findTableById(tableId){SearchTable}inherited
起始版本: GeoScene API for JavaScript 4.22

返回基于给定表 ID 的表。

参数:
tableId String

分配给表的 ID。

返回值:
类型 描述
SearchTable 返回请求的表对象。
fromJSON(json){*}static

创建此类的新实例,并使用从 GeoScene 产品生成的 JSON 对象的值对其进行初始化。传递到输入参数中的json对象通常来自对 REST API 中的查询操作的响应或来自其他 GeoScene 产品的 toJSON() 方法。如果在视图外部使用 WebScene,则必须显式调用 load() 以与其资源进行交互。有关何时以及如何使用此功能的详细信息和示例,请参阅指南中的使用 fromJSON() 主题。

参数:
json Object

实例的 JSON 表示形式,采用 GeoScene 格式。有关将  web 场景web 场景序列化为 JSON 的更多详细信息,请参阅 web 场景规范。

返回值:
类型 描述
* 返回一个该类的新实例。
示例代码:
// 通过 url 检索 WebScene JSON 并将其反序列化为 WebScene API 实例
require(["geoscene/request", "geoscene/WebScene"], function(geosceneRequest, WebScene) { geosceneRequest("http://domain/url/to/webscene.json").then(function(json) { const scene = WebScene.fromJSON(json); const view = new SceneView({ map: scene, container: "viewDiv" }); }); });
isFulfilled(){Boolean}

isFulfilled() 可用于验证创建类的实例是否已完成(无论成功或失败)。 如果已完成,将会返回true

返回值:
类型 描述
Boolean 指示创建类的实例是否已完成(无论成功或失败)。
isRejected(){Boolean}

isRejected() 可用于验证创建类的实例是否失败。 如果失败, 将会返回 true

返回值:
类型 描述
Boolean 指示是否已拒绝创建类的实例。
isResolved(){Boolean}

isResolved() 可用于验证创建类的实例是否成功。 如果成功, 将会返回 true

返回值:
类型 描述
Boolean 指示是否已解析创建类的实例。
load(){Promise}

当 WebScene 的业务图层底图地面完全创建时,将被视为已加载。使用 portalItem 创建时,load()将首先获取其数据以创建内容,否则会立即解析。

将 WebScene 实例添加到其 map 属性时,SceneView 会自动调用该load()方法,以便它可以显示在视图中并加载每个单独的图层。如果在视图外部使用 WebScene(例如,用于预加载视图),则必须显式调用load()以与其资源进行交互。

返回值:
类型 描述
Promise 在加载 WebScene 时解析
示例:
示例代码:
// 以编程方式加载所有图层
require([ "geoscene/WebScene" ], function( WebScene ) { const scene = new WebScene({ portalItem: { id: "3a9976baef9240ab8645ee25c7e9c09f" } }); scene.load() .then(function() { // 加载底图以创建其图层
return scene.basemap.load(); }) .then(function() { // 抓取所有图层并加载它们
const allLayers = scene.allLayers; const promises = allLayers.map(function(layer) { return layer.load(); }); return Promise.all(promises.toArray()); }) .then(function(layers) { // 每层负载promise与层一起返回
console.log("all " + layers.length + " layers loaded"); }) .catch(function(error) { console.error(error); }); });
loadAll(){Promise<WebScene>}
起始版本: GeoScene API for JavaScript 4.22

加载与 Web 场景关联的所有外部可加载资源。对于 web 场景,这将加载地面、底图、图层和幻灯片底图。

返回值:
类型 描述
Promise<WebScene> 在加载所有可加载资源后解析。如果至少一个可加载资源无法加载,则拒绝。
示例:
示例代码:
// 加载所有资源,但如果其中一个或多个未能加载则忽略
webscene.loadAll() .catch(function(error) { // 忽略任何失败的资源
}) .then(function() { console.log("All loaded"); });
remove(layer){Layer}inherited

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

参数:
layer Layer

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

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

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

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

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

参数:
layers Layer[]

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

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

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

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

参数:
layer Layer

要移动的图层。

index Number

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

返回值:
类型 描述
Layer 返回已移动的图层。
save(options){Promise<PortalItem>}
起始版本: GeoScene API for JavaScript 4.1

将 web 场景保存到其关联的门户项目。要保存到的门户项目必须已存在且有效。这是一种方便的方法,它将使用 PortalItem 在项目中存储 web 场景。Web 场景根据 Web 场景规范标准进行保存。

如果场景显示在视图中,请在保存之前使用 updateFrom 将当前视图属性存储在 web 场景中。

const scene = new WebScene({
  portalItem: {
    id: "3a9976baef9240ab8645ee25c7e9c096"
  }
});

const view = new SceneView({
  container: "viewDiv",
  map: scene
});

scene.updateFrom(view).then(function() {
  scene.save();
});

请注意,这会将网页场景保存到其现有项目中。根据场景的共享方式,不拥有场景的用户可能会对其进行修改。要将现有场景另存为登录到门户实例的用户拥有的新项目,请使用 saveAs()

等到每个 save() 操作都解析完毕后,再开始新的 save() 操作,以避免潜在的中止错误。

如果尚未加载,则会自动加载 Web 场景,然后再保存。

参数:
options Object
optional

其他选项。

规范:
ignoreUnsupported Boolean
optional

当值为true时,即使场景包含不受支持的内容(图层、渲染器、符号),场景也会保存。将不会保存任何不受支持的内容,并且从其门户项目重新加载场景时,场景可能会有所不同。

返回值:
类型 描述
Promise<PortalItem> 当项目已成功保存或以其他方式拒绝时,使用 PortalItem 实例解析的承诺。
示例:
saveAs(portalItem, options){Promise<PortalItem>}
起始版本: GeoScene API for JavaScript 4.1

将网页场景保存到新的门户项目。如果保存已成功完成,则保存的门户项目将在 WebScene 的 portalItem 属性中设置。这是一种方便的方法,它将创建一个新的PortalItem,并使用PortalUser.addItem()将webscene存储在门户中。

使用 updateFrom 在保存当前视图属性之前将其存储在 Web 场景中。

请注意,saveAs()始终会将 web 场景另存为执行编辑和执行方法的用户拥有的新门户项目。如果要在不更改其所有权的情况下修改现有项目,请使用 save()

等到每个 saveAs() 操作都解析完毕后,再启动新的 saveAs() 操作,以避免潜在的中止错误。

如果尚未加载,则会自动加载 Web 场景,然后再保存。

参数:
规范:
portalItem PortalItem autocast
自动转换自 Object

要将场景保存到的新门户项目。

门户项目属性(如标题或描述)需要在项目上显式设置,并且不会从当前关联的场景门户项目(如果有)自动复制。

options Object
optional

其他保存选项。

规范:
folder PortalFolder
optional

要在其中保存项目的文件夹。

ignoreUnsupported Boolean
optional

允许保存场景,即使它包含不受支持的内容(图层、渲染器、符号)。将不会保存任何不受支持的内容,并且从其门户项目重新加载场景时,场景可能会有所不同。

返回值:
类型 描述
Promise<PortalItem> 当项目已成功保存或以其他方式拒绝时,该承诺将随 PortalItem 实例一起解析。
示例:
示例代码:
const scene = new WebScene();
scene.saveAs({
  // 转换成 new PortalItem()
  title: "New WebScene"
});
const scene = new WebScene({
  basemap: "tianditu-image"
});

const view = new SceneView({
  container: "viewDiv",
  map: scene
});

// 如果 webscene 显示在视图中,请使用 updateFrom
// 将当前视图属性存储在场景中
scene.updateFrom(view).then(function() {
  scene.saveAs({
    // 转换成 new PortalItem()
    title: "New WebScene"
  });
});
toJSON(){Object}

将此类的实例转换为其 GeoScene 门户 JSON 表示形式。有关详细信息,请参阅指南中的使用 fromJSON() 主题和 Web 场景规范Web 场景规范

返回值:
类型 描述
Object 此类实例的 GeoScene 门户 JSON 表示形式。
updateFrom(view, options){Promise}

更新与视图相关的 WebScene 的属性。通常应在保存场景之前调用此操作。以下属性将从视图中更新:

  1. initialViewProperties.spatialReference
  2. initialViewProperties.viewingMode
  3. clippingArea
  4. heightModelInfo

根据提供的选项,还会更新以下属性:

  1. initialViewProperties.environment
  2. initialViewProperties.viewpoint
  3. thumbnail
参数:
规范:
view SceneView

要从中进行更新的视图。

options Object
optional

更新选项。

参数:
规范:
environmentExcluded Boolean
optional

不要从视图中更新初始环境,默认为 false。

viewpointExcluded Boolean
optional

不要从视图中更新初始视点,默认为 false。

thumbnailExcluded Boolean
optional

不要从视图中更新缩略图。默认值为 true,除非视点排除设置为 true。

thumbnailSize Object
optional

缩略图的大小。默认值为 600x400(比率 1.5:1)。请注意,缩略图大小当前可能不大于视图的大小。

规范:
width Number

缩略图的宽度。

height Number

缩略图的高度。

返回值:
类型 描述
Promise 在更新完成后返回。
示例:
when(callback, errback){Promise}
起始版本: GeoScene API for JavaScript 4.22

when()创建类的实例后,会被执行一次。该方法接受两个参数: callback函数和errback 函数。 在类的实例加载时执行callback。如果类的实例无法加载,则执行errback 。

参数:
callback Function
optional

当 Promise 成功时,该函数将被调用。

errback Function
optional

当 Promise 失败时,该函数将被调用。

返回值:
类型 描述
Promise 返回回调结果的新promise,可用于 链接其他函数。
示例代码:
// 尽管此示例使用 MapView,但任何作为 Promise 的类实例都可以以相同的方式使用 when()
let view = new MapView();
view.when(function(){
  // 当 Promise resolved 时,函数将被执行
}, function(error){
  // 当 Promise 通过 rejected 抛错时,这个函数将被执行
});

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