1.创建矢量数据
EPSG:[https://epsg.io/]
(1)创建点数据
from osgeo import ogr, osr
import os
def create_point_shp(path, file, coordinates, x, y):
'''
创建矢量点数据
:param path: file所在文件夹
:param file: 文件名
:param coordinates: 空间参考:EPSG(例如:4326表示WGS84,可在"https://epsg.io/"查找)
:param x:x轴坐标
:param y:y轴坐标
:return:
'''
driver = ogr.GetDriverByName("ESRI Shapefile")
data_source = driver.CreateDataSource(os.path.join(path, file))
srs = osr.SpatialReference()
srs.ImportFromEPSG(coordinates)
layer = data_source.CreateLayer(file[:-4], srs, ogr.wkbPoint)
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(x))
feature.SetField("Latitude", str(y))
wkt = "POINT(%f %f)" % (float(x), float(y))
point = ogr.CreateGeometryFromWkt(wkt)
feature.SetGeometry(point)
layer.CreateFeature(feature)
feature = None
data_source = None
if __name__ == "__name__":
create_point_shp("./data", "points.shp", 4326, 113, 40.9)
(2)创建线数据
from osgeo import ogr,osr
def create_line():
driver = ogr.GetDriverByName("ESRI Shapefile")
data_source = driver.CreateDataSource("Line.shp")
srs = osr.SpatialReference()
srs.ImportFromEPSG(4326)
layer = data_source.CreateLayer("Line", srs, ogr.wkbLineString)
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
(3)创建面数据
from osgeo import ogr,osr
def create_polygon():
driver = ogr.GetDriverByName("ESRI Shapefile")
data_source = driver.CreateDataSource("Polygon.shp")
srs = osr.SpatialReference()
srs.ImportFromEPSG(4326)
layer = data_source.CreateLayer("Polygon", srs, ogr.wkbPolygon)
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