GeoPy1.1 地理数据处理入门

原作者: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'

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【微信小程序页面出现onReachBottom不触发的情况】

微信小程序页面出现onReachBottom不触发的情况 源代码的情况是 /** * 页面上拉触底事件的处理函数 */ onReachBottom() {console.log("-------"); },.page {height: 100vh;width: 100vw;overflow-x: hidden; }无法触发的原因是:height设置为100vh,会导…

轻松掌握锁冲突问题的排查方法——《OceanBase诊断系列》之八

1. 前言 OceanBase数据库通过两阶段封锁机制确保读写事务并发控制的正确性。在高冲突场景下,事务处理中经常会遇到行锁冲突的问题。然而,许多OceanBase用户对于何时发生锁冲突,锁冲突的表现如何,以及如何排查锁冲突的原因&#x…

Anaconda 的一些配置

Anaconda 安装及修改环境默认位置 https://blog.csdn.net/qq_54562136/article/details/128932352 最重要的一步!!!!!改文件夹权限 Anaconda创建、激活、退出、删除虚拟环境 修改pip install 默认安装路径

【❤️算法笔记❤️】-(每日一刷-876、单链表的中点)

文章目录 题目思路解法 题目 给你单链表的头结点 head ,请你找出并返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 示例 1: 输入:head [1,2,3,4,5] 输出:[3,4,5] 解释:链表只有一个中间…

数学与简单dp

1205. 买不到的数目 - AcWing题库 import java.util.*;public class Main{public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int m sc.nextInt();System.out.print((n - 1) * (m - 1) - 1);} } 1211. 蚂蚁感冒 - AcWing题库…

告别“死记硬背”,坐席助手让客服新手秒变大咖

在客服行业,新手客服人员常常面临着两大难题:一是需要死记硬背大量的标准答案,二是培训时间长,上岗速度慢。然而,随着科技的发展,这些问题正逐渐得到。今天,我们要为大家介绍一款革命性的客服工…

【考研数学】张宇《1000题》做不下来怎么办?

张宇1000题其实非常考察基础知识,如果你基础没有打好就直接开始刷的话会发现挺难刷下来的 1000题还是更适合在强化阶段来刷,刷早了把心态刷崩掉也没什么用... 基础不好或者0基础的还是建议从简单的1800开始刷起来 同时也要非常注意刷题方法&#xff0…

二叉树——501.二叉搜索树中的众数、 236. 二叉树的最近公共祖先

二叉搜索树中的众数 给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。 如果树中有不止一个众数,可以按 任意顺序 返回。 假定 BST …

网络、网络协议模型、UDP编程——计算机网络——day01

今天来到了网络编程,主要讲了网络、网络协议模型以及UDP编程 网络 网络主要是进行:数据传输和数据共享 网络协议模型 OSI协议模型应用层 实际发送的数据表示层 发送的数据是否加密会话层 是否建立会话连接传…

2024暑期实习八股笔记

文章目录 自我介绍MySQL索引索引种类、B树聚簇索引、非聚簇索引联合索引、最左前缀匹配原则索引下推索引失效索引优化 日志、缓冲池redo log(重做日志)刷盘时机日志文件组 bin log(归档日志)记录格式写入机制 两阶段提交undo log&…

洛谷 素数环 Prime Ring Problem

题目描述 PDF 输入格式 输出格式 题意翻译 输入正整数 nn,把整数 1,2,\dots ,n1,2,…,n 组成一个环,使得相邻两个整数之和均为素数。输出时,从整数 11 开始逆时针排列。同一个环恰好输出一次。n\leq 16n≤16,保证一定有解。 多…

某宝某猫商品详情页面数据逆向

​​​​​逆向网址 aHR0cHM6Ly93d3cudGFvYmFvLmNvbS8 aHR0cHM6Ly93d3cudG1hbGwuY29tLw 逆向链接 aHR0cHM6Ly9kZXRhaWwudG1hbGwuY29tL2l0ZW0uaHRtP2lkPTc0NDk3NDQ4NTI3NSZwdmlkPTFiMzdmNjUyLTRjNDYtNGM2Ni04MDg4LWRhYmJiZDJhMzJhNSZzY209MTAwNy40MDk4Ni4yNzY3NTAuMCZzcG09YTIxY…

12、MongoDB -- 通过 SpringBoot 整合 Spring Data MongoDB 操作 MongoDB 数据库(传统的同步API编程)

目录 通过 SpringBoot 整合 Spring Data MongoDB 操作 MongoDB 数据库(传统的同步API编程)演示前提:登录单机模式的 mongodb 服务器命令登录【test】数据库的 mongodb 客户端命令登录【admin】数据库的 mongodb 客户端命令 代码演示同步API编…

基于SpringBoot和PotsGIS的各省地震震发可视化分析

目录 前言 一、后台接口研发 1、控制层实现 2、Mapper访问层 3、空间查询分析 二、前端可视化展示 1、主体地图定义 2、行政区划列表定义 3、行政区划定位 三、数据分析 1、北京市 2、广东省 3、青海省 4、湖南省 总结 前言 在之前的博文中,我们…

【Python】一文详细介绍 plt.rcParamsDefault 在 Matplotlib 中的原理、作用、注意事项

【Python】一文详细介绍 plt.rcParamsDefault 在 Matplotlib 中的原理、作用、注意事项 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程…

每日OJ题_牛客OR57 手套

目录 牛客OR57 手套 解析代码 牛客OR57 手套 手套_牛客题霸_牛客网 class Gloves { public:int findMinimum(int n, vector<int> left, vector<int> right) {} }; 解析代码 class Gloves { public:int findMinimum(int n, vector<int> left, vector<i…

机器学习——Q-Learning

Outline Critic 从头往后&#xff0c;逐渐累积 新时刻跟前一时刻有关 不同的方法得到不同的假设&#xff0c;得到不同的结果 Q-function 在状态s下强制执行a得到对应的奖励 目标网络 targe一直在变 将其中的一个Q进行固定 sample a batch udpdate Q-function …

2023年中国高校大数据挑战赛D题参考论文发布(全网首发)

腾讯文档】2023年大数据挑战赛资料说明 https://docs.qq.com/doc/DSEpWUVFySm1ObFB0 基于数据分析的行业职业技术培训能力评价 摘要 中国是制造业大国&#xff0c;产业门类齐全&#xff0c;每年需要培养大量的技能娴熟的技术工人进入工厂。本文将基于题目给出的数据&#x…

输出int型最大值、最小值的小妙招

如果在算法竞赛中要求输入数据是一个范围很大的数&#xff0c;而你又忘了int型的数据范围&#xff0c;这时该怎么办呢&#xff1f; 比如洛谷P1001号题目&#xff1a; 【题目描述】 输入两个整数a,b&#xff0c;输出它们的和&#xff08;∣a∣,∣b∣≤&#xff09;。 【输入…

微信小程序开发系列(二十)·wxml语法·setData()修改对象类型数据、ES6 提供的展开运算符、delete和rest的用法

目录 1. 新增单个、多个属性 1.1 新增单个属性 1.2 新增多个属性 2. 修改单个、多个属性 2.1 修改单个属性 2.2 修改多个属性 3. 优化 3.1 ES6 提供的展开运算符 3.2 Object.assign()将多个对象合并为一个对象 4. 删除单个、多个属性 4.1 删除单个属性 …