利用Python柵格化地圖(以成都市為例,含代碼)
Python中可以使用多種庫(kù)來(lái)進(jìn)行柵格化地圖的操作,其中比較常用的有g(shù)eopandas、rasterio等,文中通過(guò)代碼介紹的非常詳細(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')

下面這個(gè)柵格地圖的類是我自己寫(xiě)的,類的參數(shù)主要有
rasterDataPath:圖層文件的路徑length:柵格單元的長(zhǎng)度,單位為 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
# 計(jì)算柵格與區(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í)例化對(duì)象并調(diào)用grid_map方法
grid = RasterData('Chengdu/Chengdu.shp', 2000) # 實(shí)例化對(duì)象
grid_data = grid.grid_map() # 調(diào)用grid_map方法進(jìn)行柵格化
# 將兩個(gè)圖層繪制在一起
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')
得到柵格模型,但此時(shí)的柵格是根據(jù)成都市邊界的最大范圍進(jìn)行劃分的,很多時(shí)候我們需要的是地理邊界內(nèi)部的柵格,因此需要調(diào)用grid_intersection方法

# 將兩個(gè)圖層繪制在一起 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代表柵格編號(hào),geometry代碼當(dāng)前柵格的多邊形要素

總結(jié)
到此這篇關(guān)于利用Python柵格化地圖的文章就介紹到這了,更多相關(guān)Python柵格化地圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)處理Excel表格超詳細(xì)系列
這篇文章主要介紹了python實(shí)現(xiàn)處理Excel表格超詳細(xì)系列,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08
Python跨文件實(shí)現(xiàn)字符串填充的三種實(shí)現(xiàn)方法
本文主要介紹了Python跨文件實(shí)現(xiàn)字符串填充的三種實(shí)現(xiàn)方法,包括format方法、%格式化操作符和eval函數(shù)結(jié)合f-string,具有一定的參考價(jià)值,感興趣的可以了解一下2024-12-12
Python基于內(nèi)置庫(kù)pytesseract實(shí)現(xiàn)圖片驗(yàn)證碼識(shí)別功能
這篇文章主要介紹了Python基于內(nèi)置庫(kù)pytesseract實(shí)現(xiàn)圖片驗(yàn)證碼識(shí)別功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02
python讀寫(xiě)Excel表格的實(shí)例代碼(簡(jiǎn)單實(shí)用)
這篇文章主要介紹了python讀寫(xiě)Excel表格的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12
python tkinter實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能
這篇文章主要為大家詳細(xì)介紹了python tkinter實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
selenium+python實(shí)現(xiàn)基本自動(dòng)化測(cè)試的示例代碼
這篇文章主要介紹了selenium+python實(shí)現(xiàn)基本自動(dòng)化測(cè)試的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
利用Python編寫(xiě)一個(gè)藏頭詩(shī)在線生成器
這篇文章主要介紹了如何利用Python編寫(xiě)一個(gè)藏頭詩(shī)在線生成器,文中的示例代碼講解詳細(xì),感興趣的同學(xué)可以跟隨小編一起動(dòng)手嘗試一下2022-04-04
python中*args與**kwarsg及閉包和裝飾器的用法
這篇文章主要介紹了python中*args與**kwarsg及閉包和裝飾器的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07

