【代码】使用Python的GDAL/OGR库来创建渔网格
【代码】使用Python的GDAL/OGR库来创建渔网格
ytkz什么是GIS渔网
在GIS里,渔网格是一种常见的地理空间数据分析和可视化工具,它可以将地理空间数据划分为规则的网格,便于进行进一步的统计和分析。
在arcgis中很容易实现这个功能。
在搜索框搜索“fishnet”,如果你的版本是中文,则搜索‘’渔网‘。
然后在’创建渔网的界面‘,输入范围文件,然后设置分割渔网的参数。
在arcgis中很容易实现这个功能。但是怎么用代码实现呢?
代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2024/3/17 9:13
# @File : create_fishnet.py
# 创建渔网
from osgeo import ogr
import os
def create_fishnet(input_vector_file, output_grid_file, grid_size=10):
# 打开矢量文件
input_source = ogr.Open(input_vector_file)
input_layer = input_source.GetLayer()
# 获取矢量文件的空间参考
srs = input_layer.GetSpatialRef()
# 获取矢量文件的范围
x_min, x_max, y_min, y_max = input_layer.GetExtent()
# 计算网格大小
x_size = (x_max - x_min) / grid_size
y_size = (y_max - y_min) / grid_size
# 创建输出文件
driver = ogr.GetDriverByName("ESRI Shapefile")
if os.path.exists(output_grid_file):
driver.DeleteDataSource(output_grid_file)
output_source = driver.CreateDataSource(output_grid_file)
output_layer = output_source.CreateLayer(output_grid_file, srs, ogr.wkbPolygon)
# 创建ID字段
id_field = ogr.FieldDefn("id", ogr.OFTInteger)
output_layer.CreateField(id_field)
# 创建网格
id = 0
y = y_min
while y < y_max:
x = x_min
while x < x_max:
ring = ogr.Geometry(ogr.wkbLinearRing)
ring.AddPoint(x, y)
ring.AddPoint(x + x_size, y)
ring.AddPoint(x + x_size, y + y_size)
ring.AddPoint(x, y + y_size)
ring.AddPoint(x, y)
poly = ogr.Geometry(ogr.wkbPolygon)
poly.AddGeometry(ring)
feature = ogr.Feature(output_layer.GetLayerDefn())
feature.SetField("id", id)
feature.SetGeometry(poly)
output_layer.CreateFeature(feature)
feature = ring = poly = None
id += 1
x += x_size
y += y_size
input_source = output_source = None
if __name__ == '__main__':
# 输入矢量文件路径
input_vector_file = "scope.shp"
# 输出渔网文件路径
output_grid_file = "scope10x10.shp"
grid_size = 8
create_fishnet(input_vector_file, output_grid_file, grid_size=grid_size)
结果展示
代码解释
这是一个使用Python的GDAL/OGR库来创建渔网格(fishnet)的脚本。
这个脚本的主要功能是读取一个输入的矢量文件(如shapefile),并在该文件的空间范围内创建一个规则的网格。每个网格都是一个多边形,包含四个顶点,代表了网格的四个角。每个网格都有一个唯一的ID,这个ID是在创建网格的过程中自动生成的。
这个脚本的主要步骤如下:
- 打开输入的矢量文件,并获取其空间参考和范围。
- 根据输入的网格大小,计算每个网格的大小。
- 创建输出的矢量文件,该文件的空间参考与输入的矢量文件相同。
- 在输出的矢量文件中创建一个新的图层,并在该图层中添加一个ID字段。
- 在输入的矢量文件的范围内,创建规则的网格。每个网格都是一个多边形,包含四个顶点。每个网格都有一个唯一的ID。
- 将创建的网格添加到输出的矢量文件中。
这个脚本可以作为一个独立的Python脚本运行,也可以作为一个函数在其他的Python脚本中调用。
收获
使用Python的GDAL/OGR库来创建渔网格是一个非常有效和灵活的方法,特别适合需要大量或定期创建渔网格的场景。
通过编写Python脚本,实现了渔网格的自动化创建和批处理,不仅提高了工作效率,也帮助能解决了一些复杂和重复的任务。