当前位置: 首页 > news >正文

GEE学习笔记 八十七:python版GEE动态加载地图方法

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

     需要说明一下,我所有的代码都是在Jupyter Lab中运行,这些代码无法在pycharm中直接运行。

第一步、注册GEE。

第二步、导入外部库folium。

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

具体代码:

  1. # 定义加载GEE影像数或者矢量数据方法

  2. def add_ee_layer(self, ee_object, vis_params, name):

  3.     try:    

  4.         if isinstance(ee_object, ee.Image):    

  5.             map_id_dict = ee.Image(ee_object).getMapId(vis_params)

  6.             folium.raster_layers.TileLayer(

  7.                 tiles = map_id_dict['tile_fetcher'].url_format,

  8.                 attr = 'Google Earth Engine',

  9.                 name = name,

  10.                 overlay = True,

  11.                 control = True

  12.             ).add_to(self)

  13.         elif isinstance(ee_object, ee.FeatureCollection):  

  14.             ee_object_new = ee.Image().paint(ee_object, 0, 2)

  15.             map_id_dict = ee.Image(ee_object_new).getMapId(vis_params)

  16.             folium.raster_layers.TileLayer(

  17.                 tiles = map_id_dict['tile_fetcher'].url_format,

  18.                 attr = 'Google Earth Engine',

  19.                 name = name,

  20.                 overlay = True,

  21.                 control = True

  22.             ).add_to(self)

  23.     except:

  24.         print("Could not display {}".format(name))

  25.     

  26. folium.Map.add_ee_layer = add_ee_layer

代码解析:

加载图层方法为add_ee_layer,这个方法的具体参数参数有三个分别为:

  • ee_object,显示对象可以为image或者featureCollection

  • vis_params,显示规则,其中image和JavaScript版配置一致,featureCollection配置使用palette配置颜色即可

  • name,图层的名称

第四步、调用上面定义的方法绘制影像Image和矢量数据FeatureCollection。

具体代码:

  1. dem = ee.Image('USGS/SRTMGL1_003')

  2. vis = {

  3.   'min': 0,

  4.   'max': 4000,

  5.   'palette': ['006633', 'E5FFCC', '662A00', 'D8D8D8', 'F5F5F5']

  6. }

  7. roi = ee.FeatureCollection("users/wangweihappy0/training03/bj_shp")

  8. center = roi.geometry().centroid().getInfo()['coordinates']

  9. center.reverse()

  10. print("center is: {}".format(center))

  11. my_map = folium.Map(location=center, zoom_start=8, height=500)

  12. my_map.add_ee_layer(dem.updateMask(dem.gt(0)), vis, 'DEM')

  13. my_map.add_ee_layer(roi, {"palette": "FF0000"}, "roi")

  14. my_map.add_child(folium.LayerControl())

代码解析:

  • vis配置的是DEM显示规则

  • center是地图要居中显示的位置

  • my_map是通过folium.Map配置显示的地图

  • my_map通过add_ee_layer添加定义的图层dem和roi

运行结果:

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

具体代码:

  1. # 使用Folium展示地图  

  2. def Mapdisplay(center, layers, Tiles="OpensTreetMap",zoom_start=10):  

  3.     mapViz = folium.Map(location=center,tiles=Tiles, zoom_start=zoom_start)  

  4.     for data in layers:  

  5.         mapViz.add_ee_layer(data.get("layer"), data.get("vis"), data.get("name"))

  6.     mapViz.add_child(folium.LayerControl())  

  7.     return mapViz

使用这个方法示例如下

具体代码:

  1. dem = ee.Image('USGS/SRTMGL1_003')

  2. vis = {

  3.   'min': 0,

  4.   'max': 4000,

  5.   'palette': ['006633', 'E5FFCC', '662A00', 'D8D8D8', 'F5F5F5']

  6. }

  7. roi = ee.FeatureCollection("users/wangweihappy0/training03/bj_shp")

  8. center = roi.geometry().centroid().getInfo()['coordinates']

  9. center.reverse()

  10. print("center is: {}".format(center))

  11. layers = [

  12.     {

  13.         "layer": dem,

  14.         "vis": vis,

  15.         "name": "DEM"

  16.     },

  17.     {

  18.         "layer": roi,

  19.         "vis": {"palette": "FF0000"},

  20.         "name": "roi"

  21.     }

  22. ]

  23. 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学习笔记 八十七:python版GEE动态加载地图方法

在Google Earth Engine的python版API更新后,之前使用folium动态加载地图的代码就不能在正常运行,因为整个Google Earth Engine的地图加载服务的URL发生了更新,所以我们也需要更新相关绘制方法。下面我会讲解一种新的绘制方法,大家…...

第三章 SQL错误信息

文章目录第三章 SQL错误信息SQLCODE 0和100SQLCODE -400检索SQL消息文本第三章 SQL错误信息 下表列出了SQL数字错误代码及其错误消息。这些代码作为SQLCODE变量值返回。 注意:虽然本文档将错误代码列为负值,但JDBC和ODBC客户端始终收到正值。例如&…...

axios中的resolvePromise为什么影响promise状态

axios的取消请求意思很简单,就是在发送请求后不久停止发送请求 本文探讨的是v0.22.0之前的CancelToken API,因为在阅读源码交流的时候发现很多朋友不理解为什么CancelToken中的resolvePromise会影响到实例对象身上的promise状态 即下图所示代码&#xf…...

AWS攻略——创建VPC

文章目录创建一个可以外网访问的VPCCIDR主路由表DestinationTarget主网络ACL入站规则出站规则子网创建EC2测试连接创建互联网网关(IGW)编辑路由表知识点参考资料在 《AWS攻略——VPC初识》一文中,我们在AWS默认的VPC下部署了一台可以SSH访问的…...

一文搞懂ECU休眠唤醒之利器-TJA1145

前言 首先,小T请教大家几个小小问题,你清楚: 什么是TJA1145吗?你知道休眠唤醒控制基本逻辑是怎么样的吗?TJA1145又是如何控制ECU进行休眠唤醒的呢?使用TJA1145时有哪些注意事项呢? 今天&…...

【Java基础】022 -- Lambda与递归练习

目录 一、Lambda表达式 1、Lambda初体验 2、函数式编程 3、Lambda表达式的标准格式 4、小结 5、Lambda表达式的省略写法 ①、示例代码 ②、小结 6、Lambda表达式的练习 ①、Lambda表达式简化Comparator接口的匿名形式 二、综合练习 1、按照要求进行排序&#xff08…...

技研智联云原生容器化平台实践

作者简介:郑建林,现任深圳市技研智联科技有限公司架构师,技术负责人。多年物联网及金融行业经验,对云计算、区块链、大数据等领域有较深入研究及应用。现主要从事 PaaS 平台建设,为公司各业务产品线提供平台底座如技术…...

订单服务:订单流程

订单流程 订单流程是指从订单产生到完成整个流转的过程,从而行程了一套标准流程规则。而不同的产品类型或业务类型在系统中的流程会千差万别,比如上面提到的线上实物订单和虚拟订单的流程,线上实物订单与 O2O 订单等,所以需要根据…...

Python的有用知识,一共十三个代码片段,确定不来看看吗

前言 之前发过22个小技巧,今天就来分享分享13个非常有用的代码片段 赶紧码住,看看你都了解吗 1.将两个列表合并成一个字典 假设我们在 Python 中有两个列表,我们希望将它们合并为字典形式,其中一个列表的项作为字典的键&#…...

数据结构与算法-数组

前言:几乎所有的编程语言都原生支持数组类型。因为数组是最简单的内存数据结构。创建一个数组:let arr new Array()或let arr new Array(5) // 指定长度或let arr new Array(1,2,3,4,5) // 将数组元素作为参数传给构造函数或let arr [1,2,3,4,5] // …...

PMP证书在哪个行业比较有用?

PMP 各个行业都能用,PMP 的知识体系是通用的,管理层的考试也有借鉴PMP知识的地方。历年考生考的最多的是IT 行业,其他行业也都有分布。PMP认证从国外引进大陆这么多年了,其火热程度依然不减,我个人认为是取决于市场的运…...

Wine零知识学习4 —— Wine编译进阶详解

本系列第3篇文章Wine零知识学习3 —— Winetricks介绍及下载和运行讲述了Wentricks的下载及使用。在Winetricks的使用过程中会发现很多应用下载会出现问题,会提示32位程序无法运行在64位系统上。为什么会出现这个问题?又如何解决此问题?这就是…...

win10-右键打开windows terminal

文章目录windows terminal设置右键打开打开注册表添加一个右键选项新建一个项添加右键的名称和图标右键选项执行的命令测试windows terminal windows 新一代命命令行 设置右键打开 打开注册表 WinR 输入: regedit 定位: 计算机\HKEY_CLASSES_ROOT\Di…...

关于使用CMT2300A FIFO缓存区间设置为64Byte的问题

首先请看,CMT2300A 是什么产品,或者说是 模组吗? 请看介绍: https://blog.csdn.net/sishuihuahua/article/details/105095994 以及RFPDK 的使用: 这博客,记录了 RFPDK 的使用,以及遇到的一些问题 我说一下&#…...

网页概念、常用浏览器及内核、Web标准

网页、常用浏览器及内核、Web标准一、网页1.1、什么是网页?1.2、什么是HTML?(重点)1.3、网页的形成?二、常用浏览器三、浏览器内核四、Web标准(重点)4.1 为什么需要Web标准?4.2 Web标准的构成一…...

【刷题笔记】--搜索二维矩阵 II

题目: 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 示例 1: 输入:matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16…...

uni-app实战教程

一、准备 下载HBuilderX编辑器,前往下载注册百度AI账号,创建应用获得Appid和Secret 前往注册百度AI通用物体识别文档 前往查阅Uni-App文档 前往查阅HTML5 文档 前往查阅HTML5文档 前往查阅 二、介绍 开发工具:HBuilderX跨段框架&#xff0…...

SpringCloud: sentinel降级配置、热点参数、系统规则 配置到nacos

一、application.yml spring.cloud.sentinel cloud:nacos:discovery:# 服务注册地址server-addr: xxx.xxx.xxx.xxx:8848sentinel:eager: truetransport:# 控制台地址dashboard: localhost:9999# nacos配置持久化datasource:ds2:nacos:server-addr: xxx.xxx.xxx.xxx:8848dataId…...

交换机之配置netsflow

网络监测技术Sflow——提供完整的第二层到第四层信息,可以适应超大网络流量环境下的流量分析,让用户详细、实时地分析网络传输流的性能、趋势和存在的问题。 (1)特性: 支持在千兆戒更高速的网络上精确地监控网络流量…...

非科班出身学习软件测试可以么

IT行业里对小白最友好的非软件测试莫属了,但是也要看你个人在学习软件测试这件事上面花费了多少的时间和努力了~ 每年毕业季,IT行业依然是比较热门且收入是最高的行业。对于应届毕业生来说想要进入IT行业,除了前后端开发,软件测试…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...

数据结构:递归的种类(Types of Recursion)

目录 尾递归(Tail Recursion) 什么是 Loop(循环)? 复杂度分析 头递归(Head Recursion) 树形递归(Tree Recursion) 线性递归(Linear Recursion)…...

ArcGIS Pro+ArcGIS给你的地图加上北回归线!

今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等,设置经线、纬线都以10间隔显示。 2、需要插入背会归线&#xf…...

内窥镜检查中基于提示的息肉分割|文献速递-深度学习医疗AI最新文献

Title 题目 Prompt-based polyp segmentation during endoscopy 内窥镜检查中基于提示的息肉分割 01 文献速递介绍 以下是对这段英文内容的中文翻译: ### 胃肠道癌症的发病率呈上升趋势,且有年轻化倾向(Bray等人,2018&#x…...