ArcGIS JavaScript 核心概念

原文来自于
Maps and Views:https://developers.arcgis.com/javascript/latest/guide/maps-and-views/

介绍

地图(Map)是用于管理对图层(layers )底图(basemaps)的引用的容器。视图(Views)用于显示地图图层并处理用户交互,弹出窗口,窗口小部件和地图位置。

类关系示意图.png

关于地图

地图是从Map类创建的。Map对象始终传递给View对象。有两个View类用于显示地图:MapView用于2D地图 和 SceneView类用于3D地图。

创建地图

创建地图的一种方法是:Map类在指定一个底图(basemap)和可选的图层集合(layers)时创建类的新实例。

const myMap = new Map({                // 创建一个Map对象
  basemap: "streets-vector",
  layers: additionalLayers             // 可选,添加其他图层集合
});

const mapView = new MapView({          // 新建View对象,Map对象添加到View对象中
  map: myMap,
  container: "mapDiv"
});

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

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

创建地图的第二种方法是:加载Web地图(用于2D地图)或 Web场景(用于3D地图)。

Web地图和Web场景是包含地图或场景设置的JSON结构。这包括底图,图层,图层样式,弹出窗口,图例,标签等的设置。它们通常与ArcGIS Online地图查看器ArcGIS Online场景查看器以交互方式创建。ArcGIS Online或ArcGIS Enterprise为其分配唯一ID并将其存储为门户项目

WebMap类和WebScene类可分别通过其独特的ID来访问加载Web地图和Web场景。标识项目的ID可以用在地图查看器场景查看器或者项目页面中中的URL的参数。默认门户网站是ArcGIS Online,URL是https://www.arcgis.com。如果使用ArcGIS Enterprise,则必须指定门户URL。

例: https://www.arcgis.com/home/item.html?id=41281c51f9de45edaf1c8ed44bb10e30

WebMapWebScene对象加载Web地图和Web场景时,所有设置都会自动应用于MapScene。例如,设置底图和图层,应用图层样式,并为每个图层定义弹出窗口。

注意:配置MapScene的最快方法是,以交互方式创建Web地图和Web场景并通过唯一ID加载它们。在创建Web地图”显示Web地图教程中了解如何创建和加载Web地图。

  • 用WebMap创建地图

const webMap = new WebMap({                        // 定义Web地图实例
  portalItem: {
    id: "41281c51f9de45edaf1c8ed44bb10e30",
    portal: "https://www.arcgis.com"               // 默认值:ArcGIS门户网站
  }
});

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

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

  • 用WebScene创建场景

const webScene = new WebScene({                    // Define the web scene reference
  portalItem: {
    id: "579f97b2f3b94d4a8e48a5f140a6639b",
    portal: "https://www.arcgis.com"               // Default: The ArcGIS Online Portal
  }
});

const view = new SceneView({                       // Load the web scene
  map: webScene,
  container: "viewDiv"
});

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

关于视图

视图的主要作用是显示图层,弹出窗口和UI小部件,处理用户交互,以及指定地图应该关注的世界的哪个部分(即地图的“范围”)。

创建视图

有单独的类用于为地图和场景创建视图:MapViewSceneView类。MapView用于显示对象的2D视图,和SceneView用于显示3D视图Map

要使地图可见,视图对象需要一个Map对象,并且container属性正确引用div元素的id属性。

const mapView = new MapView({          // Create MapView object
  map: myMap,
  container: "mapViewDiv"
});

const sceneView = new SceneView({      // Create SceneView object
  map: myMap,
  container: "sceneViewDiv"
});

设置地图的显示内容

创建视图SceneViewMapView时可以通过在设置中心点center和(缩放级别zoom或比例尺scale)属性来设置的初始位置。

const view = new MapView({
  center: [ -112, 38 ],          // 地图的中心 经度/纬度
  zoom: 13                      // 将细节的缩放级别(LOD 细节层次(en:Level of detail))设置为13
});

注意:通过以编程方式更新属性,视图初始位置也可以改变。

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

var view = new SceneView({
  camera: {
    position: [
       -122, // 经度lon
         38, // 纬度lat
      50000  // 海拔(米)
    ],
    heading: 95, // 相机的罗盘角度
    tilt: 65 // 相机相对于地面的倾斜
  }
});

了解如何在创建入门应用程序教程中创建2D和3D视图。

将视图设置为新位置的动画

goTo方法还可以更改视图MapView的位置,而且提供了平滑过渡的附加选项。该技术通常用于地图中心从一个位置“飞行”到另一个位置或者缩放到搜索结果。

goTo方法可以接受GeometryGraphicViewpoint对象。其他选项可以控制动画。

view.goTo({                            // 自定义动画移动到设定的点
  target: {
      center: [ -114, 39 ]
    }, {
      duration: 5000
  });
});

与视图交互

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

当用户单击地图时,默认行为是显示已在图层中预先配置的任何弹出窗口。可以使用以下代码,通过监听click事件并使用该hitTest()方法查找用户单击的功能。

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元素添加到视图中。下面的代码片段演示了添加搜索地址或地点的小部件。

  var searchWidget = new Search({
    view: view
  });

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

了解有关向视图添加小部件的详细信息。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容