두 번째로 순수한 GDAL 솔루션으로 질문에 대답하십시오.
첫째, GDAL (Geospatial Data Abstraction Library)은 원래 래스터 지리 공간 데이터 작업을위한 라이브러리 일뿐 아니라 별도의 OGR 라이브러리는 벡터 데이터를 처리하기위한 것입니다. 그러나 두 라이브러리는 이제 부분적으로 병합되며 일반적으로 GDAL의 결합 된 이름으로 다운로드 및 함께 설치됩니다. 따라서 솔루션은 실제로 OGR에 해당합니다. 초기 코드에 이것을 가지고 있으므로 이것을 알고 있다고 생각하지만 팁과 힌트를 검색 할 때 기억하는 것이 중요합니다.
벡터 레이어에서 데이터를 읽으려면 초기 코드가 좋습니다.
from osgeo import ogr
shapefile = ogr.Open(shapefile)
layer = shapefile.GetLayer(0)
for i in range(layer.GetFeatureCount()):
feature = layer.GetFeature(i)
name = feature.GetField("NAME")
geometry = feature.GetGeometryRef()
print i, name, geometry.GetGeometryName()
쉐이프 파일 (또는 다른 벡터 데이터 세트)에 작성하기 전에 새로운 피쳐를 생성해야합니다. 새 형상을 만들려면 먼저 다음이 필요합니다.-형상-필드 정의를 포함 할 형상 정의 형상 생성자 ogr.Geometry ()를 사용하여 빈 형상 객체를 만듭니다. 각 유형 (점, 선, 다각형 등)에 대해 지오메트리가 다른 방식을 정의하십시오. 예를 들어 :
point = ogr.Geometry(ogr.wkbPoint)
point.AddPoint(10,20)
또는
line = ogr.Geometry(ogr.wkbLineString)
line.AddPoint(10,10)
line.AddPoint(20,20)
line.SetPoint(0,30,30) #(10,10) -> (30,30)
필드 정의
fieldDefn = ogr.FieldDefn('id', ogr.OFTInteger)
이제 벡터 레이어를 만들 수 있습니다. 이 경우 정사각형 다각형 :
#create simple square polygon shapefile:
from osgeo import ogr
driver = ogr.GetDriverByName('ESRI Shapefile')
datasource = driver.CreateDataSource('YOUR_PATH')
layer = datasource.CreateLayer('layerName',geom_type=ogr.wkbPolygon)
#create polygon object:
myRing = ogr.Geometry(type=ogr.wkbLinearRing)
myRing.AddPoint(0.0, 0.0) #LowerLeft
myRing.AddPoint(0.0, 10.0) #UpperLeft
myRing.AddPoint(10.0, 10.0) #UpperRight
myRing.AddPoint(10.0, 0.0) #Lower Right
myRing.AddPoint(0.0, 0.0) #close ring
myPoly = ogr.Geometry(type=ogr.wkbPolygon)
myPoly.AddGeometry(myRing)
print ('Polygon area =',myPoly.GetArea()) #returns correct area of 100.0
#create feature object with point geometry type from layer object:
feature = ogr.Feature( layer.GetLayerDefn())
feature.SetGeometry(myPoly)
layer.CreateFeature(feature)
#flush memory - very important
feature.Destroy()
datasource.Destroy()