如何使用Python中的GDAL库创建矢量文件

继《如何使用Python中的GDAL库对遥感影像进行读取和存储》之后,本文再简单地介绍一下,如何使用Python中的GDAL库创建矢量文件。

这里,矢量文件指的是点、线、面文件,shape格式,可以使用 ArcGIS 等软件读取编辑。

需要用到的Python库依然为GDAL,安装完GDAL后,就可以直接导入使用了。

废话不多说,直接上代码。

创建点文件

from osgeo import ogr,osr

Longitude = 116.4 
Latitude = 39.9

def create_point():
    ## 生成点矢量文件 ##
    driver = ogr.GetDriverByName("ESRI Shapefile")
    data_source = driver.CreateDataSource("Point.shp") ## shp文件名称
    srs = osr.SpatialReference()
    srs.ImportFromEPSG(4326) ## 空间参考:WGS84
    layer = data_source.CreateLayer("Point", srs, ogr.wkbPoint) ## 图层名称要与shp名称一致
    field_name = ogr.FieldDefn("Name", ogr.OFTString) ## 设置属性
    field_name.SetWidth(20)  ## 设置长度
    layer.CreateField(field_name)  ## 创建字段
    field_Longitude = ogr.FieldDefn("Longitude", ogr.OFTReal)  ## 设置属性
    layer.CreateField(field_Longitude)  ## 创建字段
    field_Latitude = ogr.FieldDefn("Latitude", ogr.OFTReal)  ## 设置属性
    layer.CreateField(field_Latitude)  ## 创建字段
    feature = ogr.Feature(layer.GetLayerDefn())
    feature.SetField("Name", "point")  ## 设置字段值
    feature.SetField("Longitude", str(Longitude))  ## 设置字段值
    feature.SetField("Latitude", str(Latitude))  ## 设置字段值
    wkt = "POINT(%f %f)" % (float(Longitude), float(Latitude)) ## 创建点
    point = ogr.CreateGeometryFromWkt(wkt) ## 生成点
    feature.SetGeometry(point)  ## 设置点
    layer.CreateFeature(feature)  ## 添加点
    feature = None ## 关闭属性
    data_source = None ## 关闭数据

这里,点的经纬度坐标,我直接给出了。如果有很多点的话,也可以从文本中读取,然后通过for循环逐一添加到shp文件中。

创建线文件

from osgeo import ogr,osr

def create_line():
    ## 生成线矢量文件 ##
    driver = ogr.GetDriverByName("ESRI Shapefile")
    data_source = driver.CreateDataSource("Line.shp") ## shp文件名称
    srs = osr.SpatialReference()
    srs.ImportFromEPSG(4326) ## 空间参考:WGS84
    layer = data_source.CreateLayer("Line", srs, ogr.wkbLineString) ## 图层名称要与shp名称一致
    field_name = ogr.FieldDefn("Name", ogr.OFTString) ## 设置属性
    field_name.SetWidth(20)  ## 设置长度
    layer.CreateField(field_name)  ## 创建字段
    field_length = ogr.FieldDefn("Length", ogr.OFTReal)  ## 设置属性
    layer.CreateField(field_length)  ## 创建字段
    feature = ogr.Feature(layer.GetLayerDefn())
    feature.SetField("Name", "line")  ## 设置字段值
    feature.SetField("Length", "100")  ## 设置字段值
    wkt = 'LINESTRING(116.4 39.9, 116.42 39.91, 116.39 39.92, 116.38 39.91)' ## 创建线
    line = ogr.CreateGeometryFromWkt(wkt) ## 生成线
    feature.SetGeometry(line)  ## 设置线
    layer.CreateFeature(feature)  ## 添加线
    feature = None ## 关闭属性
    data_source = None ## 关闭数据

线是根据多个点的经纬度绘制出来的。因此,点的经纬度也可以从文本中读取,然后通过for循环逐一添加到shp文件中,形成线文件。注意,字段Length,这里是随便给出的,可以根据实际情况生成。

创建面文件

from osgeo import ogr,osr

def create_polygon():
    ## 生成线矢量文件 ##
    driver = ogr.GetDriverByName("ESRI Shapefile")
    data_source = driver.CreateDataSource("Polygon.shp") ## shp文件名称
    srs = osr.SpatialReference()
    srs.ImportFromEPSG(4326) ## 空间参考:WGS84
    layer = data_source.CreateLayer("Polygon", srs, ogr.wkbPolygon) ## 图层名称要与shp名称一致
    field_name = ogr.FieldDefn("Name", ogr.OFTString) ## 设置属性
    field_name.SetWidth(20)  ## 设置长度
    layer.CreateField(field_name)  ## 创建字段
    field_length = ogr.FieldDefn("Area", ogr.OFTReal)  ## 设置属性
    layer.CreateField(field_length)  ## 创建字段
    feature = ogr.Feature(layer.GetLayerDefn())
    feature.SetField("Name", "polygon")  ## 设置字段值
    feature.SetField("Area", "500")  ## 设置字段值
    wkt = "POLYGON((116.41 39.89, 116.41 39.91, 116.39 39.91, 116.39 39.89))" ## 创建面
    polygon = ogr.CreateGeometryFromWkt(wkt) ## 生成面
    feature.SetGeometry(polygon)  ## 设置面
    layer.CreateFeature(feature)  ## 添加面
    feature = None ## 关闭属性
    data_source = None ## 关闭数据

同样,面也是根据4个点的经纬度绘制出来的,可以根据需要创建多个面。

将创建的点、线、面导入到ArcGIS中显示如下:

如何使用Python中的GDAL库创建矢量文件_第1张图片

总结

总的来说,利用GDAL来创建点、线、面还是比较简单方便快捷的,在实际中也有很多应用,如果遇到应用比较频繁的情况,也可以将这3个代码写成一个类,后续再调用就比较方便啦!

你可能感兴趣的:(遥感,Python,python,gdal,矢量图)