利用Python栅格化地图(以成都市为例,含代码)

 更新时间:2024年03月14日 09:00:27   作者:数据的旅途  
这篇文章主要给大家介绍了关于利用Python栅格化地图的相关资料,
Python中可以使用多种库来进行栅格化地图的操作,其中比较常用的有geopandas、rasterio等,文中通过代码介绍的非常详细,需要的朋友可以参考下

python代码实现

读取成都市边界的图层文件(.shp),并可视化

import geopandas as gpd

cd_shape = gpd.read_file('Chengdu/Chengdu.shp')
cd_shape.plot(edgecolor='k',facecolor='none')

下面这个栅格地图的类是我自己写的,类的参数主要有

  • rasterDataPath:图层文件的路径
  • length:栅格单元的长度,单位为 m
class RasterData:

    def __init__(self, raster_data_path: str, length: float):
        self.raster = gpd.read_file(raster_data_path)
        self.length = length/1000 * 0.009
        self.polygons = []
        self.grid_ids = []
        self.x_min, self.y_min, self.x_max, self.y_max = self.raster.total_bounds
        self.rows, self.cols = self.grid_shape()

    def grid_shape(self) -> tuple:
        rows = int(math.ceil((self.y_max - self.y_min) / float(self.length)))
        cols = int(math.ceil((self.x_max - self.x_min) / float(self.length)))
        return rows, cols

    def grid_num(self) -> int:
        return self.rows * self.cols

    def grid_map(self) -> gpd.GeoDataFrame:
        points_list = []
        for row in range(self.rows):
            for col in range(self.cols):
                center_point_x = self.x_min + self.length / 2 + col * self.length
                center_point_y = self.y_min + self.length / 2 + row * self.length
                
                points = [Point(center_point_x + dx * self.length / 2,
                                center_point_y + dy * self.length / 2)
                          for dx, dy in [(-1, 1), (1, 1), (1, -1), (-1, -1)]]
                points_list.append(points)

        polygons = [Polygon(points) for points in points_list]
        grid_ids = list(range(len(polygons)))
        
        grid = gpd.GeoDataFrame({'geometry': polygons, 'grid_id': grid_ids}, crs=self.raster.crs)
        return grid
        
    # 计算栅格与区域的交集
    def grid_intersection(self, region: gpd.GeoDataFrame) -> gpd.GeoDataFrame:
        grid = self.grid_map()
        intersection_data = gpd.overlay(grid, region, how='intersection')
        return intersection_data

实例化对象并调用grid_map方法

grid = RasterData('Chengdu/Chengdu.shp', 2000) # 实例化对象
grid_data = grid.grid_map() # 调用grid_map方法进行栅格化
# 将两个图层绘制在一起
fig, ax = plt.subplots(figsize=(10, 10))
# 加粗绘图的线宽
cd_shape.plot(ax=ax, edgecolor='k', linewidth=1, facecolor='none')
grid_data.plot(ax=ax, edgecolor='k', linewidth=0.5, facecolor='none')

得到栅格模型,但此时的栅格是根据成都市边界的最大范围进行划分的,很多时候我们需要的是地理边界内部的栅格,因此需要调用grid_intersection方法

# 将两个图层绘制在一起
fig, ax = plt.subplots(figsize=(10, 10))
# 加粗绘图的线宽
intersection_data = grid.grid_intersection(cd_shape)
cd_shape.plot(ax=ax, edgecolor='k', linewidth=1, facecolor='none')
intersection_data.plot(ax=ax, edgecolor='k', linewidth=0.5, facecolor='none')

最终就得到了栅格化后的数据,是DataFrame格式的,其中grid_id代表栅格编号,geometry代码当前栅格的多边形要素

总结 

到此这篇关于利用Python栅格化地图的文章就介绍到这了,更多相关Python栅格化地图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python对Tornado请求与响应的数据处理

    Python对Tornado请求与响应的数据处理

    这篇文章主要介绍了Python对Tornado请求与响应的数据处理,需要的朋友可以参考下
    2020-02-02
  • python正则表达式之对号入座篇

    python正则表达式之对号入座篇

    正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑
    2018-07-07
  • Python文本预处理学习指南

    Python文本预处理学习指南

    文本预处理是指在进行自然语言处理(NLP)任务之前,对原始文本数据进行清洗、转换和标准化的过程,本文主要为大家介绍了文本预处理的使用,需要的可以参考下
    2023-07-07
  • 深入了解Python 中线程和进程区别

    深入了解Python 中线程和进程区别

    这篇文章主要介绍了深入了解Python 中线程和进程区别,一个进程由一个或者多个线程组成,线程是一个进程中代码的不同执行路线。切换进程需要的资源比切换线程的要多的多,下面来了解更多的详细内容,需要的小伙伴可以参考一下
    2022-03-03
  • 如何使用python把ppt转换成pdf

    如何使用python把ppt转换成pdf

    这篇文章主要介绍了如何使用python把ppt转换成pdf,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-06-06
  • Python Asyncio 库之同步原语常用函数详解

    Python Asyncio 库之同步原语常用函数详解

    这篇文章主要为大家介绍了Python Asyncio 库之同步原语常用函数详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • python实现简单的socket server实例

    python实现简单的socket server实例

    这篇文章主要介绍了python实现简单的socket server的方法,实例分析了Python中socket的操作技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • pygame游戏之旅 添加游戏介绍

    pygame游戏之旅 添加游戏介绍

    这篇文章主要为大家详细介绍了pygame游戏之旅,教大家如何添加游戏介绍,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • 在双python下设置python3为默认的方法

    在双python下设置python3为默认的方法

    这篇文章主要介绍了如何在双python下设置python3为默认,本文通过一个例子分步骤给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-10-10
  • Python读取pdf、word、excel、ppt、csv和txt文件提取所有文本

    Python读取pdf、word、excel、ppt、csv和txt文件提取所有文本

    这篇文章主要给大家介绍了关于Python读取pdf、word、excel、ppt、csv和txt文件提取所有文本的相关资料,文中通过代码示例将实现的方法介绍的非常详细,需要的朋友可以参考下
    2023-08-08

最新评论