Angular(4)中加载Arcgis for JavaScript地图

ArcGIS API for JavaScript开发之地图,视图 arcgis for js 开发ArcGIS API for JavaScript1.获取API2.地图 Map(1)basemap 底图(2)layers 图层3.视图MapView3.引入其他地图图层(1)BaseTileLayer(2)request请求(3)config配置(4)Color颜色(5)引入其他图层 ArcGIS API for JavaScript 1.获取API 开发人员可以通过多种方式使用ArcGIS API for JavaScript。最常见的方法是使用CDN版本。请参阅下面的 阅读详情

背景

近期我司项目的需要,采用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; // js

map: 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,很多东西都没有做过多的了解和深入。不知道那行代码存在隐患。所以革命尚未成功,还得加倍学习和实践巩固。

鸣谢

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

Angular+arcgisjs之平面地图测距、测面积、搜索 本文代码基于Angular8和arcgis js 4.16。 代码里会涉及到一个地图变量mapView,初始化如下: const map = new Map({ basemap: 'osm', }); this.mapView = new MapView({ container: this.mapContainer.nativeElement, center: [113.280637, 23.125178], zoom: 12, map, }); 官网提供了许多小组件,很多操作不需要 阅读详情

相关推荐

openLayer 加载arcgis地图服务

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <link rel="stylesheet" href="http://localhost/openlayers/css/ol.css" type="text/css"> <sc.

一碗老面的博客 1147

angular或者ionic调用arcgis js api

参考arcgis for js api的官方文章(https://developers.arcgis.com/javascript/latest/guide/angular/),实现webpack方式调用。 ionic针对ionic angular框架 如果遇到dojo问题,参考(https://developers.arcgis.com/javascript/latest/guide/usi...

shendygis的专栏 631

近4000张真实城市场景行人数据集:YOLO训练实战指南

行人检测是计算机视觉在智能驾驶与机器人感知中的基础任务,其核心挑战在于模型对真实道路场景的鲁棒性——尤其在小目标、遮挡、光照变化及中国特有交通参与者(如外卖骑手、接娃家长)下的泛化能力。本文围绕轻量化、高覆盖、强落地性的近4000张实采图像,系统阐释如何构建面向YOLO系列模型的高质量训练数据集:从四维场景采样策略(光照-遮挡-尺度-姿态)出发,解析标注规范对检测精度的关键影响,并说明数据增强需服务于真实干扰源(雨痕、动态模糊、对比度衰减),而非盲目堆叠。该数据集专为已掌握YOLO训练流程的算法工程师、嵌入

weixin_32495691的博客 297

angular调用arcgis js api(esri-loader方式)

angular调用arcgis,用typescript,通过esri-loader调用。 目前还没用npm的方式安装arcgis-js-api,还是通过下载到本地的方式实现。 1、下载最新的arcgis-js-api 解压放在angular代码src\assets\lib\esri\4.7下,更改init.js文件和dojo.js文件,与其他本地部署方式一样,主要更改[hostname]之类的,如...

shendygis的专栏 2282

SpringBoot + MyBatis-Plus 高效实现数据变更记录:从注解到通用审计方案(附源码)

*** 数据变更审计插件* 拦截增删改操作,自动记录变更日志*/@Component@Resource/*** 拦截SQL执行*/@Override/*** 数据变更审计插件* 拦截增删改操作,自动记录变更日志/*** 拦截SQL执行。

2601_94871597的博客 558

MICCAI‘23 | TSegFormer:基于几何引导Transformer的口内扫描3D牙齿分割

光学口内扫描仪(IOS)在数字牙科中广泛应用于提供牙冠和牙龈的详细3D信息。准确的3D牙齿分割对于各种牙科应用至关重要,但现有方法在复杂边界处容易出错,并且在不同患者之间表现不佳。本文提出了TSegFormer,它通过多任务3D Transformer架构捕捉IOS点云中不同牙齿和牙龈之间的局部和全局依赖关系。此外,作者设计了一种基于新颖点曲率的几何引导损失,以端到端方式优化边界,避免了耗时的后处理,从而实现临床适用的分割。

小白学视觉 291

使用ArcGIS for JavaScript 4.11加载地图以及对要素图层进行编辑操作

使用ArcGIS for JavaScript 4.11加载地图以及对要素图层进行编辑操作 (一)准备工作 使用Arcmap制作本地地图以及要素图层,将要素图层导出为shp文件,将图层添加至ArcCatlog,添加至ArcSDE数据库。使用Arcmap发布地图服务以及要素服务 导入JS包 (二)主要方法 在4.x版本中,选择MapImageLayer导入地图服务,FeatureLayer导入要...

weixin_39484674的博客 2017

大厂硬件机试选择题与判断题解析-卷1

本文精选30道硬件工程师机试题目,涵盖模拟电路、数字电路、PCB设计三大方向。模拟电路部分重点考察运算放大器、滤波器、整流电路等核心知识;数字电路部分聚焦计数器、电平转换等关键技术;PCB设计部分强调高速信号处理、阻抗控制等实践要点。题目均来自华为、小米等大厂真题,剔除基础题,每道题附详细解析,包括正确答案推导过程及相关公式说明。特别针对易错概念(如负反馈类型判断、Q值与带宽关系等)进行重点解析,帮助考生系统掌握硬件设计的核心考点和解题思路。

启芯硬件的博客 677

WebGIS 之 ArcGIS API for JavaScript 总结(一)

几天时间过完了一本《WebGIS 从基础到开发实践》 (电子版下载地址: http://www.25mg.cn/wp/training/webgis/webgis从基础到开发实践/) 如今阅读技术书籍也同读小说一样,风里来雨里去,恢宏巨著,从洪荒原始到当今现代。由于是媳妇在图书馆给借的书,在这里将这本书做一个总结和笔记。 一、为什么要读这本书。 美国的esri公司,全称美国环境系统研究所公...

zw3413的专栏 5433

基金估值核算系统三国杀:恒生 VS 赢时胜 VS 融选!

本文对比分析了恒生电子、赢时胜和融选科技三家金融科技公司的基金估值系统。恒生电子作为行业龙头,在公募基金领域占据较大份额,其新一代估值系统6.0采用微服务架构,自动化程度高;赢时胜在中型公募和券商资管领域优势明显,其V5.5系统在信创适配和复杂产品处理方面表现突出;融选科技作为新兴厂商,提供轻量化解决方案,适合中小型机构。文章从市场格局、系统定位、技术架构、成本构成和用户反馈五个维度进行深入比较,为金融机构选型提供参考。当前估值系统市场呈现"三国鼎立"格局,各具特色,选型需结合机构规模、

magbox520的博客 826

C++ PCL点云处理实战专栏

工业级点云处理技术学习资源,涵盖电力、建筑、隧道等领域的实战案例。内容分为三阶段:代码原理(算法认知)、动态库(项目验证)和完整代码(定制开发)。

weixin_45196569的博客 1117

探索ArcGIS Maps SDK for JavaScript资源库:一站式框架集成与开发模板指南

ArcGIS Maps SDK for JavaScript资源库(gh_mirrors/js/jsapi-resources)是一个为开发者提供的一站式框架集成与开发模板集合,旨在帮助开发者更轻松地使用ArcGIS Maps SDK for JavaScript构建地图应用。该资源库包含了多种流行框架和模块打包工具的代码模板,以及布局示例和教程,为不同需求的开发者提供了丰富的选择。 ## 🌟

gitblog_00057的博客 961

形状记忆合金热机械本构模型的ABAQUS子程序实现与Fortran\_ABAQUS编程实践

本文详细介绍了如何使用ABAQUS子程序实现形状记忆合金的热机械本构模型,并通过Fortran_ABAQUS进行编程实践。我们首先介绍了问题的背景和目标,然后讲解了如何在Fortran_ABAQUS子程序中实现热变形模型、应力应变关系和相变模型,最后进行了ABAQUS模拟,并分析了模拟结果。希望通过本文的讲解,能让大家更深入理解ABAQUS子程序以及Fortran的使用,也希望能对大家在进行相关学习或研究工作时提供一些帮助。

qq_38334677的博客 1327

2024最新ArcGIS Maps SDK for JavaScript入门教程:从安装到第一个地图应用

想要快速掌握**ArcGIS Maps SDK for JavaScript**并创建交互式地图应用吗?这份完整指南将带你从零开始,在短短几步内构建你的第一个地图应用!🚀 ## 什么是ArcGIS Maps SDK for JavaScript? **ArcGIS Maps SDK for JavaScript**是Esri官方提供的地图开发工具包,让开发者能够轻松创建功能丰富的地图应用。无

gitblog_01075的博客 753

通过Simulink搭建一个智能微电网能量管理系统(Energy Management System, EMS)

通过上述代码实现,您可以逐步创建一个智能微电网能量管理系统。多源能量集成:整合光伏、风力发电、柴油发电机、电池储能等多种能源资源。负荷预测与调度:基于历史数据和天气预报,预测未来负荷和可再生能源输出,进行优化调度。储能系统优化:设计合理的充放电策略,确保储能系统的高效利用和寿命延长。经济性分析:评估不同运行模式下的经济性,考虑电价、维护成本等因素。环境影响评估:分析微电网对环境的影响,如减少碳排放、提高可再生能源利用率等。硬件在环仿真(HILS)

amy_mhd的博客 314

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Angular+ArcGIS Maps SDK完美结合:构建企业级地图应用的终极方案

想要构建专业级的地图应用却不知从何开始?Angular与ArcGIS Maps SDK的结合为企业级地理信息系统开发提供了终极解决方案!🚀 这个强大的组合让开发者能够快速创建功能丰富、性能卓越的地图应用程序,无论是数据可视化、空间分析还是实时监控,都能轻松实现。 ## 为什么选择Angular+ArcGIS Maps SDK? Angular作为企业级前端框架,提供了完整的开发工具链和强大的

gitblog_00257的博客 421

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Vue开发者必看:ArcGIS Maps SDK for JavaScript Vite模板极速上手教程

想要在Vue应用中快速集成专业级地图功能吗?ArcGIS Maps SDK for JavaScript Vite模板是你的终极解决方案!这个模板专为Vue开发者设计,让你在5分钟内就能搭建起功能强大的地图应用。🎯 ## 为什么选择ArcGIS Maps SDK for JavaScript Vite模板? ArcGIS Maps SDK for JavaScript是目前最强大的Web地图

gitblog_00657的博客 952

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

ArcGIS图表组件完全指南:实现地图与数据可视化的联动交互

想要在地图上展示数据的同时,还能通过图表进行深度分析吗?ArcGIS Maps SDK for JavaScript 提供了强大的**ArcGIS图表组件**,让你轻松实现地图与图表的双向联动交互。无论你是数据分析师、GIS开发者还是前端工程师,这份完整指南将带你快速掌握如何创建动态的数据可视化应用。🚀 ## 为什么选择ArcGIS图表组件? ArcGIS图表组件是ArcGIS Maps S

gitblog_01084的博客 945

ArcGIS Maps SDK for JavaScript 终极资源指南:从零开始构建专业地图应用

ArcGIS Maps SDK for JavaScript 是一个强大的工具集,让开发者能够轻松创建交互式地图应用。无论你是前端开发新手还是经验丰富的GIS专家,这个资源库都能为你提供实用的示例和最佳实践。 ## 🌟 为什么选择 ArcGIS Maps SDK? ArcGIS Maps SDK for JavaScript 提供了完整的解决方案,帮助你快速构建专业级的地图应用。通过这个资源

gitblog_00250的博客 689

ArcGIS API for JS 3.××加载天地图

本人是一枚刚刚从事WebGIS开发的小白,现在项目需求在angular框架下,采用3.22版本API加载天地图,由于目前没有数据,所以就把天地图的底图全部加载了一遍,在加载过程中出现了问题,有的Chrome不显示,查看了div没有覆盖遮挡之类的,于是把底图中所有的东西打印出来发现空间参考不一致。 以下是我遇到的坑 天地图提供了两种坐标,一种是地理坐标系WGS1984 ,一种是投...

qq_34613487的博客 1161

Angular+Arcgisjs之地图外代码实现平移、缩放

本文代码基于Angular8和arcgis js 4.16。 arcgis地图自带了缩放、平移效果,因此本文讲的是在地图外点击自定义按钮实现平移、缩放效果。 代码里涉及到一个变量mapView,详细配置见Augular+arcgisjs之初始化地图 地图外代码实现平移、缩放 /** * 缩放 * * @param oper 放大或缩小 */ zoomInOrOut(oper: 'IN' | 'OUT') { const SCALE_SIZE = 10000; const

weixin_40216444的博客 973

Angular项目中,基于esriLoader+iframe实现不同页面调用3.x与4.x ArcGIS JS API

场景:        现在有个项目同时涉及二维、三维地图功能,明确要求使用ArcGIS 平台。目前ArcGIS API For JS有两个系列3.x和4.x,3.x只能实现二维功能,4.x主要支持三维功能,同时也支持部分二维功能,但4.x并不能完全覆盖3系列二维功能,而且接口名称方法都有变化。官网上说是如果涉及到三维功能,必须使用4.x系列。现在来看的话,4.x版本肯定得用,另外一方面由于之前项...

wml00000的博客 676

Angular2+中使用angular2-esri-loader加载ArcGIS JS API(当前官方已弃用)

安装环境npm install angular2-esri-loader esri-loader在module中引入EsriLoaderServiceimport { EsriLoaderService } from 'angular2-esri-loader';@NgModule({ … providers: [ EsriLoaderService, … ], … })在index.html

idomyway的博客 1693

arcgis开发记录

参考链接:https://developers.arcgis.com/javascript/latest/sample-code/featurelayerview-query/index.html。一个例子: https://developers.arcgis.com/javascript/latest/sample-code/view-hittest/index.html。在这里使用view 的 on事件,当点击地图上一个点的时候,如果这个点事图层上的点,则会出发这个事件, 如果不是,则没有有反应。

Orzak的博客 1081

angular下arcgis开发遇见的问题

如上图所示,arcgis地图加载不完全,经过排查,是由于没有加载arcgis自己的CSS样式,把CSS加载上就好了。如上图所示在地图中出现了一条白线,经过查找,在显示地图的块中,对DIV块进行了宽高的拉伸,经查找,这个是地图服务发生错误,导致不能读取地图了,属性冲突了,导致了arcgis自己的样式失效了。这个是由于 bootstrap样式中。同时把自己写的地图拉伸样式去掉就可以了。

Orzak的博客 611

Angular/ionic 加载ArcGIS API for JavaScript报错:TypeError:esri_loader_1.bootstrap is not a function

前言 &nbsp;&nbsp;&nbsp;&nbsp;在做ionic3+/Angular 加载ArcGIS API for JavaScript,出现以下错误: &nbsp;&nbsp;&nbsp;&nbsp;如何在Angular项目中使用ArcGIS API for JavaScript请参考:https://blog.youkuaiyun.com/idomyway/article/details/...

idomyway的博客 1830
上一篇: 安装Linux后我做的几件事
下一篇: 本地白嫖AI绘画 ,Stable Diffusion 初探!
AwesomeYangIsMe
博客等级 码龄10年 49粉丝 28原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值