蝦神自己熱烈祝賀一下蝦神開新坑……
蝦神2018年第一坑,開在了可視化上面,在2016年的時候,蝦神完成了一套leaflet for R的系列教程,受到了很多同學的點讚,還有同學問,蝦神你能不能寫寫Python的啊?我們畢竟用Python多啊……所以這次專門開了Python的web可視化教程,只不過可能有一點會讓有些同學覺得不爽的是,用的是ArcGIS Python API。
其實以前也寫過幾篇有關ArcGIS Python API的文章,大家可以訪問下面的地址:
如:
ArcGIS Python API 與R語言混合編程實現分析可視化(一)
作為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/
待續未完。