GeoPy1.1 地理数据处理入门

news2024/11/17 11:44:08

原作者:Damon 高校教师,中科院 GIS 博士

本文为原文章基础上,加上自己以及GPT4.0的总结整理而来

原活动链接

目录

  • 前言
    • 小练习:求一周的平均温度
    • 小练习:将文件夹下的文件路径都打印出来:
    • 小练习:判断矢量和栅格并重命名
    • 闯关题

前言

在地理学及相关专业,我们往往需要处理大量的地球观测数据和模拟结果,基于这些数据的处理结果进一步分析,得到一些客观规律或者研究结论。但是在处理过程中,我们会发现这些数据可能来源不同,格式不一。对于一些常见的地理数据格式,比如栅格数据、矢量数据等,大家比较容易想到用专业软件来处理,比如 Arcgis、MapGIS、ENVI 等,这些软件使用简单,也很强大,但是也有着一定的不足,比如(1)往往只能处理专业格式的数据(2)批量处理一般有着一定的门槛,需要进行二次开发(3)一般为商业软件,正版的授权费用较高等等。

为了更方便地批量处理地理数据、与其他领域的数据进行联合分析、展示结果等,相信大家都会想到用编程来解决相关问题,而目前最火的编程语言就是 Python。Python 简单易学,尤其是对于地理数据处理来说,Python 中着大量的地学相关库,包括数据处理、可视化和模型开发等,方便我们在同一个工作环境下处理数据、分析数据、展示分析结果,研究结果也容易被别人复现,且方便我们在研究中使用最新的算法,比如深度学习等。如果你是一名正在或将要找工作的同学,那更好,学好 Python,offer 多多!

学习 Python 的资源在网上多如牛毛,然而这对于没有接触过编程的同学来说不一定是件好事儿,毕竟筛选资源也是一门技术活。其实,从实用性的角度来说,可以先学习能让你 “读懂” 别人代码的基础知识,然后剩下的高阶知识在不断的实践过程中去补充。

本关卡就是作为一个 “砖头”,学完本关,你可以做到从一堆杂七杂八的数据中筛选出 shp 格式的矢量数据,帮你完成数据的分类整理,踏出地理数据分析第一步。

import numpy as np
import pandas as pd

小练习:求一周的平均温度

假设某地一周的平均温度分别为 15.3、16.7、14.8、15.0、19.7、16.4、18.5 摄氏度,请计算本周的平均温度。

# a1至a7依次为周一到周日的平均温度
a1,a2,a3,a4,a5,a6,a7 = 15.3,16.7,14.8,15.0,19.7,16.4,18.5

mean_value = np.array([a1,a2,a3,a4,a5,a6,a7]).mean()  # 请在=后的空格处填入你的代码
print(mean_value)
16.62857142857143

通过赋值语句,可以将数据存储在变量中,并在程序中进行处理和操作,这是 Python 中常用的基本语法之一。

除了上面的简单数据,我们还可以把更为复杂的数据(比如一些地理数据)赋值给一个变量,比如下面的代码我们把一个栅格数据据赋值给了左边的变量 rs

import rasterio as rio
from rasterio.plot import show
rs = rio.open('./data/GeoPy1/temp_grid_84/tem2015_84.tif')
show(rs);  # 仅展示rs变量中的数值数据


在这里插入图片描述

小练习:将文件夹下的文件路径都打印出来:

import glob

files = glob.glob('./data/GeoPy1/*')  # 获取文件夹下的所有文件
for i in files:
    print(i)
./data/GeoPy1\beijing.cpg
./data/GeoPy1\beijing.dbf
./data/GeoPy1\beijing.prj
./data/GeoPy1\beijing.qmd
./data/GeoPy1\beijing.shp
./data/GeoPy1\beijing.shx
./data/GeoPy1\beijing_temp.csv
./data/GeoPy1\hunan.cpg
./data/GeoPy1\hunan.dbf
./data/GeoPy1\hunan.prj
./data/GeoPy1\hunan.qmd
./data/GeoPy1\hunan.shp
./data/GeoPy1\hunan.shx
./data/GeoPy1\LC81970242014109LGN00.tif
./data/GeoPy1\Province_wgs84.cpg
./data/GeoPy1\Province_wgs84.dbf
./data/GeoPy1\Province_wgs84.prj
./data/GeoPy1\Province_wgs84.sbn
./data/GeoPy1\Province_wgs84.sbx
./data/GeoPy1\Province_wgs84.shp
./data/GeoPy1\Province_wgs84.shp.xml
./data/GeoPy1\Province_wgs84.shx
./data/GeoPy1\temp
./data/GeoPy1\temp_grid_84

🐋:glob 模块在后面关卡批量处理时会再次用到。

小练习:判断矢量和栅格并重命名

我们再来看另外一个案例:通过一个函数来给文件名字后面加上 “矢量” 或者 “栅格” 的标识,让业外人士也能清晰地分辨数据是矢量还是栅格。

def rename_file(x):
    """
    (这段话是块注释)
    根据x的名字来判断是矢量还是栅格
    如果是矢量,在文件名最前面加上"矢量"二字,
    如果是栅格,在文件名最前面加上"栅格"二字。
    """
    if x[-4:] == '.shp':
        x = '矢量' + x
    elif  x[-4:] == '.tif':
        x = '栅格' + x
    return x

# 调用函数并打印返回值
test_result = rename_file('china.shp')
print("新的文件名字为:", test_result)
新的文件名字为: 矢量china.shp

上面定义了一个很实用的函数,也许在工作和科研中会经常遇到,尤其是做数据入库的时候。

闯关题

按照题目要求完成以下任务

写一个函数,输入 “china.shp”,然后函数进行判断该文件是否是矢量数据,如果是矢量数据(假设是 ESRI shapefile),返回该文件名字(包括后缀),如果不是,则返回 “文件输入错误”,然后将函数的返回值赋值给变量 a1。

  • 可以通过判断文件后缀来确定是否是矢量文件 (比如是否等于 “.shp”)
  • split() 函数可以对 str(字符串)对象进行分割
  • split() 函数分割字符串之后得到一个 list,可以通过下标(也叫索引)来 “取出” 对应位置的元素
  • list 的下标是从 0 开始
# ...你的代码...
def is_shp(x):
    file_type = x.split('.')[1] # 请将'_'替换为合适的下标数字
    if file_type == 'shp':
        return x
    else:
        return '文件输入错误'

a1 = is_shp('china.shp')  # 请将'_'替换为给定的文件名
a1
'china.shp'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1508318.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ManualResetEvent 在线程中的使用C#

ManualResetEvent 用于表示线程同步事件,可以使得线程等待信号发射之后才继续执行下一步,否则一直处于等待状态中。 ManualResetEvent 的常用方法 构造函数ManualResetEvent(bool); ManualResetEvent manualResetEvent new ManualResetEvent(false…

医疗健康机器人_血压血糖血氧中医AI远程医疗定制方案

为人们提供了更加便捷、全面的健康管理服务,开发一款智能医疗健康机器人产品,为用户提供了多项便捷的服务,包括多体征检测、在线问诊、预约挂号、在线购药、健康科普教育等。这些服务构成了从疾病咨询到问诊再到健康管理的闭环,使…

系统学习c++类和对象——深度理解默认成员函数

前言:类和对象是面向对象语言的重要概念。 c身为一门既面向过程,又面向对象的语言。 想要学习c, 首先同样要先了解类和对象。 本节就类和对象的几种构造函数相关内容进行深入的讲解。 目录 类和对象的基本概念 封装 类域和类体 访问限定符…

ICLR 2024 | Meta AI提出ViT寄存器结构,巧妙消除大型ViT中的伪影以提高性能

论文题目:Vision Transformers Need Registers 论文链接:https://arxiv.org/abs/2309.16588 视觉Transformer(ViT)目前已替代CNN成为研究者们首选的视觉表示backbone,尤其是一些基于监督学习或自监督学习预训练的ViT&a…

前端实现生成图片并批量下载,下载成果物是zip包

简介 项目上有个需求,需要根据表单填写一些信息,来生成定制的二维码图片,并且支持批量下载二维码图片。 之前的实现方式是直接后端生成二维码图片,点击下载时后端直接返回一个zip包即可。但是项目经理说后端实现方式每次改个东西…

elasticsearch(学习笔记)(分布式搜索引擎)(黑马)(kibana操作)

一、索引库操作 索引库就类似数据库表,mapping映射就类似表的结构。 我们要向es中存储数据,必须先创建“库”和“表”。 1、mapping映射属性 mapping是对索引库中文档的约束,常见的mapping属性包括: type:字段数据类型…

树莓派安装Nginx服务搭建web网站结合内网穿透实现公网访问本地站点

文章目录 1. Nginx安装2. 安装cpolar3.配置域名访问Nginx4. 固定域名访问5. 配置静态站点 安装 Nginx(发音为“engine-x”)可以将您的树莓派变成一个强大的 Web 服务器,可以用于托管网站或 Web 应用程序。相比其他 Web 服务器,Ngi…

龙迅#LT8711UXE1 适用于Type-C/DP1.2/EDP转HDMI2.0方案,支持音频剥离和HDCP功能。

1. 描述 LT8711UXE1是一款高性能的 Type-C/DP1.2 转 HDMI2.0 转换器,设计用于将 USB Type-C 源或 DP1.2 源连接到 HDMI2.0 接收器。该LT8711UXE1集成了符合 DP1.2 标准的接收器和符合 HDMI2.0 标准的发射器。此外,还包括两个用于 CC 通信的 CC 控制器&a…

Python——读写属性

采用读写属性的目的就是把录入的数据控制在合理区间。 如:学生的年龄(age),学生的身高(height)... 方法一:利用实例方法来控制 class Student:def __init__(self,name"",age0):self.…

MySQL技能树学习

MySQL三大范式: 第一范式主要是确保数据表中每个字段的值必须具有原子性,也就是说数据表中每个字段的值为不可再次拆分的最小数据单元。 第二范式是指在第一范式的基础上,确保数据表中除了主键之外的每个字段都必须依赖主键。 第三范式是在…

SQL 中: 索引的建立和删除

目录 实验过程创建索引修改索引删除索引查询索引查看索引信息分析索引待续、更新中 实验过程 1 在STUDENT表的sno列上创建一个非聚簇索引,索引名为“student_sno_idx”。 CREATE INDEX student_sno_idx ON STUDENT (sno);2.在STUDENT表上按sno的升序,…

Project_Euler-10 题解

Project_Euler-10 题解 题目 思路 没有思路,一个线性筛秒了,只不过最近没发博客有点手生哈哈哈哈哈。 代码 /*************************************************************************> Author: Royi > Mail: royi990001gmail.com > From: > Lan…

ipad电容笔哪个牌子好?五款年度实力派电容笔推荐,小白必看

在数字化时代,电容笔已经成为了许多人日常生活和工作中不可或缺的工具。但是,市场上琳琅满目的电容笔品牌和型号让选择变得有些困难。作为一名资深的数码爱好者,我在选购电容笔上也有一定的经验,下面我来给大家分享一下2024电容笔…

基于RK3588+Codesys+Xenomai的ARM+LINUX实时硬件平台的软PLC解决方案

产品概述 公司推出基于瑞芯微RK3588架构的AI边缘计算主板,RK3588是新一代国产旗舰高性能64位八核处理器,采用8nm工艺,具有高算力、低功耗、超强多媒体、丰富数据接口等特点。搭载四核A76四核A55的八核CPU和ARM G610MP4 GPU,内置6…

Python中starmap有什么用的?

目录 前言 starmap函数的作用 starmap函数的用法 starmap函数的示例 1. 对每个元组元素进行求和 2. 对每个元组元素进行乘积 实际应用场景 1. 批量处理函数参数 2. 并行处理任务 3. 批量更新数据库 总结 前言 在Python中, starmap 是一个非常有用的函数&…

【2024泰迪杯】B 题:基于多模态特征融合的图像文本检索Python代码实现

【2024泰迪杯】B 题:基于多模态特征融合的图像文本检索Python代码实现 1 题目 2024 年(第 12 届)“泰迪杯”数据挖掘挑战赛—B 题:基于多模态特征融合的图像文本检索 一、问题背景 随着近年来智能终端设备和多媒体社交网络平台…

U盘启动盘 制作Linux Ubuntu CentOS系统启动盘 系统安装

U盘启动盘 制作Linux Ubuntu CentOS系统启动盘 系统安装 准备条件 准备一个U盘,建议容量至少为8GB,以便存放系统镜像文件 一台已经安装好操作系统的计算机,用于制作U盘启动盘 Ubuntu和CentOS的Linux ISO镜像文件。可以从官方网站或相关资源…

Linux -- 线程概念和控制

一 什么是线程 1.1 线程的引出 我们开始理解一下Linux中的线程。我们以前说过,一个进程被创建出来,要有自己对应的进程PCB的,也就是 task_struct,也要有自己的地址空间、页表,经过页表映射到物理内存中。所以在进程角…

JMeter 简介及安装详细教程(全网独家)

JMeter 简介 全名为 Apache JMeter JMeter 是一个软件,使负载测试或业绩为导向的业务(功能)测试不同的协议或技术。 它是 Apache 软件基金会的Stefano Mazzocchi JMeter 最初开发的。 它主要对 Apache JServ(现在称为如 Apache T…

吴恩达机器学习笔记十六 如何debug一个学习算法 模型评估 模型选择和训练 交叉验证测试集

如果算法预测出的结果不太好,可以考虑以下几个方面: 获得更多的训练样本 采用更少的特征 尝试获取更多的特征 增加多项式特征 增大或减小 λ 模型评估(evaluate model) 例如房价预测,用五个数据训练出的模型能很好的拟合这几个数据&am…