WebGIS 之 ArcGIS API for JavaScript 总结(一)

几天时间过完了一本《WebGIS 从基础到开发实践》

(电子版下载地址: http://www.25mg.cn/wp/training/webgis/webgis从基础到开发实践/

如今阅读技术书籍也同读小说一样,风里来雨里去,恢宏巨著,从洪荒原始到当今现代。由于是媳妇在图书馆给借的书,在这里将这本书做一个总结和笔记。

一、为什么要读这本书。

美国的esri公司,全称美国环境系统研究所公司(Environmental Systems Research Institute, Inc.)是全世界最大的最专业最领先的地理信息软件及解决方案提供商,相当于oracle在数据库行业的地位,也相当于windows在操作系统领域的地位,也相当于IBM在服务器行业的地位,还相当于EMC在存储设备领域的地位。没错,esri是一家技术垄断的商业公司,因此它能够提供众多的,全面的,可靠的,专业的地理信息解决方案。

但是,既然涉足信息技术领域,那么就必然有开源社区与之匹配(作对),由于本人目前只专注webgis领域,故仅提web的B/S两端。WebGIS的服务器端主要负责将目前所有的地图存储格式及地理信息,进行适当的格式化,并按照一定的规则提供成为Web上面能够访问的资源。esri的产品叫做ArcGIs server,相应的开源软件叫做geoServer。WebGIS的客户端都是基于javascript语言的,主要功能为获取WebGIS服务器资源,适当组织后展示给用户,并提供一些交互功能。esri在前端的产品就是这个ArcGIS API forJavaScript框架,这个东西应该是随着其他产品附送的,没有看到有收费要求,在官网上面注册就可以下载(2018年中美贸易大战,禁止中国区下载,可以到此处下载),也可以使用CDN的在线版本。相应的前端开源软件为大名鼎鼎的openlayers。

二、这本书的内容范围

这本书针对前端应用,介绍了gis的一下基础知识,对于ArcGIS server仅简单介绍发布服务的方法,另介绍了dojo的使用,介绍了ArcGIS API for JavaScript框架的使用。书中内容繁杂,略去所有无用的东西,只留干货。

三、地图资源

自己发布

可以使用ArcMap或者ArcCatalog软件来发布自己的ArcGIS服务,ArcGIS server发布的服务默认都是REST风格的,当然也支持其他风格供需要的客户端使用。ArcGIS server发布的服务的url类似于:http://<hostname>:<port>/arcgis/rest/services。

在线资源

ArcGIS Online提供了一些esri公司提供的公共的在线的ArcGIS server服务,主要有下面三个位置:

http://server.arcgisonline.com/ArcGIS/rest/services

http://sampleserver1.arcgisonline.com/arcgis/rest/services 

http://sampleserver2.arcgisonline.com/arcgis/rest/services

访问进去之后即可看到所有服务的详细内容,默认是REST风格。可以看到:图层名称、文档信息、支持的程序接口等。

另外还有众多的其他的在线资源,例如国内的百度地图(需要做特殊的坐标转换),天地图,高德地图,国外的bing地图,谷歌地图等等。

这么多的地图资源,无论是来自于建设规划、商业设计还是在线应用等领域的需求,基本上都能满足。

四、ArcGIS API for JavaScript

dojo

这个框架基于dojo框架,开发。本人也是第一次学习dojo框架,之前看到相关的语法(reqire/define)都会避之不及,通过学习,认为dojo还是一个不错的框架。dojo基本上可以实现jquery及其一些组建(例如easyui)的大部分类似功能,其几乎包含了js操作的所有需求。其与其他框架最打的区别是按需加载,仅加载有用的组建。可以很大的减少网络开销,提高页面相应效率。所以说,对于ol办公系统,jquery系列还算可以,但是如果是用户群里较大,访问较为频繁的web站点,那么应该是使用dojo。至于为什么要使用框架,一方面是加快开发速度,统一页面风格,提高代码质量,另外一方面很大的原因是要解决跨浏览器的问题,这个做个前端的人都可以理解。在这里还要推荐一个解决跨浏览器问题的小的工具,叫做Ployfill,具体自己百度。

哈哈,书上两章的内容,我一段话带过。具体学习的话可以直接上dojo toolkit的官网,翔实的学习资料,众多的demo,跟着做几个就明白它的套路了。

地图对象(Layer-Map-View)

本文不分析框架结构,有兴趣的可以直接上API网站自行组织,本人发现这个框架(名字太长,后面通称‘这个框架’)的结构有一定的变化,毕竟是商业公司的代码,改起来好不心疼,只要是领导觉得对,就改。

1.携带地图资源的对象是Layer(直接决定了能够显示的在线地图种类)

最主要的是TileLayer,可以加载所有符合WMS标准的SOAP格式的地图Web服务,不需要问这些名词是什么,只管用就行。ArcGIS server发布的地图服务一般都支持这个格式。其他的服务器发布的也基本上都支持。

对于一些比较浪的地图服务,你用TileLayer对象无能为力,可以使用WebTiledLayer类来加载,可以自定义加载参数(x,y,z)。

对于比较名牌的地图服务,比如osm,可以直接在Map对象中,定义basemap属性为‘osm’来实现。同时Map对象的basemap属性还支持如下众多,做地图的话,个人认为足够了,如果想使用速度更快的国内底图,那么就尝试前面两段中的两个对象吧。

{name:'streets'},
{name:'satellite'},
{name:'hybrid'},
{name:'topo'},
{name:'gray'},
{name:'dark-gray'},
{name:'oceans'},
{name:'national-geographic'},
{name:'terrain'},
{name:'osm'},
{name:'dark-gray-vector'},
{name:'gray-vector'},
{name:'streets-vector'},
{name:'topo-vector'},
{name:'streets-night-vector'},
{name:'streets-relief-vector'},
{name:'streets-navigation-vector'}

WMSLayer/WMTSLayer类是用来加载WMTS规范的地图的,之间我没有看出功能上的区别,只是格式不同而已,个人认为属于比较早期各种技术不太先进的时候,大家做的一套解决方案,现在不知道用的还多不多,理解有限,诚恳希望得到您的矫正。

GraphicLayer是纯客户端的一个layer对象,用来承载数据表,图形,与Draw工具搭配使用来显示和符号化Draw绘制出来的图形。GraphicLayer还可以相应一些事件。

MapImageLayer允许你把一张image展示到地图上,图像可以来自服务器,甚至可以来自前端客户机,但是和图像一同提供的还要有TFW文件(用来描述图像的空间位置信息)。

KMLLayer 基于谷歌标准的地图服务都可以用这个来加载

这个框架不支持热度图,因此需要采用第三方工具,例如Patrick Wied,集成一个DynamicMapServiceLayer类,实现热度图。

2.组织图层资源的对象是Map

Map可以将众多的图层组织在自己内部(一个数组属性)

3.呈现地图的对象是View

这个框架提供了两个实现MapView和SceneView,前者是2d的地图,后者是3d的地图,效果很不错。

空间参考系统

计算机专业的人对于所谓的参考系统都不是很理解。对于一个基于坐标的应用,那么每个坐标都要有其基准,或者说通过什么来确定这个坐标值的相对位置。空间参考系统分为:地理坐标系统和投影坐标系统。地理坐标系统是真实的地球定位坐标系统,一般采用经纬度坐标系统,也有极坐标系统。投影坐标系统,是为了解决平面显示球形对象时候,的一个投影坐标系统,将一个球上面的所有点通过一定的投影方式对应到平面上来。由于html5技术的实现,web已经可以进行三维展示,就像上面图片中的地球一样,所以这里投影的目标不一定都是2维的平面,也有可能是三维的球面。

SpatialReference类用来设置空间参考系统。

EPSG,在地理信息行业这个简写经常见到,那么有多少人知道它的来历呢。European Petroleum Survery Group欧洲石油调查组织是也。他们对于空间参考系统进行了总结,并且都编上了id,例如id为4326的空间参考系统极为WGS84地理坐标系统,id为102113、102100、3857等都是web墨卡托投影,只是其中的参数稍有区别。这个id的全称为wkid(Well-Known id)。

对于使用地理坐标系统和投影坐标系统的地图,都要求切片图层的空间参考与地图的空间参考一致。因此涉及到需要将某一种地理坐标系统转换为某一种投影坐标系统,或者反过来转换。这个框架的esri/geometry/webMercatorUtils模块中提供了函数可以进行简单转换,对于复杂的转换需要调用后台的esri/tasks/GeometryService几何对象服务完成。

一般从网络上通过SOAP或者REST风格接口获得的符合WMS、WMTS规范的地图切片资源都会自带有空间参照系统,可以从Layer对象中获取出来。如果要指定Map的空间参照系统,则可以在定义Map对象的时候,指定属性extent,extent属性中需要包含spatialReference属性指明即可。

几何对象

这个是用来实现地图对象的交互性的,可以自己在地图上面绘制一些图形。esri/geometry/Geometry系列对象为几何图形类,可以使用esri/toolbars/Draw类来自定义小工具(widget)实现绘制功能。openlayers中实现绘制自定义图形处理的我觉得比这个框架要好,openlayers中是把自定义图形做成了一个vectorLayer,和从服务器加载过来的矢量图层一样的对象,这样在控制起来,以及转换成为其它格式输出或者提交都更加方便。
暂时结束到这里,还有要素图层,专题图层和空间分析三大块,这些也是esri家族的拿手好戏,等到下次再总结吧。对于实际代码,由于版本更新较快,可以到官网上面查找最新的demo和api。欢迎留言。

 

 

 

 

第1章Web GIS基础 1.1GIS及相关技术的发展 1.1.1Web开发技术的发展 1.1.2GIS的发展 1.1.3Web服务的发展 1.1.4Web GIS的发展 1.2OGC的Web服务规范 1.2.1OWS服务体系 1.2.2空间信息Web服务的角色与功能 1.2.3空间信息Web服务的系统框架 1.2.4OWS中的常用服务 1.2.5服务的请求与响应 1.3REST及REST风格的Web服务 1.3.1REST中的基础知识 1.3.2REST风格的Web服务 1.3.3REST风格的Web服务实例 1.4Web GIS的组成 1.5ArcGIS Server REST风格的Web服务 1.5.1ArcGIS S erver站点的架构 1.5.2ArcGIS Server发布的服务类型 1.5.3服务发布 1.5.4Web服务的URL及元数据 1.5.5查看地图 1.5.6使用ArcGIS Server REST风格Web服务的过程 1.5.7支持的输出格式 第2章ArcGIS API for JavaScript基础 2.1ArcGIS API for JavaScript版的Hello World 2.2ArcGIS API for JavaScript与Dojo 2.2.1ArcGIS API for JavaScript的构成 2.2.2ArcGIS API for JavaScript与Dojo的关系 2.3开发与调试工具 2.3.1集成开发环境 2.3.2调试工具 2.3.3Firebug 2.3.4其他工具软件 2.4Dojo基础知识 2.4.1JavaScript对象 2.4.2函数也是对象 2.4.3模拟类与继承 2.4.4使用模块与包管理源代码 第3章页面布局设计 3.1使用布局小部件设计页面框架 3.1.1小部件与布局小部件简介 3.1.2使用面板组织页面元素 3.1.3使用容器小部件设计页面布局 3.2可移动的小部件微架构 3.2.1自定义小部件的基础知识 3.2.2内容小部件的基类实现 3.2.3可移动的框架小部件 3.2.4测试 3.3集中控制的小部件微架构 3.3.1可集中控制的框架小部件 3.3.2小部件容器 3.3.3测试 3.3.4订阅/发布模式的事件处理机制 3.4使用菜单组织功能 3.4.1菜单容器小部件 3.4.2菜单项小部件 3.4.3菜单小部件 3.4.4测试 第4章地图与图层 4.1图层操作 4.1.1图层类及其之间的继承关系 4.1.2切片地图图层 4.1.3动态地图图层 4.1.4图形图层 4.1.5带地理参考的影像图层 4.1.6 KML图层 4.2自定义图层 4.2.1自定义动态图层——热度图图层 4.2.2自定义切片地图图层——百度地图 4.2.3自定义图层——三维建筑图 4.3地图操作 4.3.1地图窗口操作 4.3.2地图属性获取 4.3.3事件处理 4.4地图参数的基本配置 4.4.1漫游与缩放动画的参数配置 4.4.2比例滚动条的参数配置 4.4.3跨域访问参数配置 4.5图层控制器 4.5.1图层控制器小部件模板 4.5.2图层控制器小部件类 4.5.3图层控制器小部件的使用 第5章空间参考系统与几何对象 5.1空间参考系统 5.1.1空间参考系统类 5.1.2参考系统转换 5.2几何对象 5.2.1几何对象类及其之间的继承关系 5.2.2几何对象的绘制 5.2.3几何对象相关的功能模块 第6章符号与图形 6.1符号 6.1.1标记符号 6.1.2线符号 6.1.3填充符号 6.1.4文本符号 6.2图形 6.2.1图形对象的构成
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值