利用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实现处理Excel表格超详细系列

    python实现处理Excel表格超详细系列

    这篇文章主要介绍了python实现处理Excel表格超详细系列,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • Python跨文件实现字符串填充的三种实现方法

    Python跨文件实现字符串填充的三种实现方法

    本文主要介绍了Python跨文件实现字符串填充的三种实现方法,包括format方法、%格式化操作符和eval函数结合f-string,具有一定的参考价值,感兴趣的可以了解一下
    2024-12-12
  • Python基于内置库pytesseract实现图片验证码识别功能

    Python基于内置库pytesseract实现图片验证码识别功能

    这篇文章主要介绍了Python基于内置库pytesseract实现图片验证码识别功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • python读写Excel表格的实例代码(简单实用)

    python读写Excel表格的实例代码(简单实用)

    这篇文章主要介绍了python读写Excel表格的方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • Python 初始化多维数组代码

    Python 初始化多维数组代码

    python多维数组方法示例代码
    2008-09-09
  • python tkinter实现简单计算器功能

    python tkinter实现简单计算器功能

    这篇文章主要为大家详细介绍了python tkinter实现简单计算器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • selenium+python实现基本自动化测试的示例代码

    selenium+python实现基本自动化测试的示例代码

    这篇文章主要介绍了selenium+python实现基本自动化测试的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • 利用Python编写一个藏头诗在线生成器

    利用Python编写一个藏头诗在线生成器

    这篇文章主要介绍了如何利用Python编写一个藏头诗在线生成器,文中的示例代码讲解详细,感兴趣的同学可以跟随小编一起动手尝试一下
    2022-04-04
  • python中*args与**kwarsg及闭包和装饰器的用法

    python中*args与**kwarsg及闭包和装饰器的用法

    这篇文章主要介绍了python中*args与**kwarsg及闭包和装饰器的用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • Python中index的用法详解及注意事项

    Python中index的用法详解及注意事项

    这篇文章主要给大家介绍了关于Python中index的用法详解及注意事项,index()方法是 Python 中字符串、列表和元组的内置方法之一,用于查找指定元素在序列中的位置,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-11-11

最新评论