虾神自己热烈祝贺一下虾神开新坑……
虾神2018年第一坑,开在了可视化上面,在2016年的时候,虾神完成了一套leaflet for R的系列教程,受到了很多同学的点赞,还有同学问,虾神你能不能写写Python的啊?我们毕竟用Python多啊……所以这次专门开了Python的web可视化教程,只不过可能有一点会让有些同学觉得不爽的是,用的是ArcGIS Python API。
其实以前也写过几篇有关ArcGIS Python API的文章,大家可以访问下面的地址:
如:
ArcGIS Python API获取以及对比landsat数据
作为Esri旗下的一款强大的API工具,ArcGIS Python API也是开源的,只不过里面有不少Esri公司的小花招,让大家都得依赖在ArcGIS产品的支持下而已。
整个系列的设计如下:
嗯,正如上面写的。。。整个课程不包括Python的语法,这个是另外的内容了,
虾神一直表示:Python最强大的地方就即学即用,随便在网络上看个三五十行代码和教程就学会了,当然有同学会问:
虾神的表态就是:小学生都要学Python了,你还有啥理由说这个东西太难?
第一节 主要做个简单的介绍,首先是ArcGIS Python API是个神马东东:
从这页可以看出一些端倪:
首先是这个API主要还是依赖于ArcGIS Web系统的东西(外网依托于ArcGIS Online,内网依赖于Portal for ArcGIS),如果没有ArcGIS产品,而且没有外网的话,就没法使用了。这个不像leaflet for R,不管有没有网络,不管有没有服务器,都能用,这算是一个劣势。
其次它利用的是ArcGIS Rest API提供的web服务能力,所以实际上是一种Python调用rest服务来实现的,而交互的时候,需要利用ArcGIS JavaScript API,所以配置有时候也挺麻烦。
好吧,以上两个问题就是ArcGIS Python API最大的劣势,如果接受不了的话,就没办法了,但是如果能够接受这两个劣势,你会发现,以后的全是优势,使用起来各种心潮澎湃,特别是让虾神这种JavaScript盲拥有了Web的能力,就冲这个,视为神器,名至实归!
啥叫神器:神器就像凹凸曼同学的灯一样,不管对手有多强大,也不管凹凸曼被对手揍成了啥怂样,只要这个灯一亮,所有对手的结局都一样……
说了这么多,这个神器主要拿来干嘛呢?它能干这些事情:
•
获取在线(以及企业内部)地图、数据、资源
• 地理编码(全球英文,中国国内中文)
• 管理Portal 、Server& online中的企业级账户
• 空间可视化与属性可视化
• 标准和扩展的空间分析
• 在web上进行资源发布&共享
• 更新数据
• GP调用和结果可视化
虾神作为一个天天要用地图的人来说,别说有这么多功能,就冲着一个可视化,就有足够的利用说服我将这个Python工具包作为必须打call的东东了。
下面给大家演示几个功能:
首先是获取在线数据,比如虾神想获取1997年-2007年十年中5.7级以上地震数据(当然,你可能还有其他的需求,可以继续关注课程),那么这个数据已经有人发布过了,我们仅需要获取就行:
那么在你的本地实现这个功能呢?Esri官方提供了一个在线云服务使用ArcGIS Python API,使用方式如下:
1、在浏览器输入地址:
https://notebooks.esri.com/
系统会自动给你建立一个服务,如下所示:
当然,Esri的服务器在亚马逊云上面……国内因为GFW,所以连接速度可能有些(你懂的)……
2、点击New——Python 3,新建一个自己的Notebook
输入如下代码,即可完成上面那幅图:
from arcgis.gis import GIS
gis = GIS("https://www.arcgis.com", "arcgis_python", "P@ssword123")
mymap = gis.map()
mymap.basemap = "osm"
items = gis.content.search("Earthquakes*", item_type="feature Layer",outside_org=True, max_items=1)
mymap.add_layer(items[0])
mymap
最后那句是把点数据渲染成热度图。注意,不要放在一起,否则会覆盖,在jupyter里面,最好能够每行脚本都分开编写,这里是为了节省,才写成了一行,以后不再对这写法进行强调。
是不是特别简单?
然后看看另外一个功能,比如地理编码:
代码如下:
from arcgis.gis import GIS
import pandas as pd
from arcgis.geocoding import Geocoder, get_geocoders,geocode
gis = GIS("https://www.arcgis.com", "arcgis_python", "P@ssword123")
mymap = gis.map()
mymap.basemap = "osm"
mymap
results = geocode('北京市海淀区莲花池西路国家测绘地理信息局')
pd.DataFrame(results)
for res in results:
popup = {
"title" : res["attributes"]["Region"],
"content" :"address:"+res["address"]
}
mymap.draw(res,popup=popup)
是不是特别嗨皮?很有点迫切想用的感觉?如何安装这个神器呢?我们下节继续,当然等不及的同学,可以自行查阅官方页面,安装步骤进行安装:
https://developers.arcgis.com/python/guide/install-and-set-up/
待续未完。