先说一个事情,之前在朋友圈中也提到过,这一周由于没什么事情所以更新比较频繁。后期更新速度会慢下来,更新速度可能是一周左右更新一篇吧。具体原因呢,看下图吧!
免费写这些教程不是我的本职工作,所以我也不能占用我自己太多的时间来做这些事情,工作挣钱养家才是我的本职工作,希望大家谅解一下!
我们使用GEE在线编辑可以直接通过在线的网页可以加载展示我们计算的结果,而python版的GEE要展示我们的计算结果可能就比较麻烦。如果有同学看过GEE的python版API中可以找到一个类ee.mapclient,这个类的介绍是它是GEE官方通过Tk写的一个加载展示地图的类。但是随着API的发展,其实这个类早已被官方废弃,我们没办法直接使用这个类,在实际开发中也不建议大家尝试去使用这个类。
下面我介绍一下我推荐使用的加载显示方式,目前比较好用的展示方式有两种,一种是静态图片展示方式,另外一种是动态加载展示结果,下面我会依次来介绍相关内容。
首先使用GEE的python版API在我们的代码最开始都需要加入以下代码:
import ee
ee.Initialize()
第一种方式:静态图片展示模式。
这种模式使用的是IPython自带的display来渲染,然后我们的显示内容也是通过缩略图来显示。
优点:IPython原生,快捷方便。
缺点:渲染内容只能是通过缩略图这种方式来做,展示内容有局限。
第二种方式:动态加载展示模式。
这种方式需要使用一个第三方库 ipygee(https://github.com/fitoprincipe/ipygee),这个库是在另外的一个展示库的基础 ipyleaflet 基础上开发而来的。目前属于刚起步,但是展示效果非常好。
首先是安装这个库 ipygee
(1)安装这个库,以我的电脑为例
sudo pip3 install ipygee
(2)激活ipyleaflet在jupyter上的插件
jupyter nbextension enable --py --sys-prefix ipyleaflet
如果没有安装过nbextension,那么需要先安装
sudo pip3 install jupyter_contrib_nbextensions
sudo jupyter contrib nbextension install --user
sudo pip3 install jupyter_nbextensions_configurator
如果要使用jupyterLab还需要给jupyterLab安装ipyleaflet插件
sudo jupyter labextension install jupyter-leaflet
同时有些电脑,比如我这台需要激活一个插件jupyterlab-manager才能显示地图。
首先查看本地的jupyterLab的版本
jupyter lab --version
输出结果是 0.35.6,通过jupyterlab-manager 网站查询可知,我们需要安装对应版本的内容,也就是0.38版的jupyterlab-manager,所以执行下面的命令:
sudo jupyter labextension install @jupyter-widgets/[email protected]
(3)ipygee初步使用
使用这个库非常简单,需要注意的是:使用这个库之前必须要验证GEE,也就是需要执行
import ee
ee.Initialize()
加载地图
# 展示地图
from ipygee import Map
myMap = Map()
myMap.show()
显示资源管理器
# 资源管理器,也就是GEE在线编辑的Assets Manager界面
from ipygee import AssetManager
myManager = AssetManager()
myManager
显示任务管理器
# 任务管理器,也就是GEE的Task列表
from ipygee import TaskManager
myTask = TaskManager()
myTask
从这里可以看到ipygee是通过GEE的API连接到GEE服务器上,然后展示相关内容。下面我详细说一下ipygee是如何加载显示我们想要的影像或者矢量数据的。
(4)加载矢量、栅格数据
具体代码:
# 加载显示栅格数据和矢量数据
from ipygee import Map
myMap = Map()
# 展示OSM底图
myMap.show()
# 栅格数据
img = ee.Image("CGIAR/SRTM90_V4")
# 矢量数据
roi = ee.FeatureCollection("users/wangweihappy0/shape/huanghe")
# 缩放到指定级别
myMap.centerObject(roi, 5)
# 裁剪数据
img = img.clip(roi)
# 加载栅格数据到地图上
myMap.addLayer(img, {"min": 0, "max": 3000}, name="SRTM")
# 加载矢量数据到地图上
myMap.addLayer(roi, {"outline_color": "red", "outline": 2, "fill_color": "blue"}, name="roi")
显示结果:
矢量数据
栅格数据
同时我们还可以对这些图层做各种类似线上的操作,这个大家可以自己挖掘实践。关于ipygee如果大家还有需要了解的,等ipygee版本比较稳定了,我可以单独些一些关于ipygee相关内容来介绍这个库。
大家如果有问题需要交流或者有项目需要合作,可以微信联系我,加微信好友请留言加上“GEE”。
知乎专栏:https://zhuanlan.zhihu.com/c_123993183
CSDN:https://blog.csdn.net/shi_weihappy