我们从Python开源项目中,提取了以下6个代码示例,用于说明如何使用osgeo.ogr.wkbMultiPolygon()。
def SetZ (poGeom, dfZ ): if poGeom is None: return eGType = wkbFlatten(poGeom.GetGeometryType()) if eGType == ogr.wkbPoint: poGeom.SetPoint(0, poGeom.GetX(), poGeom.GetY(), dfZ) elif eGType == ogr.wkbLineString or \ eGType == ogr.wkbLinearRing: for i in range(poGeom.GetPointCount()): poGeom.SetPoint(i, poGeom.GetX(i), poGeom.GetY(i), dfZ) elif eGType == ogr.wkbPolygon or \ eGType == ogr.wkbMultiPoint or \ eGType == ogr.wkbMultiLineString or \ eGType == ogr.wkbMultiPolygon or \ eGType == ogr.wkbGeometryCollection: for i in range(poGeom.GetGeometryCount()): SetZ(poGeom.GetGeometryRef(i), dfZ) #********************************************************************** # SetupTargetLayer() #**********************************************************************
def SetZ (poGeom, dfZ ): if poGeom is None: return eGType = wkbFlatten(poGeom.GetGeometryType()) if eGType == ogr.wkbPoint: poGeom.SetPoint(0, poGeom.GetX(), poGeom.GetY(), dfZ) elif eGType == ogr.wkbLineString or \ eGType == ogr.wkbLinearRing: for i in range(poGeom.GetPointCount()): poGeom.SetPoint(i, poGeom.GetX(i), poGeom.GetY(i), dfZ) elif eGType == ogr.wkbPolygon or \ eGType == ogr.wkbMultiPoint or \ eGType == ogr.wkbMultiLineString or \ eGType == ogr.wkbMultiPolygon or \ eGType == ogr.wkbGeometryCollection: for i in range(poGeom.GetGeometryCount()): SetZ(poGeom.GetGeometryRef(i), dfZ) #/************************************************************************/ #/* SetupTargetLayer() */ #/************************************************************************/
def DumpReadableGeometry( poGeometry, pszPrefix, options ): if pszPrefix == None: pszPrefix = "" if 'DISPLAY_GEOMETRY' in options and EQUAL(options['DISPLAY_GEOMETRY'], 'SUMMARY'): line = ("%s%s : " % (pszPrefix, poGeometry.GetGeometryName() )) eType = poGeometry.GetGeometryType() if eType == ogr.wkbLineString or eType == ogr.wkbLineString25D: line = line + ("%d points" % poGeometry.GetPointCount()) print(line) elif eType == ogr.wkbPolygon or eType == ogr.wkbPolygon25D: nRings = poGeometry.GetGeometryCount() if nRings == 0: line = line + "empty" else: poRing = poGeometry.GetGeometryRef(0) line = line + ("%d points" % poRing.GetPointCount()) if nRings > 1: line = line + (", %d inner rings (" % (nRings - 1)) for ir in range(0,nRings-1): if ir > 0: line = line + ", " poRing = poGeometry.GetGeometryRef(ir+1) line = line + ("%d points" % poRing.GetPointCount()) line = line + ")" print(line) elif eType == ogr.wkbMultiPoint or \ eType == ogr.wkbMultiPoint25D or \ eType == ogr.wkbMultiLineString or \ eType == ogr.wkbMultiLineString25D or \ eType == ogr.wkbMultiPolygon or \ eType == ogr.wkbMultiPolygon25D or \ eType == ogr.wkbGeometryCollection or \ eType == ogr.wkbGeometryCollection25D: line = line + "%d geometries:" % poGeometry.GetGeometryCount() print(line) for ig in range(poGeometry.GetGeometryCount()): subgeom = poGeometry.GetGeometryRef(ig) from sys import version_info if version_info >= (3,0,0): exec('print("", end=" ")') else: exec('print "", ') DumpReadableGeometry( subgeom, pszPrefix, options) else: print(line) elif 'DISPLAY_GEOMETRY' not in options or EQUAL(options['DISPLAY_GEOMETRY'], 'yes') \ or EQUAL(options['DISPLAY_GEOMETRY'], 'WKT'): print("%s%s" % (pszPrefix, poGeometry.ExportToWkt() )) return
def LoadGeometry( pszDS, pszSQL, pszLyr, pszWhere): poGeom = None poDS = ogr.Open( pszDS, False ) if poDS is None: return None if pszSQL is not None: poLyr = poDS.ExecuteSQL( pszSQL, None, None ) elif pszLyr is not None: poLyr = poDS.GetLayerByName(pszLyr) else: poLyr = poDS.GetLayer(0) if poLyr is None: print("Failed to identify source layer from datasource.") poDS.Destroy() return None if pszWhere is not None: poLyr.SetAttributeFilter(pszWhere) poFeat = poLyr.GetNextFeature() while poFeat is not None: poSrcGeom = poFeat.GetGeometryRef() if poSrcGeom is not None: eType = wkbFlatten(poSrcGeom.GetGeometryType()) if poGeom is None: poGeom = ogr.Geometry( ogr.wkbMultiPolygon ) if eType == ogr.wkbPolygon: poGeom.AddGeometry( poSrcGeom ) elif eType == ogr.wkbMultiPolygon: for iGeom in range(poSrcGeom.GetGeometryCount()): poGeom.AddGeometry(poSrcGeom.GetGeometryRef(iGeom) ) else: print("ERROR: Geometry not of polygon type." ) if pszSQL is not None: poDS.ReleaseResultSet( poLyr ) poDS.Destroy() return None poFeat = poLyr.GetNextFeature() if pszSQL is not None: poDS.ReleaseResultSet( poLyr ) poDS.Destroy() return poGeom
def _create_layer(self, type, srid, attributes, title): """ Creates an empty spatialite layer :param type: 'Point', 'LineString', 'Polygon', etc. :param srid: CRS ID of the layer :param attributes: list of (attribute_name, attribute_type, attribute_typename) :param title: title of the layer """ driver = ogr.GetDriverByName('GPKG') ds = driver.CreateDataSource(self.output_local_file) layer = ds.CreateLayer("meta", geom_type = ogr.wkbNone) layer.CreateField(ogr.FieldDefn('key', ogr.OFTString)) layer.CreateField(ogr.FieldDefn('value', ogr.OFTString)) if srid: wkbType = { 'point': ogr.wkbPoint, 'multipoint': ogr.wkbMultiPoint, 'linestring': ogr.wkbLineString, 'multilinestring': ogr.wkbMultiLineString, 'polygon': ogr.wkbPolygon, 'multipolygon': ogr.wkbMultiPolygon }[type] srs = osr.SpatialReference() srs.ImportFromEPSGA(int(srid)) else: wkbType = ogr.wkbNone srs = None layer = ds.CreateLayer("data", srs, wkbType, ['FID=id']) layer.CreateField(ogr.FieldDefn('id', ogr.OFTInteger64)) layer.CreateField(ogr.FieldDefn('fid', ogr.OFTString)) layer.CreateField(ogr.FieldDefn('_xml_', ogr.OFTString)) att_type_map = {QVariant.String : ogr.OFTString, QVariant.Int : ogr.OFTInteger, QVariant.Double: ogr.OFTReal, QVariant.DateTime: ogr.OFTDateTime} for aname, atype in attributes: layer.CreateField(ogr.FieldDefn(aname, att_type_map[atype])) # update fields layer.ResetReading() qgs_layer = QgsVectorLayer("{}|layername=data".format(self.output_local_file), title, "ogr") return qgs_layer