Skip to content

Grid

渔网(栅格)划分

对面域图层进行栅格划分

Parameters:

Name Type Description Default
polygon_gdf GeoDataFrame

面域GeoDataFrame

required
meter_step float

栅格边长(米)

None
is_geo_coord bool

是否是地理坐标

True
generate_index bool

是否生成行列索引

True

Returns:

Type Description
GeoDataFrame

栅格GeoDataFrame

Source code in src/gotrackit/tools/grid.py
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
def get_grid_data(polygon_gdf: gpd.GeoDataFrame, meter_step: float = None, is_geo_coord: bool = True,
                  generate_index: bool = True) -> gpd.GeoDataFrame:
    """渔网(栅格)划分

    对面域图层进行栅格划分

    Args:
        polygon_gdf: 面域GeoDataFrame
        meter_step: 栅格边长(米)
        is_geo_coord: 是否是地理坐标
        generate_index: 是否生成行列索引

    Returns:
        栅格GeoDataFrame
    """
    crs = polygon_gdf.crs
    geo_list = polygon_gdf[geometry_field].to_list()
    polygon_obj = unary_union(geo_list)

    # 根据栅格区域大小对面域进行栅格划分
    grid_gdf = generate_mesh(polygon_obj=polygon_obj, meter_step=meter_step, is_geo_coord=is_geo_coord, crs=crs,
                             generate_index=generate_index)

    grid_gdf = gpd.GeoDataFrame(grid_gdf, geometry=geometry_field, crs=crs)
    grid_gdf = gpd.sjoin(grid_gdf, polygon_gdf[[geometry_field]])
    del grid_gdf['index_right']
    grid_gdf.reset_index(inplace=True, drop=True)
    if generate_index:
        return grid_gdf[['grid_id', 'dx', 'dy', geometry_field]]
    else:
        return grid_gdf[['grid_id', geometry_field]]