GDAL几何对象

    技术2022-07-13  74

    几何对象

    创建一个点

    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
    Processed: 0.014, SQL: 9