如何使用Python中的GDAL库循环写入矢量数据
程序员文章站
2022-12-07 09:12:54
该文章为《如何使用Python中的GDAL库创建矢量文件》后续在《如何使用Python中的GDAL库创建矢量文件》文章中,介绍了利用GDAL库创建点、线、面矢量文件,文章中只介绍了单个数据的创建情况,那么面对有很多个数据时,该怎么创建呢?问题来源:现有一些点坐标,目的是将其构建成一个点矢量文件,直接上代码。单个点数据情况:from osgeo import ogr,osr Longitude = 116.4 Latitude = 39.9 def create_point():...
该文章为《如何使用Python中的GDAL库创建矢量文件》后续
在《如何使用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 ## 关闭数据
多个点数据情况:
from osgeo import ogr,osr
Longitude = [116.41,116.42,116.40,116.45]
Latitude = [39.9,39.92,39.91,39.98]
def create_multipoint():
## 生成点矢量文件 ##
driver = ogr.GetDriverByName("ESRI Shapefile")
data_source = driver.CreateDataSource("MultiPoint.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) ## 创建字段
for i in range(len(Longitude)):
feature = ogr.Feature(layer.GetLayerDefn())
feature.SetField("Name", "point") ## 设置字段值
feature.SetField("Longitude", str(Longitude[i])) ## 设置字段值
feature.SetField("Latitude", str(Latitude[i])) ## 设置字段值
point = ogr.Geometry(ogr.wkbPoint)
point.AddPoint(float(Longitude[i]), float(Latitude[i]))
feature.SetGeometry(point) ## 设置点
layer.CreateFeature(feature) ## 添加点
feature.Destroy() ## 关闭属性
data_source.Destroy() ## 关闭数据
这里,需要注意的是,代码的倒数第二行,feature.Destroy() ## 关闭属性,这一行需要在 for循环 里面,否则,生成的矢量文件将只有最后一个数据。
生成的点,用ArcGIS打开如下:
循环创建线、面文件和点相似,这里就不作介绍了。
本文地址:https://blog.csdn.net/u012569919/article/details/109958418