st_make_grid 等同于 python 的方法
st_make_grid method equivalent in python
是否有与 r-spatial in python 中非常好的 st_make_grid method of the sf 包等效的产品?该方法在多边形的边界框上创建矩形网格几何体。
我想做与 问题中提出的解决方案完全相同的事情,例如将一个多边形分成若干面积相同的正方形我选择。感谢您的帮助。
或者,我可以使用 rpy2 到 运行 r 中的一个脚本,该脚本执行 st_make_grid
方法,该方法将形状多边形作为输入并输出正方形多边形,以供读取与匀称。这对要处理的许多多边形是否有效?
Would this be effective on many polygons to process?
当然不是。没有内置 Python 版本,但下面的函数可以解决问题。如果您需要性能,请确保在您的环境中安装了 pygeos
。
def make_grid(polygon, edge_size):
"""
polygon : shapely.geometry
edge_size : length of the grid cell
"""
from itertools import product
import numpy as np
import geopandas as gpd
bounds = polygon.bounds
x_coords = np.arange(bounds[0] + edge_size/2, bounds[2], edge_size)
y_coords = np.arange(bounds[1] + edge_size/2, bounds[3], edge_size)
combinations = np.array(list(product(x_coords, y_coords)))
squares = gpd.points_from_xy(combinations[:, 0], combinations[:, 1]).buffer(edge_size / 2, cap_style=3)
return gpd.GeoSeries(squares[squares.intersects(polygon)])
是否有与 r-spatial in python 中非常好的 st_make_grid method of the sf 包等效的产品?该方法在多边形的边界框上创建矩形网格几何体。
我想做与
或者,我可以使用 rpy2 到 运行 r 中的一个脚本,该脚本执行 st_make_grid
方法,该方法将形状多边形作为输入并输出正方形多边形,以供读取与匀称。这对要处理的许多多边形是否有效?
Would this be effective on many polygons to process?
当然不是。没有内置 Python 版本,但下面的函数可以解决问题。如果您需要性能,请确保在您的环境中安装了 pygeos
。
def make_grid(polygon, edge_size):
"""
polygon : shapely.geometry
edge_size : length of the grid cell
"""
from itertools import product
import numpy as np
import geopandas as gpd
bounds = polygon.bounds
x_coords = np.arange(bounds[0] + edge_size/2, bounds[2], edge_size)
y_coords = np.arange(bounds[1] + edge_size/2, bounds[3], edge_size)
combinations = np.array(list(product(x_coords, y_coords)))
squares = gpd.points_from_xy(combinations[:, 0], combinations[:, 1]).buffer(edge_size / 2, cap_style=3)
return gpd.GeoSeries(squares[squares.intersects(polygon)])