JupyterLab安裝地圖插件

JupyterLab安裝地圖插件

(本文所述軟件還在發展之中,歡迎加入開源項目,提供建議、測試和開發。)html

Jupyter中進行數據分析時,每每須要將數據疊加到地圖上。簡單的地圖需求能夠利用matplotlib/echarts/bokeh的地圖顯示功能,更爲複雜的可使用SuperMap/Leaflet/GMaps提供的地圖插件,實現交互的地圖操做,能夠顯示和操做大比例尺的專業級地圖,甚至調用專業GIS服務進行空間分析,固然這操做起來也會更復雜一些。node

一、iClientPy

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

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 173issue 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倒是能夠的。

三、gmaps

是基於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-renderer是jupyter官方的一個渲染架構,用於繪製更多類型的cell輸出。

目前GeoJSON已經能夠支持用於繪圖了,主要是基於leaflet的。

jupyter labextension install @jupyterlab/geojson-extension
jupyter labextension install jupyterlab_velocity

一樣的問題,在JupyterLab裏圖顯示不出來。

五、MapBox

將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了。真是「踏遍世界無覓處,得來也需費功夫」,難者不會、會者不難啊!

相關文章
相關標籤/搜索