python进行网格分割
Python 进行 分割 网格
2023-09-14 09:10:02 时间
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpathes
from shapely.geometry import Polygon
def make_mesh(box,w,h): #按照w,h对box进行网格划分
[xmin,ymin,xmax,ymax]=box
list_x=np.arange(xmin,xmax,w)
list_y=np.arange(ymin,ymax,h)
#list_x中第i项和list_y中第j项所代表的网格为[list_x[i],list_y[j],list_x[i+1],list_y[j+1]]
fig, ax = plt.subplots()
ax.set_xbound(xmin, xmax)
ax.set_ybound(ymin, ymax)
color=['red', 'black', 'yellow','blue','green','purple']
for i in range(len(list_x)):
for j in range(len(list_y)):
xleft=list_x[i]
ydown=list_y[j]
if i==len(list_x)-1:
xright=xmax
else:
xright=list_x[i+1]
if j==len(list_y)-1:
yup=ymax
else:
yup=list_y[j+1]
print((xleft,ydown,xright,yup))
rect = mpathes.Rectangle([xleft,ydown], w, h, color=color[(i+j%5)%5])
ax.add_patch(rect)
print("************************")
print(list_x)
print(list_y)
plt.show()
make_mesh([0,0,1.4,1.2],0.22,0.33)
将这些网格转化为GIS中的PolyGon,如下
import numpy as np
import matplotlib.pyplot as plt
from shapely.geometry import Polygon
import geopandas as gpd
def make_mesh(box,w,h): #按照w,h对box进行网格划分
[xmin,ymin,xmax,ymax]=box
list_x=np.arange(xmin,xmax,w)
list_y=np.arange(ymin,ymax,h)
rect=gpd.GeoSeries(Polygon([(xmin, ymin), (xmax+w, ymin), (xmax+w, ymax+h), (xmin, ymax+h)]))
ax=rect.plot(color='white')
color=['red', 'black', 'yellow','blue','green','purple']
for i in range(len(list_x)):
for j in range(len(list_y)):
xleft=list_x[i]
ydown=list_y[j]
if i==len(list_x)-1:
xright=xmax
else:
xright=list_x[i+1]
if j==len(list_y)-1:
yup=ymax
else:
yup=list_y[j+1]
rectangle=gpd.GeoSeries(Polygon([(xleft, ydown), (xright, ydown), (xright, yup), (xleft, yup)]))
print(rectangle)
rectangle.plot(ax=ax,color=color[(i+j%5)%5])
print("************************")
print(list_x)
print(list_y)
plt.show()
make_mesh([0,0,1.4,1.2],0.22,0.33)
这是大矩形框的高和宽均不能被网格高和宽整除的情况:
这是两者都能被整除的情况:
返回geopandas中的GeoSeries:
import numpy as np
import matplotlib.pyplot as plt
from shapely.geometry import Polygon
import geopandas as gpd
import math
def make_mesh(box,w,h): #按照w,h对box进行网格划分
[xmin,ymin,xmax,ymax]=box
list_x=np.arange(xmin,xmax,w)
list_y=np.arange(ymin,ymax,h)
polygon_list=[]
for i in range(len(list_x)):
for j in range(len(list_y)):
xleft=list_x[i]
ydown=list_y[j]
if i==len(list_x)-1:
xright=xmax
else:
xright=list_x[i+1]
if j==len(list_y)-1:
yup=ymax
else:
yup=list_y[j+1]
rectangle=Polygon([(xleft, ydown), (xright, ydown), (xright, yup), (xleft, yup)])
polygon_list.append(rectangle)
return gpd.GeoSeries(polygon_list)
[xmin,ymin,xmax,ymax]=eval(input("输入box:"))
[w,h]=eval(input("输入网格宽和高:"))
gdf=make_mesh([xmin,ymin,xmax,ymax],w,h)
print(gdf)
print(math.ceil((xmax-xmin)/w)*math.ceil((ymax-ymin)/h))
gdf.boundary.plot()
plt.show()
均被整除的情况:
均不被整除的情况:
相关文章
- Python面试基础知识_python自学需要哪些基础知识
- pycharm配置python运行环境_C中调用Python
- h5 Python_python做h5网站
- Python:利用python代码编程实现将视频的avi格式转换为MP4格式
- python抛出异常写法_零基础学 Python(32):如何抛出和捕获异常?「建议收藏」
- python分段线性插值_Python实现分段线性插值
- 【超实用】3 分钟,教你用 Docker 部署一个 Python 应用!
- 统计系列(三)利用Python进行参数估计
- python-Python与PostgreSQL数据库-PostgreSQL数据库的基本知识(二)
- Python操作Execl 实现自动化填表详解编程语言
- OpenCV + python 实现人脸检测(基于照片和视频进行检测)详解大数据
- Linux下如何快速卸载Python环境(linux如何卸载python)
- Linux系统如何运行Python脚本(linux执行python脚本)
- 使用 Dask 在 Python 中进行并行计算
- 写给 Python 开发者的 10 条机器学习建议
- Python中如何调用MongoDB数据库?(调用mongodb)