GDAL幾何對象

幾何對象

創建一個點

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章