背景

近期我司项目的需要,采用Angular(4)+SpringBoot前后端分离的架构。并且在需要在项目中实现Arcgis地图。
本人之前有过Arcgis for JavaScript的小小填坑经验,并且在公司一直有前后端都会做点的,所以我的任务自然明了。

寻寻觅觅

像我这种菜鸡遇到这种没有干过的事情肯定是先问百度和谷歌,两个关键词敲下。几乎搜索的内容里很少有两个关键字共存的。但是我这慧眼识得好代码,于是发现了这: https://github.com/Esri/angular-esri-map

Esri是美国环境系统研究所公司,多年来,ESRI公司始终将GIS视为一门科学.也就是说这是官方实例呀。

这样就完了吗?不,事情总是没那么简单的。我以负八级的英文水平开始看这个项目的README,第一行。心都碎了[手动心碎]他是这样说的。

A collection of directives to help you use Esri maps and services in your AngularJS v1.x applications.

wtf?==>AngularJS v1.x applications,我的项目用的可是4.x,这不扯淡?

继续遨游在GayHub[手动滑稽]的代码海洋里。皇天不负有心人让我找到了他:
https://github.com/tomwayson/angular2-esri-example

在这里我尝试将他的项目clone到本地,的确可以跑起来,并且可以看到地图,但尝试获取核心代码但是在包下载的时候就出现了很多问题于是放弃了[真的是无限差包]。

拨云见雾

因为之前看到是2.x版本就机遇尝试便没有仔细阅读本项目的说明文档。回去看他的说明文档并把Resources节点下的东西都挨个看了一遍,发现了其中一项貌似很有用:
- Example of how to use the ArcGIS API for JavaScript in an angular-cli application
- 【译】如何在 Angular CLI 程序中使用ArcGIS API for JavaScript的示例

于是开始阅读这个示例的说明文档,他在文中提到:

This repository is an example of one way to use the ArcGIS API for JavaScript in an application generated with angular-cli.
此存储库是在使用angular-cli生成的应用程序中使用ArcGIS API for JavaScript的一种方法的示例

还有一句:

Adding the ArcGIS API to your own angular-cli application
将ArcGIS API添加到您自己的Angular-cli应用程序

Rather than clone this repository, you should create your own application with the angular-cli and then follow the instructions below to add the above libraries:
而不是克隆此存储库,您应该使用angular-cli创建自己的应用程序,然后按照以下说明添加以上库:

下面的是说明:

  • angular2-esri-loader - a low level service needed to load and use ArcGIS modules (v3.x or v4.x) in your Angular applications

    • 在Angular应用程序中加载和使用ArcGIS模块(v3.x或v4.x)所需的低级服务
  • angular-esri-components - a set of reusable components for use with v4.x (only) of the ArcGIS API
    • 一组(仅)可用于ArcGIS API v4.x的可重用组件

上面的意思已经很清楚。这个项目不建议clone,而是使用angular2-esri-loader 来加载ArcGIS模块,angular-esri-components组件是只能在Arcgis4.x版本中使用的。

当点开angular2-esri-loader这个模块的时候,会很清楚的看到如何安装这个Angular的gis加载库,并且写了示例程序。对于angular有一定的了解的话,这些代码或许就能很清晰的表达出它在做什么。

示例的代码就不列出,可以到github上阅读。大体流程是:

  • npm安装angular-esri-loader,Angular版本不同则安装的命令和库也会存在差异
  • EsriLoaderModule模块加载到程序中
  • 使用EsriLoaderService组件加载地图
  • 文档中加载的是基础图层,但一般开发时会加载缓存地图服务或者其他类型地图服务。这将在我的的示例项目中看到

项目示例:
https://git.oschina.net/StruggleYang/ngGisDemo

项目效果:

差异对比

你如果看过Arcgis for JavaScript的代码。那么JavaScript代码,如何转换为Angular(TypeScript)的代码,这里我也没有做过多的了解,只是照葫芦画瓢写的一些:

这里推荐去看一下阮一峰的:ES6标准入门可以提供一些参考

下面将做出原生的Arcgis for JavaScript代码和Angular中的书写对比。

变量声明:

// 有可能你需要在地图初始化前首先声明变量,以便你在任何地方都是可用的var map; // jsmap: any; // ts

地图的模块加载,Arcgis的api是基于dojo框架的,如下:

  • JavaScript中加载地图模块
var map;require(["esri/map", "dojo/domReady!"], function(Map) {var map = new Map("map", {center: [-118, 34.5],zoom: 8,basemap: "topo"});
});
  • Angular中加载地图(基于angular-esri-loader加载器)
// 这里代码并不全,具体请查看上面的示例项目
.. 省略导入@ViewChild('map') mapEl: ElementRef;map: any;ngOnInit() {return this.esriLoader.load({// 在js中是不管这个url的,因为它在html中已经引入对应的版本url: '//js.arcgis.com/3.18/'}).then(() => {this.esriLoader.loadModules(['esri/map']).then(([Map]) => {this.map = new Map(this.mapEl.nativeElement, {center: [-118, 34.5],zoom: 8,basemap: 'topo'});});});
}

dojo事件添加:

...
// dojo点击事件添加 by JavaScript
dojo.connect(map, 'onClick', function(evt){var emp = evt.mapPoint;var cur_wkid = emp.spatialReference.wkid; ... more code...
});
......
// dojo点击事件添加 by Angular
dojo.connect(this.map, 'onClick', (evt) => {const emp = evt.mapPoint;const cur_wkid = emp.spatialReference.wkid; ... more code...
});
...

这里实际上就是一个箭头函数的区别还有变量的声明区别。

满地黄花

这就结束了?

不不不,远远还不只这些。不论是Angular还是Arcgis,很多东西都没有做过多的了解和深入。不知道那行代码存在隐患。所以革命尚未成功,还得加倍学习和实践巩固。

鸣谢

  • 差点放弃的时候静心的自己
  • tomwayson的代码让我找到了解决方案
  • angular-esri-loader
  • Arcgis API for JavaScript示例代码
  • 还有公司的网卡驱动[滑稽]

本文同时发布于我的个人博客:
http://www.struy.top/2017/09/16/Angular-load-ArcGis-for-JavaScript/

Angular(4)中加载Arcgis for JavaScript地图相关推荐

  1. arcgis中如何导出奥维可识别的图_如何在奥维中加载ArcGIS发布的地图服务

    在工作中,您可能有大量的航拍图需要在奥维中加载显示,但直接导入航拍图的数据处理量较大.对电脑硬件的要求较高.因此,您可以通过ArcGIS将航拍图发布成地图服务,在奥维中以在线自定义地图的形式加载. 1 ...

  2. Leaflet中加载离线OSM瓦片地图(使用OfflineMapMaker切割下载离线png地图文件)

    场景 Leaflet快速入门与加载OSM显示地图: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/122290880 上面加载显示 ...

  3. Openlayers中加载GeoJson文件显示地图

    场景 Openlayers下载与加载geoserver的wms服务显示地图: Openlayers下载与加载geoserver的wms服务显示地图_BADAO_LIUMANG_QIZHI的博客-CSD ...

  4. vue项目中加载使用腾讯地图

    在vue-cli脚手架搭建的vue项目里使用到了腾讯地图.看了腾讯地图的官方给出的API(https://lbs.qq.com/javascript_v2/index.html)敲了一遍代码,才有点感 ...

  5. ArcEngine中加载ArcGIS Server地图服务

    代码如下: private void addMapServerLayer(object sender, EventArgs e) {             IActiveView pActiveVi ...

  6. Arcgis for js,Openlayers中加载GeoJSON

    概述: 在前文中,讲述了在JAVA环境下如何将shp转换为GeoJSON,在本文,分别讲述在Arcgis for js,Openlayers2和Openlayers3中加载展示GeoJSON. 实现: ...

  7. ArcGIS中加载无偏移谷歌卫星影像!奥维官方插件与ArcGIS协同互动

    前段时间奥维地图推出了一款与ArcGIS协同插件OmapArcMap 对于经常使用奥维的小伙伴来说无疑是一种福利 这个插件会让你大大提高工作效率 这个插件主要有两个功能 可以在ArcGIS中在线加载谷 ...

  8. 在 ArcGIS Engine 应用程序中加载搜狗地图和谷歌地图。

    在ArcGIS Engine 应用程序中加载搜狗地图和谷歌地图. Adding sogou map or google map in ArcGIS Engine application WebmapL ...

  9. ArcGIS中加载天地图省级遥感影像服务

    天地图遥感影像的分辨率一般都是米级别的,而且更新的速度也是越来越快.质量也越来越好,那我们如何使用这方面的资源呢,本期我就给大家梳理一下,如何在ArcGIS软件中加载天地图省级遥感影像服务WMTS. ...

最新文章

  1. 一文教你 Dubbo 服务性能压测(with JMeter)
  2. C/C++ http协议发送字段,文件,单个和多张图片
  3. 编写程序判断一个 vector<int> 容器所包含的元素是否9.20: 与一个 list<int> 容器的完全相同。
  4. 美国只有两样东西比中国贵
  5. mysql分表全局查询_mysql如何查询多样同样的表/sql分表查询、java项目日志表分表的开发思路/按月分表...
  6. 通俗易懂!视觉slam第十一部分——线性系统和卡尔曼滤波
  7. html评论和回复评论_佟丽娅“挑衅”贾玲,评论区晒刘德华合照,贾玲高情商回复佩服...
  8. JavaScript实现秒杀倒计时效果(附源码)
  9. laravel安装说明
  10. excel两列数据对比找不同_Excel找出不同数据
  11. SARscape之DInSAR处理(双轨法)
  12. Java学习笔记day5_数组
  13. idea maven 显示wating for maven import completionomitted for duplicate jar
  14. 已加载插件:fastestmirror Loading mirror speeds from cached hostfile
  15. CentOS发行版本与内核版本对应关系
  16. Linux操作系统学习笔记(二十)网络通信之TCP协议
  17. 思科ccie网络工程师一定要里了解的网络拥塞及拥塞控制技术
  18. JetPack 组件总结
  19. 全国首条5G环线在成都正式开通
  20. 图表分析2020年和2018年北京积分落户数据

热门文章

  1. fl studio中文版水果2020下载Keymaker-CORE.rar及使用常见问题教程
  2. 接YSDK上架应用宝遇到的问题及解决办法
  3. 2022.04.13(LC_55_跳跃游戏)
  4. 猜数字游戏(改进版)
  5. w7运行里的计算机怎么设置,w7怎么设置耳麦_win7耳麦在电脑上怎么设置
  6. 单片机c语言 常用英语,数码管单片机c语言程序设计(国外英语资料).doc
  7. 招聘JD,机会多多环境骚扰
  8. 1万3千多初中生物题库ACCESS数据库
  9. 三菱5U摆盘机程序六轴此程序包含组态
  10. PL/SQL 11g R2 —— 包