我们从Python开源项目中,提取了以下9个代码示例,用于说明如何使用osgeo.ogr.OFTString()。
def exporttogeojson(geojsonfilename, buildinglist): # # geojsonname should end with .geojson # building list should be list of dictionaries # list of Dictionaries {'ImageId': image_id, 'BuildingId': building_id, 'polyPix': poly, # 'polyGeo': poly} # image_id is a string, # BuildingId is an integer, # poly is a ogr.Geometry Polygon # # returns geojsonfilename driver = ogr.GetDriverByName('geojson') if os.path.exists(geojsonfilename): driver.DeleteDataSource(geojsonfilename) datasource = driver.CreateDataSource(geojsonfilename) layer = datasource.CreateLayer('buildings', geom_type=ogr.wkbPolygon) field_name = ogr.FieldDefn("ImageId", ogr.OFTString) field_name.SetWidth(75) layer.CreateField(field_name) layer.CreateField(ogr.FieldDefn("BuildingId", ogr.OFTInteger)) # loop through buildings for building in buildinglist: # create feature feature = ogr.Feature(layer.GetLayerDefn()) feature.SetField("ImageId", building['ImageId']) feature.SetField("BuildingId", building['BuildingId']) feature.SetGeometry(building['polyPix']) # Create the feature in the layer (geojson) layer.CreateFeature(feature) # Destroy the feature to free resources feature.Destroy() datasource.Destroy() return geojsonfilename
def buildTindex(rasterFolder, rasterExtention='.tif'): rasterList = glob.glob(os.path.join(rasterFolder, '*{}'.format(rasterExtention))) print(rasterList) print(os.path.join(rasterFolder, '*{}'.format(rasterExtention))) memDriver = ogr.GetDriverByName('MEMORY') gTindex = memDriver.CreateDataSource('gTindex') srcImage = gdal.Open(rasterList[0]) spat_ref = osr.SpatialReference() spat_ref.SetProjection(srcImage.GetProjection()) gTindexLayer = gTindex.CreateLayer("gtindexlayer", spat_ref, geom_type=ogr.wkbPolygon) # Add an ID field idField = ogr.FieldDefn("location", ogr.OFTString) gTindexLayer.CreateField(idField) # Create the feature and set values featureDefn = gTindexLayer.GetLayerDefn() for rasterFile in rasterList: srcImage = gdal.Open(rasterFile) geoTrans, polyToCut, ulX, ulY, lrX, lrY = gT.getRasterExtent(srcImage) feature = ogr.Feature(featureDefn) feature.SetGeometry(polyToCut) feature.SetField("location", rasterFile) gTindexLayer.CreateFeature(feature) feature = None return gTindex, gTindexLayer
def saveToShape(self,array,srs,outShapeFile): # Parse a delimited text file of volcano data and create a shapefile # use a dictionary reader so we can access by field name # set up the shapefile driver outDriver = ogr.GetDriverByName( 'ESRI Shapefile' ) # create the data source if os.path.exists(outShapeFile): outDriver.DeleteDataSource(outShapeFile) # Remove output shapefile if it already exists ds = outDriver.CreateDataSource(outShapeFile) #options = ['SPATIALITE=YES']) # create the spatial reference, WGS84 lyrout = ds.CreateLayer('randomSubset',srs) fields = [array[1].GetFieldDefnRef(i).GetName() for i in range(array[1].GetFieldCount())] for f in fields: field_name = ogr.FieldDefn(f, ogr.OFTString) field_name.SetWidth(24) lyrout.CreateField(field_name) for k in array: lyrout.CreateFeature(k) # Save and close the data source ds = None
def addfield(self, name, type=ogr.OFTString, width=10): fieldDefn = ogr.FieldDefn(name, type) if type == ogr.OFTString: fieldDefn.SetWidth(width) self.layer.CreateField(fieldDefn)
def export_shp_breaklines(self, outshp): from osgeo import ogr # Now convert it to a shapefile with OGR driver = ogr.GetDriverByName('Esri Shapefile') ds = driver.CreateDataSource(outshp) layer = ds.CreateLayer('', None, ogr.wkbLineString25D) # Add one attribute layer.CreateField(ogr.FieldDefn('id', ogr.OFTInteger)) fieldLineType = ogr.FieldDefn('LineType', ogr.OFTString) fieldLineType.SetWidth(4) layer.CreateField(fieldLineType) defn = layer.GetLayerDefn() ## If there are multiple geometries, put the "for" loop here for id, line in self.breaklines.iteritems(): # Create a new feature (attribute and geometry) feat = ogr.Feature(defn) feat.SetField('id', int(id)) feat.SetField('LineType', line['linetype']) # Make a geometry, from Shapely object geom = ogr.CreateGeometryFromWkb(line['geometry'].wkb) feat.SetGeometry(geom) layer.CreateFeature(feat) feat = geom = None # destroy these # Save and close everything ds = layer = feat = geom = None
def geom2shp(geom, out_fn, fields=False): """Write out a new shapefile for input geometry """ from pygeotools.lib import timelib driverName = "ESRI Shapefile" drv = ogr.GetDriverByName(driverName) if os.path.exists(out_fn): drv.DeleteDataSource(out_fn) out_ds = drv.CreateDataSource(out_fn) out_lyrname = os.path.splitext(os.path.split(out_fn)[1])[0] geom_srs = geom.GetSpatialReference() geom_type = geom.GetGeometryType() out_lyr = out_ds.CreateLayer(out_lyrname, geom_srs, geom_type) if fields: field_defn = ogr.FieldDefn("name", ogr.OFTString) field_defn.SetWidth(128) out_lyr.CreateField(field_defn) field_defn = ogr.FieldDefn("path", ogr.OFTString) field_defn.SetWidth(254) out_lyr.CreateField(field_defn) #field_defn = ogr.FieldDefn("date", ogr.OFTString) #This allows sorting by date field_defn = ogr.FieldDefn("date", ogr.OFTInteger) field_defn.SetWidth(32) out_lyr.CreateField(field_defn) field_defn = ogr.FieldDefn("decyear", ogr.OFTReal) field_defn.SetPrecision(8) field_defn.SetWidth(64) out_lyr.CreateField(field_defn) out_feat = ogr.Feature(out_lyr.GetLayerDefn()) out_feat.SetGeometry(geom) if fields: #Hack to force output extesion to tif, since out_fn is shp out_path = os.path.splitext(out_fn)[0] + '.tif' out_feat.SetField("name", os.path.split(out_path)[-1]) out_feat.SetField("path", out_path) #Try to extract a date from input raster fn out_feat_date = timelib.fn_getdatetime(out_fn) if out_feat_date is not None: datestamp = int(out_feat_date.strftime('%Y%m%d')) #out_feat_date = int(out_feat_date.strftime('%Y%m%d%H%M')) out_feat.SetField("date", datestamp) decyear = timelib.dt2decyear(out_feat_date) out_feat.SetField("decyear", decyear) out_lyr.CreateFeature(out_feat) out_ds = None #return status?
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
def get_ogr_feature_attribute(attr, feature): attr_name = attr.name if not feature.IsFieldSet(attr_name): return (True, None) if attr.type == ogr.OFTInteger: value = str(feature.GetFieldAsInteger(attr_name)) elif attr.type == ogr.OFTIntegerList: value = repr(feature.GetFieldAsIntegerList(attr_name)) elif attr.type == ogr.OFTReal: value = feature.GetFieldAsDouble(attr_name) value = "%*.*f" % (attr.width, attr.precision, value) elif attr.type == ogr.OFTRealList: values = feature.GetFieldAsDoubleList(attr_name) str_values = [] for value in values: str_values.append("%*.*f" % (attr.width, attr.precision, value)) value = repr(str_values) elif attr.type == ogr.OFTString: value = feature.GetFieldAsString(attr_name) elif attr.type == ogr.OFTStringList: value = repr(feature.GetFieldAsStringList(attr_name)) elif attr.type == ogr.OFTDate: parts = feature.GetFieldAsDateTime(attr_name) year,month,day,hour,minute,second,tzone = parts value = "%d,%d,%d,%d" % (year,month,day,tzone) elif attr.type == ogr.OFTTime: parts = feature.GetFieldAsDateTime(attr_name) year,month,day,hour,minute,second,tzone = parts value = "%d,%d,%d,%d" % (hour,minute,second,tzone) elif attr.type == ogr.OFTDateTime: parts = feature.GetFieldAsDateTime(attr_name) year,month,day,hour,minute,second,tzone = parts value = "%d,%d,%d,%d,%d,%d,%d,%d" % (year,month,day, hour,minute, second,tzone) else: return (False, "Unsupported attribute type: " + str(attr.type)) return (True, value) #############################################################################
def set_ogr_feature_attribute(attr, value, feature): attr_name = attr.name if value == None: feature.UnsetField(attr_name) return if attr.type == ogr.OFTInteger: feature.SetField(attr_name, int(value)) elif attr.type == ogr.OFTIntegerList: integers = eval(value) feature.SetFieldIntegerList(attr_name, integers) elif attr.type == ogr.OFTReal: feature.SetField(attr_name, float(value)) elif attr.type == ogr.OFTRealList: floats = [] for s in eval(value): floats.append(eval(s)) feature.SetFieldDoubleList(attr_name, floats) elif attr.type == ogr.OFTString: feature.SetField(attr_name, value) elif attr.type == ogr.OFTStringList: strings = [] for s in eval(value): strings.append(s.encode(encoding)) feature.SetFieldStringList(attr_name, strings) elif attr.type == ogr.OFTDate: parts = value.split(",") year = int(parts[0]) month = int(parts[1]) day = int(parts[2]) tzone = int(parts[3]) feature.SetField(attr_name, year, month, day, 0, 0, 0, tzone) elif attr.type == ogr.OFTTime: parts = value.split(",") hour = int(parts[0]) minute = int(parts[1]) second = int(parts[2]) tzone = int(parts[3]) feature.SetField(attr_name, 0, 0, 0, hour, minute, second, tzone) elif attr.type == ogr.OFTDateTime: parts = value.split(",") year = int(parts[0]) month = int(parts[1]) day = int(parts[2]) hour = int(parts[3]) minute = int(parts[4]) second = int(parts[5]) tzone = int(parts[6]) feature.SetField(attr_mame, year, month, day, hour, minute, second, tzone)