您当前的位置: 首页 >  Python

FPGA硅农

暂无认证

  • 0浏览

    0关注

    282博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

python进行网格分割

FPGA硅农 发布时间:2020-11-06 08:50:00 ,浏览量:0

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()

均被整除的情况: 在这里插入图片描述 均不被整除的情况: 在这里插入图片描述

关注
打赏
1658642721
查看更多评论
立即登录/注册

微信扫码登录

0.0535s