通过ArcGIS创建2D及3D地图

777 阅读2分钟

前端开发中,GIS的用途很明确,就是用来做地图。你对地图的操作,不管是图形的绘制还是实体的添加都是在基础地图之上。本文将向你讲诉如何使用GIS创建基础地图以一些API的使用。

前提

在编写代码之前先简单叙述下GIS的原理,GIS也是基于AMD模式,所以你需要通过require(["esri/Map"], function(Map) { })来引入Map的类或者子类,然后通过回调来创建地图实例。

  • 'esri/Map'是创建Map的前提(父类)
  • 创建2D时则需引入MapView子类,回调中也需要指定MapView,require(["esri/Map", "esri/views/MapView"], function(Map,MapView) { })
  • 创建3D时引入SceneView子类,require(["esri/Map", "esri/views/SceneView"], function(Map,SceneView) { })

了解了上面类的大致作用后,接下来代码的实现应该看起来就会易懂点

创建HTML

  • 设置窗口大小,指定试图容器
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no">
    <title>2D及3D地图</title>
    <style>
      html, body, #viewDiv {
        padding: 0;
        margin: 0;
        height: 100%;
        width: 100%;
      }
    </style>
  </head>
  <body>
    <div id="viewDiv"></div>
  </body>
</html>

添加GIS的API及CSS样式cdn

<link rel="stylesheet" href="https://js.arcgis.com/4.15/esri/themes/light/main.css">
<script src="https://js.arcgis.com/4.15/"></script>

创建2D地图

<script>
  require([
      "esri/Map",
      "esri/views/MapView"
    ], function(Map, MapView) {

    var map = new Map({
      basemap: "satellite"
    });

    var view = new MapView({
      container: "viewDiv",
      map: map,
      center: [104, 30],
      zoom: 13
    });
  });
  </script>
  • 关于引用的类就不再缀诉,这里讲讲实例。首先通过Map创建地图实例,basemap指定地图的基本图层样式。关于basemap的可选值有 light-gray-vector,dark-gray-vector,satellite,streets-relief-vector,和streets-navigation-vector,大家可以一一尝试。我这里选用的效果如下:

  • 然后通过MapView创建2D实例,container对应地图容器,center指定视角,这里默认成都周边。

创建3D地图

<script>
  require([
      "esri/Map",
      "esri/views/SceneView"
    ], function(Map, SceneView) {

    var map = new Map({
      basemap: "topo-vector",
      ground: "world-elevation"
    });

    var view = new SceneView({
      container: "viewDiv",
      map: map,
      camera: {
        position: {
          x: 104,
          y: 30,
          z: 25000
        },
        tilt: 65
      }
    });
  });
  </script>

3D与2D的区别:

  • 子类不同:3D对应子类为SceneView
  • Map实例中需添加ground属性,设置world-elevation显示高程变化
  • camera指定视角,position对应经纬度和高度

小编也是刚用GIS的新手,文章中有错误之处还请大家多多指正。