为了防控疫情,继续宅在家里~~。

国内某些在国外受过高等教育的人竟然认为公开承认上图红色注释会引起某些麻烦

在Google Earth Engine的python版API更新后,之前使用folium动态加载地图的代码就不能在正常运行,因为整个Google Earth Engine的地图加载服务的URL发生了更新,所以我们也需要更新相关绘制方法。下面我会讲解一种新的绘制方法,大家可以根据自己的需求来扩充相关绘制方法,直接上相关具体代码。
需要说明一下,我所有的代码都是在Jupyter Lab中运行,这些代码无法在pycharm中直接运行。
第一步、注册GEE。

第二步、导入外部库folium。

第三步、编写添加GEE图层的方法,并且将其作为自定义方法加入到folium的Map中。

具体代码:
# 定义加载GEE影像数或者矢量数据方法
def add_ee_layer(self, ee_object, vis_params, name):try:    if isinstance(ee_object, ee.Image):    map_id_dict = ee.Image(ee_object).getMapId(vis_params)folium.raster_layers.TileLayer(tiles = map_id_dict['tile_fetcher'].url_format,attr = 'Google Earth Engine',name = name,overlay = True,control = True).add_to(self)elif isinstance(ee_object, ee.FeatureCollection):  ee_object_new = ee.Image().paint(ee_object, 0, 2)map_id_dict = ee.Image(ee_object_new).getMapId(vis_params)folium.raster_layers.TileLayer(tiles = map_id_dict['tile_fetcher'].url_format,attr = 'Google Earth Engine',name = name,overlay = True,control = True).add_to(self)except:print("Could not display {}".format(name))folium.Map.add_ee_layer = add_ee_layer
代码解析:
加载图层方法为add_ee_layer,这个方法的具体参数参数有三个分别为:
  • ee_object,显示对象可以为image或者featureCollection
  • vis_params,显示规则,其中image和JavaScript版配置一致,featureCollection配置使用palette配置颜色即可
  • name,图层的名称
第四步、调用上面定义的方法绘制影像Image和矢量数据FeatureCollection。

具体代码:
dem = ee.Image('USGS/SRTMGL1_003')
vis = {'min': 0,'max': 4000,'palette': ['006633', 'E5FFCC', '662A00', 'D8D8D8', 'F5F5F5']
}
roi = ee.FeatureCollection("users/wangweihappy0/training03/bj_shp")
center = roi.geometry().centroid().getInfo()['coordinates']
center.reverse()
print("center is: {}".format(center))my_map = folium.Map(location=center, zoom_start=8, height=500)
my_map.add_ee_layer(dem.updateMask(dem.gt(0)), vis, 'DEM')
my_map.add_ee_layer(roi, {"palette": "FF0000"}, "roi")
my_map.add_child(folium.LayerControl())
代码解析:
  • vis配置的是DEM显示规则
  • center是地图要居中显示的位置
  • my_map是通过folium.Map配置显示的地图
  • my_map通过add_ee_layer添加定义的图层dem和roi
运行结果:

第五步、总结第四步调用方法可以将其写为一个具体的方法,然后直接调用这个方法。

具体代码:
# 使用Folium展示地图
def Mapdisplay(center, layers, Tiles="OpensTreetMap",zoom_start=10):  mapViz = folium.Map(location=center,tiles=Tiles, zoom_start=zoom_start)  for data in layers:  mapViz.add_ee_layer(data.get("layer"), data.get("vis"), data.get("name"))mapViz.add_child(folium.LayerControl())  return mapViz
使用这个方法示例如下

具体代码:
dem = ee.Image('USGS/SRTMGL1_003')
vis = {'min': 0,'max': 4000,'palette': ['006633', 'E5FFCC', '662A00', 'D8D8D8', 'F5F5F5']
}
roi = ee.FeatureCollection("users/wangweihappy0/training03/bj_shp")
center = roi.geometry().centroid().getInfo()['coordinates']
center.reverse()
print("center is: {}".format(center))
layers = [{"layer": dem,"vis": vis,"name": "DEM"},{"layer": roi,"vis": {"palette": "FF0000"},"name": "roi"}
]
Mapdisplay(center, layers, zoom_start=8)
代码解析:
这个程序运行结果和前面例子运行结果一样,区别就是在这里使用的我们自定义的方法Mapdisplay()方法,这个方法的参数分别为:
  • center,中心点坐标
  • layers,要加载的所有图层信息列表,配置规则是
[
{
"layer": xxx, //图层的数据可以是image或者featureCollection
"vis": xxx, //显示规则,image配置和在JavaScript中配置一致
//featureCoolection配置用{"palette": 颜色}就可以
"name": xxx, //显示的图层名称
}
]
  • Tiles,这个使用默认就可以,不用修改
  • zoom_start,最初缩放比例,比如这里使用的是8

大家如果有问题需要交流或者有项目需要合作,可以微信联系我,加微信好友请留言加上“GEE”。
知乎专栏:https://zhuanlan.zhihu.com/c_123993183
CSDN:https://blog.csdn.net/shi_weihappy

GEE学习笔记 八十七:python版GEE动态加载地图方法(更新版)相关推荐

  1. GEE学习笔记 六十七:【GEE之Python版教程一】GEE学习背景介绍

    相信很多人都对GEE已经比较熟悉了(只是不熟悉GEE的Python的API而已),这里只是做一个简单的总结概括一下GEE相关内容. 1.GEE学习基本要求 目前市面上无论出现什么新的技术,总会出现一种 ...

  2. GEE学习笔记 八十三:【GEE之Python版教程十三】几何图形

    遥感分析中用到的数据主要就是这两大类:矢量数据和栅格数据.在Google Earth Eninge中,它为我们讲这两类数据封装成为了以下几类数据. 下面几节内容我会依次讲解相关内容的详细信息,这一节先 ...

  3. 【Python_PySide2学习笔记(一)】PySide2动态加载UI方式,重写关闭窗体事件

    ** PySide2设置关闭提示窗口:动态加载UI方式,重写关闭窗体事件 ** ** 前言 ** 转载:https://blog.csdn.net/qq_44703282/article/detail ...

  4. python爬虫脚本-动态加载实现方法

    import requests import json import time from fake_useragent import UserAgent import pandas from lxml ...

  5. 用Python爬取动态加载的诸如百度的图片

    用Python爬取动态加载的诸如百度的图片 使用原因 代码如下 模块介绍 selenium模块 lxml解析模块 requests模块 去除重复 开启多线程 效果如下 留言 使用原因 学习Python ...

  6. Android插件化学习之路(一)之动态加载综述

    前段时间,公司项目完成了插件化的开发,自己也因此学习了很多Android插件化的知识,于是想把这些内容记录下来,本次带来Android插件化的第一篇:动态加载综述 Android插件化学习之路(一)之 ...

  7. python编程(动态加载)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 脚本语言都有一个优点,就是动态加载.lua语言有这个优点,python也有这个特性.说简单点就是 ...

  8. 教你用Python爬取动态加载的数据

    例子1:爬取豆瓣电影中的电影详情数据 url:https://movie.douban.com/ 1.什么是动态加载的数据: 我们通过requests模块进行数据爬取无法每次都是可见即可得,有些数据是 ...

  9. python 反射和动态加载_Python的反射

    什么是反射 反射是一个很重要的概念,它可以把字符串映射到实例的变量或者实例的方法然后可以去执行调用.修改等操作.它有四个重要的方法: getattr 获取指定字符串名称的对象属性 setattr 为对 ...

最新文章

  1. 【廖雪峰Python学习笔记】面向对象编程OOP
  2. 任正非深度剖析技术差距:我们为何憎恨化学?
  3. Spring使用支付宝扫码支付
  4. 【正一专栏】内马尔要走快走、走好不送!
  5. 关于如何在Nomad中保护工作部署的工作流的简要历史
  6. HDU 5008 Boring String Problem ( 后缀数组求本质不同第k大子串)
  7. java注释的理解,java注解原理——记录一下自己的理解
  8. AI议题首次进入世界移动大会,打响第一枪的是LG
  9. java litjson_仿造 Gson 的自制 json 解析器
  10. ESP8266+WIFI继电器初识
  11. 包含所有的计算机视频教程
  12. Netty傻瓜教程(四):bossGroup, workGroup?
  13. (附源码)spring boot通用办事流程管理软件 毕业设计211819
  14. 这156套PS笔刷合集!两天时间给大家盘来了!
  15. 【Arduino】PTC热敏电阻的介绍和应用
  16. 一叶知秋,很多IT“专家”其实都只是“砖家”
  17. 用于情绪测试的软件,第七章 情感心理自我测试心理测评软件
  18. 金蝶云星空与飞书系统对接方案(飞书审批)
  19. 如何修改Android应用程序的图标和名字
  20. 2019 CCPC 女生专场重现赛 Circle

热门文章

  1. 【05】2.1 程序语言特征
  2. 小U管家如何加入联盟?
  3. oracle 退出代码 255,sql – 奇怪的SSIS错误(进程退出代码255)
  4. CSS综合案例-品优购电商04
  5. 天基实业投资理财要合理配置资产
  6. Spring三级缓存解决循环依赖
  7. 深度学习的应用——检測糖尿病型视网膜症
  8. 基因突变的实例:加拿大无毛猫
  9. 亚马逊AWS免费EC2服务器搭建总结
  10. 维智科技荣获CSDN 2021年度核心技术企业