地图和视图

地图是用于管理图层和底图的容器。视图用于显示地图,并处理用户交互、弹出窗口、微件和地图定位等功能。

使用地图

基于 Map 类创建地图对象,地图对象再传递给 View 对象来显示地图。有两个 View 类可用于显示地图:用于 2D 地图的 MapView 类和用于 3D 地图的 SceneView 类。

创建地图

创建地图的一种方法是创建 Map 类的一个新实例,并指定底图图层集合,其中图层集合是可选的。

1
2
3
4
5
6
7
8
9
const myMap = new Map({                // 创建 Map 对象
  basemap: myBasemap,                  // basemap对象                    layers: additionalLayers             // 可以选择性地添加其他图层集合
});

const mapView = new MapView({          // Map 对象的视图
  map: myMap,
  container: "mapDiv"
});

了解可以添加到地图中的不同类型的图层

从 Web 地图或 Web 场景创建地图

创建地图的另一种方法是直接加载 web 地图 (用于 2D 地图) 或 web 场景 (用于 3D 地图)。

Web 地图和 Web 场景都是JSON对象。它们包含了底图、图层、图层样式、弹出窗口、图例、标签等各种关于地图或场景的设置。通常使用 GeoScene Online 地图查看器、GeoScene Enterprise地图查看器或 GeoScene Online 场景查看器、GeoScene Enterprise场景查看器创建。创建成功后,在门户中会存储为一个门户项目,而且会有唯一ID来标识它。

在API中,通过WebMapWebScene 类可以加载Web 地图和 Web 场景。将它们的唯一 ID 和门户地址传递给对应类即可。 GeoScene Online是API中的默认门户地址,其 URL 为https://www.geosceneonline.cn/geoscene,如果使用 GeoScene Enterprise,则必须指定门户 URL。项目ID可以在地图查看器和场景查看器的 URL 中获取,也可在项目详情页面中获取。

示例:https://www.geosceneonline.cn/geoscene/webapps/item?id={id}

WebMapWebScene 对象加载 web 地图和 web 场景时,它们的配置信息都会自动应用于 MapScene。例如,底图和图层的设置,图层样式的设置,图层自定义的弹出窗口。

注:创建 web 地图和 web 场景并通过唯一 ID 加载它们是配置 MapScene 的最快方法。在创建 web 地图(参见GeoScene Enterprise帮助文档)和显示 web 地图教程中了解如何创建和加载 web 地图。

从 WebMap 创建地图

1
2
3
4
5
6
7
8
9
10
11
const webMap = new WebMap({                        // 定义 web 地图参考
  portalItem: {
    id: "2a78a76e9a4144f9873355367ae76e26",
    portal: "https://www.geosceneonline.cn/geoscene"               // 默认: GeoScene Online 门户
  }
});

const view = new MapView({
  map: webMap,                                     // 加载 web 地图
  container: "viewDiv"
});

显示 web 地图教程中了解更多信息。

从 WebScene 创建场景

1
2
3
4
5
6
7
8
9
10
11
const webScene = new WebScene({                    // 定义 web 场景参考
  portalItem: {
    id: "11593e93155b4db38cd32f538e9213d6",
    portal: "https://www.geosceneonline.cn/geoscene"               // 默认:GeoScene Online 门户
  }
});

const view = new SceneView({                       // 加载 web 场景
  map: webScene,
  container: "viewDiv"
});

显示 web 场景教程中了解更多信息。

使用视图

视图的主要作用是显示图层、弹出窗口和 UI 微件,处理用户交互。

创建视图

用于创建地图视图和场景视图的类是不同的:分别为MapViewSceneView 类。MapView 显示 Map 对象的 2D 视图, SceneView 显示 3D 视图。

创建视图对象需要传入一个 Map 对象和一个 String 类型变量,这个变量是地图容器的 div 元素的id 属性或 div 元素的引用 。

1
2
3
4
const mapView = new MapView({          // 创建 MapView 对象
  map: myMap,
  container: "mapViewDiv"
});
1
2
3
4
const sceneView = new SceneView({      // 创建 SceneView 对象
  map: myMap,
  container: "sceneViewDiv"
});

设置地图的视图范围

MapViewSceneView 的初始显示位置可以通过在创建视图时设置 centerzoomscale 属性来设置。

1
2
3
4
const view = new MapView({
  center: [ 116, 39 ],          // 用经纬度表示的地图中心
  zoom: 13                      // 缩放级别 (LOD) ,此处设置为 13
});

注:视图位置也可以在初始化后通过修改属性来更新。

使用 SceneView (3D) 时,可以通过定义 camera 的来设置观察者的位置。

1
2
3
4
5
6
7
8
9
10
11
var view = new SceneView({
  camera: {
    position: [
       122, // 经度
         38, // 纬度
      50000  // 高程,以米为单位
    ],
    heading: 95, // 相机正对的方向
    tilt: 65 // 相机相对于地面的倾斜度
  }
});

显示地图显示场景教程中了解如何创建 2D 和 3D 视图。

改为视图范围(动画形式)

MapView 提供了 goTo 方法,通过这个方法可以平滑过渡到一个新的视图位置上。这种技术通常用于从一个位置“飞”到另一个位置或缩放到搜索结果范围。

goTo 方法可接受 GeometryGraphicViewpoint 对象。另外也提供了控制动画效果的其他属性。

1
2
3
4
5
6
7
view.goTo({                            //使用自定义动画,在设定时间内转至到某点
  target: {
      center: [ 114, 39 ]
    }, {
      duration: 5000
  });
});

与视图交互

视图还负责处理用户交互和显示弹出窗口。视图为用户交互提供了多个事件处理程序,例如鼠标单击、键盘输入、触摸屏交互、操纵杆和其他输入设备。

当用户单击地图时,默认行为是显示已在图层中预先配置的任何弹出窗口。我们也可以通过监听 click 事件并使用 hitTest() 方法查找用户单击处的要素,使用以下代码手动地模拟此行为。

1
2
3
4
5
6
7
8
9
10
11
12
13
view.popup.autoOpenEnabled = false;  // 禁用默认的弹出行为

view.on("click", function(event) { // 监听单击事件
  view.hitTest(event).then(function (hitTestResults){ // 搜索用户单击处的要素
    if(hitTestResults.results) {
      view.popup.open({ // 打开弹出窗口以显示一些结果
        location: event.mapPoint,
        title: "Hit Test Results",
        content: hitTestResults.results.length + "Features Found"
      });
    }
  })
});

了解有关视图事件自定义配置弹出窗口的更多信息。

将微件和 UI 组件添加至视图

视图同时也是微件HTML 元素的容器。view.ui 属性提供了一个 DefaultUI 容器,用于显示视图的默认微件。也可以使用 view.ui.add 方法将其他微件和 HTML 元素添加至视图。以下代码片段演示了添加用户搜索地址或地点的微件。

1
2
3
4
5
6
7
8
  var searchWidget = new Search({
    view: view
  });

  // 将搜索微件添加到视图的右上角
  view.ui.add(searchWidget, {
    position: "top-right"
  });

了解有关将添加微件到视图的更多信息。

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