(本文所述軟件還在發展之中,歡迎加入開源項目,提供建議、測試和開發。)html
在Jupyter中進行數據分析時,每每須要將數據疊加到地圖上。簡單的地圖需求能夠利用matplotlib/echarts/bokeh的地圖顯示功能,更爲複雜的可使用SuperMap/Leaflet/GMaps提供的地圖插件,實現交互的地圖操做,能夠顯示和操做大比例尺的專業級地圖,甚至調用專業GIS服務進行空間分析,固然這操做起來也會更復雜一些。node
iClientPy是由超圖軟件公司(http://www.supermap.com)開發的一個開源項目,能夠將SuperMap iServer和Online服務經過python API訪問,並支持Jupyter的編程和集成化分析。目前該項目還在開發之中,還沒有造成發佈版本(預計2018年末發佈)。項目地址以下:python
因爲conda安裝國內訪問較慢,能夠加入鏡像站,配置第三方庫的依賴源。這裏使用清華大學的源(也但是國內其餘鏡像源):webpack
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ conda config --set show_channel_urls yes
執行下面命令:git
conda install -y -c http://iclientpy.supermap.io/conda/channel iclientpy
目前安裝後地圖顯示不出來,還須要改進。github
ipyleaflet是基於leaflet的地圖顯示模塊,提供了jupyterlab支持。web
安裝到jupyterlab,執行:npm
conda install -c conda-forge nodejs=8.10.0 conda install -c conda-forge ipyleaflet jupyter labextension install jupyter-leaflet
一些用戶發現須要 jupyterlab-manager,才能顯示地圖。
查看 issue 173 和 issue 168 瞭解更多細節。編程
使用命令 jupyter labextension list 查看 jupyter-widgets 是否安裝。若是沒有,安裝方法以下:json
jupyter labextension install @jupyter-widgets/jupyterlab-manager
目前我在Kubernetes裏安裝jupyterlab,使用的all-in-one-spark的jupyter鏡像,可是安裝後地圖顯示不出來,還須要改進。
倒騰了一番後,運行nodejs降級到10如下,運行 jupyter lab build,而後就能夠顯示了。不過發現,Ubuntu上的 FireFox仍是顯示不出來,經過MacOS上的FireFox倒是能夠的。
是基於Google Maps的地圖顯示插件,須要google maps API的訪問token。
爲了在JupyterLab中使用jupyter-gmaps須要安裝 jupyter widgets 擴展。
$ jupyter labextension install @jupyter-widgets/jupyterlab-manager
而後經過pip安裝jupyter-gmaps:
$ pip install gmaps
下次啓動 JupyterLab時,會提示須要 「rebuild JupyterLab: this is necessary to include the jupyter-gmaps frontend code into your JupyterLab installation」。
在命令行運行:
$ jupyter lab build
由於國內訪問網絡緣由和須要token,暫時尚未測試過。
jupyter-renderer是jupyter官方的一個渲染架構,用於繪製更多類型的cell輸出。
目前GeoJSON已經能夠支持用於繪圖了,主要是基於leaflet的。
jupyter labextension install @jupyterlab/geojson-extension
jupyter labextension install jupyterlab_velocity
一樣的問題,在JupyterLab裏圖顯示不出來。
將MapBox嵌入到Notebook中進行地圖顯示。參見:
啓用nbextension擴展:
!jupyter nbextension enable --py widgetsnbextension --sys-prefix !jupyter nbextension enable --py --sys-prefix ipyleaflet
查看nbextension擴展列表:
!jupyter nbextension list
查看labextension擴展列表:
!jupyter labextension list
最後須要運行 jupyter lab build,才能真正啓用擴展。
不過,我在這一步運行時,一直處於運行狀態,而後顯示地圖時也顯示不出來,好像提示webpack的「_.extend is not a function」,後面再慢慢研究。
嘗試修復bug:
npm i -y leaflet@~1.0.3 npm i -y jupyter-leaflet
將「parallel: true,」改成「parallel: false,」,以下:
ovyan@jupyter-supermap:/opt/conda/share/jupyter/lab/staging$ cat webpack.prod.config.js var UglifyJSPlugin = require('uglifyjs-webpack-plugin'); var merge = require('webpack-merge'); var webpack = require('webpack'); var common = require('./webpack.config'); module.exports = merge(common, { devtool: 'source-map', plugins: [ new UglifyJSPlugin({ sourceMap: true, parallel: true, uglifyOptions: { beautify: false, ecma: 6, mangle: true, compress: false, comments: false, } }), new webpack.DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify('production') }) ] }); jovyan@jupyter-supermap:/opt/conda/share/jupyter/lab/staging$ nano webpack.prod.config.js
對於上面的問題,在互聯網上搜索一番無果,而後到 https://github.com/jupyter-widgets/ipyleaflet 上提了個issue,晚上獲得了 jasongrout 的回答,說 「Use node version < 10. JupyterLab does not work with node 10 currently.」,而後執行 conda install nodejs=8.10.0 從 10.4.0 降級下來,再安裝就ok了。真是「踏遍世界無覓處,得來也需費功夫」,難者不會、會者不難啊!