0
点赞
收藏
分享

微信扫一扫

GDAL几何对象

后来的六六 2022-01-25 阅读 98
jsonxml.net


几何对象

创建一个点

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



举报

相关推荐

0 条评论