Python中可以使用多種庫來進(jìn)行柵格化地圖的操作,其中比較常用的有g(shù)eopandas、rasterio等,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下" />

最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用Python柵格化地圖(以成都市為例,含代碼)

 更新時間:2024年03月14日 09:00:27   作者:數(shù)據(jù)的旅途  
這篇文章主要給大家介紹了關(guān)于利用Python柵格化地圖的相關(guān)資料,
Python中可以使用多種庫來進(jìn)行柵格化地圖的操作,其中比較常用的有g(shù)eopandas、rasterio等,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

python代碼實(shí)現(xiàn)

讀取成都市邊界的圖層文件(.shp),并可視化

import geopandas as gpd

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

下面這個柵格地圖的類是我自己寫的,類的參數(shù)主要有

  • 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
        
    # 計算柵格與區(qū)域的交集
    def grid_intersection(self, region: gpd.GeoDataFrame) -> gpd.GeoDataFrame:
        grid = self.grid_map()
        intersection_data = gpd.overlay(grid, region, how='intersection')
        return intersection_data

實(shí)例化對象并調(diào)用grid_map方法

grid = RasterData('Chengdu/Chengdu.shp', 2000) # 實(shí)例化對象
grid_data = grid.grid_map() # 調(diào)用grid_map方法進(jìn)行柵格化
# 將兩個圖層繪制在一起
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')

得到柵格模型,但此時的柵格是根據(jù)成都市邊界的最大范圍進(jìn)行劃分的,很多時候我們需要的是地理邊界內(nèi)部的柵格,因此需要調(diào)用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')

最終就得到了柵格化后的數(shù)據(jù),是DataFrame格式的,其中grid_id代表柵格編號,geometry代碼當(dāng)前柵格的多邊形要素

總結(jié) 

到此這篇關(guān)于利用Python柵格化地圖的文章就介紹到這了,更多相關(guān)Python柵格化地圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決DataFrame排序sort的問題

    解決DataFrame排序sort的問題

    今天小編就為的大家分享一篇解決DataFrame排序sort的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • 使用Python繪制動態(tài)愛心并表白的代碼詳解

    使用Python繪制動態(tài)愛心并表白的代碼詳解

    在這個充滿浪漫的季節(jié),如何用代碼表達(dá)你的愛意呢?今天我們將使用 Python 的 matplotlib 和 numpy 庫繪制一個動態(tài)的愛心,并且在愛心上添加表白的文字,這將是一個獨(dú)特而浪漫的方式來表達(dá)你的心聲,感興趣的小伙伴跟著小編來看看吧
    2025-04-04
  • opencv改變imshow窗口大小,窗口位置的方法

    opencv改變imshow窗口大小,窗口位置的方法

    下面小編就為大家分享一篇opencv改變imshow窗口大小,窗口位置的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python類的多重繼承問題深入分析

    Python類的多重繼承問題深入分析

    昨天在Python類的多重繼承那里糾結(jié)了好久,咨詢了不少高手之后,才完全搞明白,現(xiàn)在把類的特性整理下,供以后參考,也給有需要的小伙伴們參考下
    2014-11-11
  • Pytest 使用簡介

    Pytest 使用簡介

    這篇文章主要介紹了Pytest 使用簡介,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • python編程學(xué)習(xí)使用管道Pipe編寫優(yōu)化代碼

    python編程學(xué)習(xí)使用管道Pipe編寫優(yōu)化代碼

    大家好,今天這篇文章我將詳細(xì)講解 Pipe 如何讓你的代碼更加簡潔的方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • Python IndexError索引超出范圍異常的原因及解決方法

    Python IndexError索引超出范圍異常的原因及解決方法

    在Python編程的世界中,IndexError是一個非常常見且容易遇到的異常類型,它通常發(fā)生在我們試圖訪問序列中不存在的位置時,理解這個異常的本質(zhì)和處理方法,對于每一位Python開發(fā)者來說都是至關(guān)重要的,本文通過代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2026-06-06
  • python實(shí)現(xiàn)梯度下降求解邏輯回歸

    python實(shí)現(xiàn)梯度下降求解邏輯回歸

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)梯度下降求解邏輯回歸,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • python集成環(huán)境一鍵部署全過程

    python集成環(huán)境一鍵部署全過程

    這篇文章主要介紹了python集成環(huán)境一鍵部署全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-08-08
  • Python2和Python3中@abstractmethod使用方法

    Python2和Python3中@abstractmethod使用方法

    這篇文章主要介紹了Python2和Python3中@abstractmethod使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02

最新評論

漠河县| 潮州市| 扶风县| 巴里| 丰都县| 绵竹市| 桦南县| 昭通市| 咸宁市| 辽源市| 腾冲县| 平罗县| 芦溪县| 洛阳市| 常宁市| 同仁县| 城固县| 剑河县| 台北县| 穆棱市| 塔河县| 锦屏县| 老河口市| 富民县| 綦江县| 临夏县| 连山| 五原县| 陵水| 那坡县| 阿合奇县| 邵阳县| 朝阳县| 曲沃县| 玉溪市| 常熟市| 垣曲县| 徐闻县| 德兴市| 葫芦岛市| 成都市|