幾何對象
創建一個點
from osgeo import ogr
point = ogr.Geometry(ogr.wkbPoint)
point.AddPoint(1198054.34,648493.09)
print(point.ExportToWkt())
結果:
POINT (1198054.34 648493.09 0)
創建一條線
from osgeo import ogr
line = ogr.Geometry(ogr.wkbLineString)
line.AddPoint(1116651.439,637392.696)
line.AddPoint(1188804.010,652655.740)
line.AddPoint(1281307.307,636467.664)
print(line.ExportToWkt())
結果:
LINESTRING (1116651.439 637392.696 0,1188804.01 652655.74 0,1281307.307 636467.664 0)
創建一個多邊形
from osgeo import ogr
# 創建一個環
ring = ogr.Geometry(ogr.wkbLinearRing)
ring.AddPoint(1179091,712782)
ring.AddPoint(1161053,667456)
ring.AddPoint(1214704,641092)
ring.AddPoint(1228580, 682719)
ring.AddPoint(1218405, 721108)
ring.AddPoint(1179091, 712782)
# 創建多邊形
poly = ogr.Geometry(ogr.wkbPolygon)
poly.AddGeometry(ring)
print(poly.ExportToWkt())
結果:
POLYGON ((1179091 712782 0,1161053 667456 0,1214704 641092 0,1228580 682719 0,1218405 721108 0,1179091 712782 0))
創建一個帶孔的多邊形
from osgeo import ogr
# 創建一個外環
outRing = ogr.Geometry(ogr.wkbLinearRing)
outRing.AddPoint(1154115,686419)
outRing.AddPoint(1154115,653118)
outRing.AddPoint(1165678,653118)
outRing.AddPoint(1165678,686419)
outRing.AddPoint(1154115,686419)
# 創建一個內環
innerRing = ogr.Geometry(ogr.wkbLinearRing)
innerRing = ogr.Geometry(ogr.wkbLinearRing)
innerRing.AddPoint(1149490, 691044)
innerRing.AddPoint(1149490, 648030)
innerRing.AddPoint(1191579, 648030)
innerRing.AddPoint(1191579, 691044)
innerRing.AddPoint(1149490, 691044)
# 創建多邊形
poly = ogr.Geometry(ogr.wkbPolygon)
poly.AddGeometry(outRing)
poly.AddGeometry(innerRing)
print(poly.ExportToWkt())
結果:
POLYGON ((1154115 686419 0,1154115 653118 0,1165678 653118 0,1165678 686419 0,1154115 686419 0),(1149490 691044 0,1149490 648030 0,1191579 648030 0,1191579 691044 0,1149490 691044 0))
創建多個點
from osgeo import ogr
multipoint = ogr.Geometry(ogr.wkbMultiPoint)
point1 = ogr.Geometry(ogr.wkbPoint)
point1.AddPoint(1251243,598078)
multipoint.AddGeometry(point1)
point2 = ogr.Geometry(ogr.wkbPoint)
point2.AddPoint(1240605,601778)
multipoint.AddGeometry(point2)
point3 = ogr.Geometry(ogr.wkbPoint)
point3.AddPoint(1250318, 606404)
multipoint.AddGeometry(point3)
print(multipoint.ExportToWkt())
結果:
MULTIPOINT (1251243 598078 0,1240605 601778 0,1250318 606404 0)
創建多條線
from osgeo import ogr
multiline = ogr.Geometry(ogr.wkbMultiLineString)
line1 = ogr.Geometry(ogr.wkbLineString)
line1.AddPoint(1214242, 617041)
line1.AddPoint(1234593, 629529)
multiline.AddGeometry(line1)
line1 = ogr.Geometry(ogr.wkbLineString)
line1.AddPoint(1184641, 626754)
line1.AddPoint(1219792, 606866)
multiline.AddGeometry(line1)
print(multiline.ExportToWkt())
結果:
MULTILINESTRING ((1214242 617041 0,1234593 629529 0),(1184641 626754 0,1219792 606866 0))
創建多個多邊形
from osgeo import ogr
multipolygon = ogr.Geometry(ogr.wkbMultiPolygon)
# Create ring
ring1 = ogr.Geometry(ogr.wkbLinearRing)
ring1.AddPoint(1204067,634617)
ring1.AddPoint(1204067,620742)
ring1.AddPoint(1215167,620742)
ring1.AddPoint(1215167,634617)
ring1.AddPoint(1204067,634617)
# Create polygon1
poly1 = ogr.Geometry(ogr.wkbPolygon)
poly1.AddGeometry(ring1)
multipolygon.AddGeometry(poly1)
# Create ring
ring2 = ogr.Geometry(ogr.wkbLinearRing)
ring2.AddPoint(1179553, 647105)
ring2.AddPoint(1179553, 626292)
ring2.AddPoint(1194354, 626292)
ring2.AddPoint(1194354, 647105)
ring2.AddPoint(1179553, 647105)
# Create polygon2
poly2 = ogr.Geometry(ogr.wkbPolygon)
poly2.AddGeometry(ring2)
multipolygon.AddGeometry(poly2)
print(multipolygon.ExportToWkt())
結果:
MULTIPOLYGON (((1204067 634617 0,1204067 620742 0,1215167 620742 0,1215167 634617 0,1204067 634617 0)),((1179553 647105 0,1179553 626292 0,1194354 626292 0,1194354 647105 0,1179553 647105 0)))
創建幾何對象集合
from osgeo import ogr
# Create a geometry collection
geomcol = ogr.Geometry(ogr.wkbGeometryCollection)
# Add a point
point = ogr.Geometry(ogr.wkbPoint)
point.AddPoint(-122.23,47.09)
geomcol.AddGeometry(point)
# Add a line
line = ogr.Geometry(ogr.wkbLineString)
line.AddPoint(-122.6,47.14)
line.AddPoint(-122.48,47.23)
geomcol.AddGeometry(line)
print(geomcol.ExportToWkt())
結果:
GEOMETRYCOLLECTION (POINT (-122.23 47.09 0),LINESTRING (-122.6 47.14 0,-122.48 47.23 0))
從WKT中創建幾何對象
from osgeo import ogr
wkt = "POINT(1120351 741921)"
point = ogr.CreateGeometryFromWkt(wkt)
print("%d,%d"%(point.GetX(),point.GetY()))
結果:
1120351,741921
從GeoJSON中創建幾何對象
from osgeo import ogr
geojson = """{"type":"Point","coordinates":[1048420.23,753808.59]}"""
point = ogr.CreateGeometryFromJson(geojson)
print("%.2f,%.2f"%(point.GetX(),point.GetY()))
結果:
1048420.23,753808.59
從GML中創建幾何對象
from osgeo import ogr
gml = """<gml:Point xmlns:gml="http://www.opengis.net/gml"><gml:coordinates>108420.33,753808.59</gml:coordinates></gml:Point>"""
point = ogr.CreateGeometryFromGML(gml)
print("%.2f,%.2f" % (point.GetX(), point.GetY()))
結果:
108420.33,753808.59
從WKB中創建幾何對象
from osgeo import ogr
from base64 import b64decode
wkb = b64decode("AIAAAAFBMkfmVwo9cUEjylouFHrhAAAAAAAAAAA=")
point = ogr.CreateGeometryFromWkb(wkb)
print("%.2f,%.2f" % (point.GetX(), point.GetY()))
結果:
1198054.34,648493.09