学习笔记 | Python处理矢栅数据(2)

1. 导入并查看矢量数据

导入相关库(geopandas,rioxarray,pandas,matplotlib)

import geopandas as gpd
import rioxarray
import pandas as pd
import matplotlib.pyplot as plt

aoi_boundary_HARV = gpd.read_file("G:/learnpy/data/NEONGeopydata/NEON-DS-Site-Layout-Files/HARV/HarClip_UTMZ18.shp")

查看矢量数据类型

aoi_boundary_HARV.type
# 0    Polygon
# dtype: object

查看坐标系

aoi_boundary_HARV.crs

# <Projected CRS: EPSG:32618>
# Name: WGS 84 / UTM zone 18N
# Axis Info [cartesian]:
# - E[east]: Easting (metre)
# - N[north]: Northing (metre)
# Area of Use:
# - name: Between 78°W and 72°W, northern hemisphere between equator and 84°N, onshore and offshore. Bahamas. Canada - Nunavut; Ontario; Quebec. Colombia. Cuba. Ecuador. Greenland. Haiti. Jamica. Panama. Turks and Caicos Islands. United States (USA). Venezuela.
# - bounds: (-78.0, 0.0, -72.0, 84.0)
# Coordinate Operation:
# - name: UTM zone 18N
# - method: Transverse Mercator
# Datum: World Geodetic System 1984 ensemble
# - Ellipsoid: WGS 84
# - Prime Meridian: Greenwich

查看边界
在这里插入图片描述

aoi_boundary_HARV.bounds
# minx	miny	maxx	maxy
# 0	732128.016925	4.713209e+06	732251.102892	4.713359e+06

在这里插入图片描述

aoi_boundary_HARV.plot(figsize=(5,5),edgecolor="red",facecolor="green", alpha=0.2)

在这里插入图片描述

2. CSV表格文件转矢量数据

CHM_HARV = rioxarray.open_rasterio("G:/learnpy/data/NEONGeopydata/NEON-DS-Airborne-Remote-Sensing/HARV/CHM/HARV_chmCrop.tif")
CHM_HARV

# <xarray.DataArray (band: 1, y: 1367, x: 1697)>
# [2319799 values with dtype=float64]
# Coordinates:
#   * band         (band) int32 1
#   * x            (x) float64 7.315e+05 7.315e+05 ... 7.331e+05 7.331e+05
#   * y            (y) float64 4.714e+06 4.714e+06 ... 4.712e+06 4.712e+06
#     spatial_ref  int32 0
# Attributes:
#     STATISTICS_MAXIMUM:  38.169998168945
#     STATISTICS_MEAN:     18.097804669578
#     STATISTICS_MINIMUM:  0
#     STATISTICS_STDDEV:   5.3218337145236
#     _FillValue:          -9999.0
#     scale_factor:        1.0
#     add_offset:          0.0
plot_locations_HARV = gpd.read_file("G:/learnpy/data/NEONGeopydata/NEON-DS-Site-Layout-Files/HARV/HARV_PlotLocations.csv")
plot_locations_HARV

在这里插入图片描述

plot_locations_HARV1 = gpd.GeoDataFrame(plot_locations_HARV, 
                                    geometry = gpd.points_from_xy(plot_locations_HARV.easting,plot_locations_HARV.northing), 
                                    crs=CHM_HARV.rio.crs)
plot_locations_HARV1 = gpd.GeoDataFrame(plot_locations_HARV, 
                                    geometry = gpd.points_from_xy(plot_locations_HARV.easting,plot_locations_HARV.northing), 
                                    crs=CHM_HARV.rio.crs)
plot_locations_HARV1.plot(figsize=(6,6),edgecolor="red",facecolor="None")
plt.title("Map of Plot Location")
plt.ticklabel_format(style="plain")

在这里插入图片描述

3. 矢量叠加栅格绘图

# Shapefiles 
tower = gpd.read_file("G:/learnpy/data/NEONGeopydata/NEON-DS-Site-Layout-Files/HARV/HARVtower_UTM18N.shp")
road = gpd.read_file("G:/learnpy/data/NEONGeopydata/NEON-DS-Site-Layout-Files/HARV/HARV_roads.shp")
aoi_boundary_HARV = gpd.read_file("G:/learnpy/data/NEONGeopydata/NEON-DS-Site-Layout-Files/HARV/HarClip_UTMZ18.shp")
CHM_HARV = rioxarray.open_rasterio("G:/learnpy/data/NEONGeopydata/NEON-DS-Airborne-Remote-Sensing/HARV/CHM/HARV_chmCrop.tif")
fg,ax = plt.subplots()
CHM_HARV1 = CHM_HARV.where(CHM_HARV!=CHM_HARV.rio.nodata)
CHM_HARV1.plot(ax=ax)
plot_locations_HARV1.plot(ax = ax, edgecolor="red",facecolor="None")
aoi_boundary_HARV1.plot(ax=ax, edgecolor="blue",facecolor="None")
tower.plot(ax=ax, facecolor="red")
road.plot(ax=ax,edgecolor = "orange", facecolor="None")

在这里插入图片描述

4.基于矢量裁剪栅格数据并导出为tif

CHM_HARV_clip = CHM_HARV.rio.clip(aoi_boundary_HARV.geometry)
plt.style.use("ggplot")
plt.figure()
CHM_HARV_clip.plot(figsize = (6,6))
plt.title("Crope the Raster")
plt.ticklabel_format(style="plain")
CHM_HARV_clip.rio.to_raster("G:/learnpy/data/CHM_HARV_clip.tif")

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python学习笔记|字符串与正则表达式练习题答案 1. 练习题1: 题目:给定一个字符串s,找出其中的连续的最长的数字串。 答案:可以通过正则表达式来匹配数字串,然后使用max函数找出最长的。 代码示例: import re def find_longest_num_str(s): num_str_list = re.findall('\d+', s) longest_str = max(num_str_list, key=len) return longest_str s = "ab1234c56789def" print(find_longest_num_str(s)) 输出:56789 2. 练习题2: 题目:给定一个字符串s,将其中的每个空格替换为"%20"。 答案:可以通过正则表达式的sub函数来实现替换。 代码示例: import re def replace_space(s): new_s = re.sub(' ', '%20', s) return new_s s = "Hello World" print(replace_space(s)) 输出:Hello%20World 3. 练习题3: 题目:给定一个字符串s,判断它是否为回文字符串。 答案:可以使用切片操作将字符串反转,然后与原字符串进行比较。 代码示例: def is_palindrome(s): return s == s[::-1] s = "abcba" print(is_palindrome(s)) 输出:True ### 回答2: 以下是关于字符串和正则表达式练习题的答案: 1. 给定一个字符串s,编写一个函数,返回该字符串的反转字符串。 def reverse_string(s): return s[::-1] 2. 给定一个字符串s,编写一个函数,返回是否是回文字符串。 def is_palindrome(s): return s == s[::-1] 3. 给定一个字符串s和一个字符c,编写一个函数,返回字符串s中字符c的出现次数。 def count_char(s, c): return s.count(c) 4. 给定一个字符串s,编写一个函数,返回字符串s中的所有单词列表。 def split_words(s): return s.split() 5. 给定一个字符串s,编写一个函数,返回字符串s中的所有数字列表。 import re def extract_numbers(s): return re.findall(r'\d+', s) 这只是一些可能的答案,其中的解决方法可以有很多种。每个问题都有不同的解决方案,具体取决于个人的编程风格和需求。希望这些答案能够帮助你理解和学习Python中的字符串和正则表达式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值