不知道大家有没有这种体验,我们开始学web开发的时候,会把HTML、JavaScript、CSS代码都堆叠在一个HTML文件中,慢慢地,随着代码量的增多,不同的代码堆叠在一起显得很乱,我们开始把html、css、js独立到不同的文件中。随着JS代码的数量不断增长,JS文件的数量也一样,管理和引用js代码也变得复杂起来,而解决这种问题一个有效的方法就是采用“面向对象(OO)”模式。通过使用面向对象的风格,可以避免应用程序中代码混乱,并且可以增加代码的复用性,简化应用程序后期维护,可以使错误更快地修复,并在更短的时间内实现新功能。

ArcGIS API中的模块

Dojo Toolkit是一个开源的模块化JavaScript库(或更具体地说是JavaScript工具包),Dojo的代码被划分为逻辑单元称之为模块, 这有点类似于Java中的package,模块中可以包含类和简单方法。而ArcGIS API for JavaScript就是建立在Dojo的基础之上,然后增加了自己的模块。

我们平常使用ArcGIS API for JavaScript开发时,首先得require需要用到的类,比如我们要创建一副地图,首先得引用map类:

require(["esri/map"], function(Map) { /* code goes here */ });

如果你在本地部署了ArcGIS API就能看到在esri文件夹下有个map.js文件,我们需要的Map类也就是在这个模块中定义的。

我们可以打开map.js的源码,网上随便找个工具格式化下,折叠declaredClass: "esri.Map"之后的代码:

可以发现,Map对象的方法和属性都在其中定义。

自己写一个模块

1、使用define()来加载模块所需的依赖,具体用法可以参考文档。
declare用于创建一个可以实例化的类,所以必须引用

define(["dojo/_base/declare"],function(declare){});

2、用declare(className,superclass,props)建一个类

参数 类型 描述
className String 构造函数的可选名称。它将被用作创建的构造函数的全局名称。
superclass Function or Function[] 可以为空,函数或函数数组。这个参数指定一个继承表(最左边一个是最原始的父类)
props Objectid 定义类属性和方法的对象。通过使其成为一个名为“constructor”的属性来定义一个构造函数。

下面这个示例定义一个Geocoder.js模块,通过创建一个类Geocoder,调用百度地址逆编码API,将Point转为地址信息。

define(["dojo/_base/declare","dojo/request/script","dojo/json","dojo/dom"],function(declare,script,JSON,dom){return declare(null, {ak: null,constructor: function(){this.ak="WtSZiDjE0KEgfSMsxGY7pxng";},getLocation: function(opt){var point=opt.point;var domID=opt.domId;var detailed=("detailed" in opt)?opt.detailed:false;              //默认为false,不显示详细地址信息var result={};script.get("http://api.map.baidu.com/geocoder/v2/?coordtype=wgs84ll&location="+opt.point.getLatitude()+","+opt.point.getLongitude()+"&output=json&pois=1&ak="+this.ak, {jsonp: "callback"}).then(function(data){result["description"]=data.result.sematic_description;result["address"]=data.result.formatted_address;console.log(result)if(detailed){dom.byId(opt.domId).innerHTML=result.address+","+result.description;}else{dom.byId(opt.domId).innerHTML=result.description;}})}})
})
  • constructor:构造函数,给ak属性赋值
  • getLocation:获取地址信息方法,其中opt参数为一个Objectid
opt={point:    //Point对象,逆编码的点domID:    //将地址信息插入的DOM的IDdetailed: //是否详细输出地址信息(true||false)
}

使用自己的模块

在ArcGIS API 文件目录(arcgis_js_api/library/3.20/3.20/)中新建一个文件夹为“gisxxcom”,再将自己写的模块Geocoder.js放入其中。

项目中使用自己的模块:

<!DOCTYPE html>
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no" /><title>Simple Map</title><link rel="stylesheet" href="http://115.28.149.107/arcgis_js_api/library/3.20/3.20/esri/css/esri.css"><style>html, body { height: 100%; width: 100%; margin: 0; padding: 0; } #map{ width: 75%; height: 100%; float: left; } #result{ width: 25%; height: 100%; float: left; }</style><script src="http://115.28.149.107/arcgis_js_api/library/3.20/3.20/init.js"></script></head><body><div id="map"></div><div id="result"><h4 id="description"></h4></div></body><script>require(["esri/map", "esri/geometry/Point", "gisxxcom/Geocoder", "dojo/domReady!"],function(Map, Point, Geocoder) {var map = new Map("map", {basemap: "osm",center: [116.026, 28.6826],zoom: "15"});var geocoder = new Geocoder();map.on("click",function(e) {console.log(e.mapPoint.getLongitude() + "," + e.mapPoint.getLatitude());geocoder.getLocation({point: e.mapPoint,domId: "description"});});});
</script>
</html>

效果预览:


GIS技术交流:GISGO(http://www.gisgo.top)
本文首发微信公众号:GISXXCOM

关注微信公众号GISXXCOM,GET更多技能

创建类(点击获得位置信息)—ArcGIS API for JavaScript相关推荐

  1. 在移动设备中创建ArcGIS API for JavaScript地图应用程序

    本教程将演示如何通过响应式移动专用布局窗口小部件创建移动友好的webapp 1.支持的设备 这个模板支持安卓和IOS横向和纵向姿态,它使用Dojo Mobile框架并包含Dojo标题窗口等小部件. 2 ...

  2. ArcGIS API for javascript创建二维度地图

    1.引用arcgis api for javascript <link rel="stylesheet" href="https://js.arcgis.com/4 ...

  3. arcgis api for javascript创建webscene

    arcgis api for javascript创建webscene,核心代码如下: esriConfig.portalUrl = this.config.portal; var scene = n ...

  4. ArcGIS API for JavaScript创建 3D 地图

    1.引用ArcGIS API for JavaScript <link rel="stylesheet" href="https://js.arcgis.com/4 ...

  5. ArcGIS API for JavaScript心得体验

    首发GIS派:ArcGIS API for JavaScript心得体验 学习和使用ArcGIS API for JavaScript开发差不多有两年了吧,跌跌撞撞断断续续也做了几个小项目,学习之路相 ...

  6. ArcGIS API for JavaScript之基础篇(二)

    ArcGIS API for JavaScript之基础篇(二) 上一篇文章介绍了Map MapView SceneView的基本知识以及简单的demo.最近几天学习了WebMap WebScene ...

  7. 地理信息系统(GIS)系列——ArcGIS API for JavaScript 3.9(1)

    Visual Studio 智能提示配置:将以下 JavaScript 文件引入项目中 arcgis_js_v39_sdk\arcgis_js_api\sdk\jshelp\jsapi_vsdoc12 ...

  8. ArcGIS API for JavaScript 3.23汉化(下)

    ArcGIS API for JavaScript 3.23汉化(下) 4更为具体 一.Default API configurations 默认API配置 三.Retrieve data from ...

  9. 基于ArcGIS API for JavaScript加载百度各种类型切片地图

    文章目录 应用场景 需求分析 效果图 实现代码 原理解读 应用场景 部分项目基于ArcGIS平台,但是甲方只提供部分矢量数据,用作底图的地形图数据没有,表示可以使用百度地图作为底图.所以才会有使用Ar ...

最新文章

  1. thinkphp5.0配置php版本,PHP开发-Mac搭建ThinkPHP5.0
  2. 【机器视觉】 stop算子
  3. LevelDB 源码剖析(六)WAL模块:LOG 结构、读写流程、崩溃恢复
  4. Spring MVC 中 HandlerInterceptorAdapter过滤器的使用
  5. cesium根据输入高度设置相机camera视角高度
  6. 计算机网络云南大学实验四,云南大学软件学计算机网络原理实验四.doc
  7. 《王者荣耀》宣布将推独立女子电竞赛事:跟进奥运会
  8. css 选座,纯html+css中实现静态选座位效果技巧(input+label使用小技巧)
  9. 独立软件测试团队在敏捷开发中的几个特别实践
  10. avast! 5 简体中文正式版 官方直接下载链接
  11. 一个完整机器学习项目的基本流程
  12. mysql存储登录_MYSQL存储过程实现用户登录
  13. 多级延迟效果器:D16 Group Tekturon for Mac()
  14. 二叉树的后序遍历(递归和非递归)
  15. linux 设置自动退出时间,linux配置超时不操作自动退出登录TMOUT
  16. Win10系统解决Windows Defender自动删除文件的问题
  17. 辩证唯物主义 历史唯物主义 第一章绪论 一 唯物主义和唯心主义
  18. [转]git图解(3):分支操作
  19. c语言面试题(感觉比较好的题目),天博集团官网 -官方网站
  20. 知道计算机组装,电脑组装不担心被电脑店套路,就要懂得如何查看电脑的硬件配置...

热门文章

  1. 用户登录问题python_Python Flask单点登录问题
  2. 微信公众号数据2019_如何制作微信公众号图文素材 微信公众号采集器好用吗
  3. 品优购案例之横向列表伪元素的应用
  4. L1-026 I Love GPLT
  5. 文字垂直居中(HTML、CSS)
  6. 直接插入排序_【真题讲解】15软专真题:直接插入排序
  7. JavaScript-callapply方法
  8. lua协程的使用列子分析
  9. Chrome 浏览器中,使用 Shift + Esc 打开任务管理器 / 浏览器进程管理 结束进程
  10. java编辑遗忘曲线代码,java8的新特性 - 天使broken的个人空间 - OSCHINA - 中文开源技术交流社区...