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()
#**********************************************************************
python类wkbPoint()的实例源码
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 get_idx_as_shp(self, path, gt, wkt):
'''
Exports a Shapefile containing the locations of the extracted
endmembers. Assumes the coordinates are in decimal degrees.
'''
coords = pixel_to_xy(self.get_idx(), gt=gt, wkt=wkt, dd=True)
driver = ogr.GetDriverByName('ESRI Shapefile')
ds = driver.CreateDataSource(path)
srs = osr.SpatialReference()
srs.ImportFromEPSG(4326)
layer = ds.CreateLayer(path.split('.')[0], srs, ogr.wkbPoint)
for pair in coords:
feature = ogr.Feature(layer.GetLayerDefn())
# Create the point from the Well Known Text
point = ogr.CreateGeometryFromWkt('POINT(%f %f)' % pair)
feature.SetGeometry(point) # Set the feature geometry
layer.CreateFeature(feature) # Create the feature in the layer
feature.Destroy() # Destroy the feature to free resources
# Destroy the data source to free resources
ds.Destroy()
def _get_vector_attributes(self,ds,attrs):
logging.debug("[FileMan][_get_vector_attributes]")
layer = ds.GetLayer()
# extent
extent = layer.GetExtent()
logging.debug("[FileMan][_get_vector_attributes] Extent: %s" % repr(extent) )
attrs["extent"] = (extent[0],extent[2],extent[1],extent[3])
# features count
attrs["features_count"] = layer.GetFeatureCount()
# geom type
ftype = layer.GetGeomType()
if ftype == ogr.wkbPolygon: #3
attrs["type"] = "polygon"
elif ftype == ogr.wkbPoint: #1
attrs["type"] = "point"
elif ftype == ogr.wkbLineString: #2
attrs["type"] = "line"
elif ftype == ogr.wkbPolygon25D:
attrs["type"] = "polygon"
else:
attrs["type"] = "none/unknown" # 0 or anything else
# srs
sr = layer.GetSpatialRef()
logging.debug("[FileMan][_get_vector_attributes] Spatial Reference from layer.GetSpatialRef() : %s" % repr(sr) )
if sr:
attrs["prj"]= self._get_prj(sr)
else:
attrs["prj"] = "unknown"
# Done
return attrs
def _check_src(self, src):
""" Basic check of source elements (sequence of points or polygons).
- array cast of source elements
- create ogr_src datasource/layer holding src points/polygons
- transforming source grid points/polygons to ogr.geometries
on ogr.layer
"""
ogr_src = io.gdal_create_dataset('Memory', 'out',
gdal_type=gdal.OF_VECTOR)
try:
# is it ESRI Shapefile?
ds_in, tmp_lyr = io.open_shape(src, driver=ogr.
GetDriverByName('ESRI Shapefile'))
ogr_src_lyr = ogr_src.CopyLayer(tmp_lyr, self._name)
if self._srs is None:
self._srs = ogr_src_lyr.GetSpatialRef()
except IOError:
# no ESRI shape file
raise
# all failed? then it should be sequence or numpy array
except RuntimeError:
src = np.array(src)
# create memory datasource, layer and create features
if src.ndim == 2:
geom_type = ogr.wkbPoint
# no Polygons, just Points
else:
geom_type = ogr.wkbPolygon
fields = [('index', ogr.OFTInteger)]
georef.ogr_create_layer(ogr_src, self._name, srs=self._srs,
geom_type=geom_type, fields=fields)
georef.ogr_add_feature(ogr_src, src, name=self._name)
return ogr_src
def test_ogr_create_layer(self):
ds = gdal_create_dataset('Memory', 'test',
gdal_type=gdal.OF_VECTOR)
self.assertRaises(TypeError,
lambda: georef.ogr_create_layer(ds, 'test'))
lyr = georef.ogr_create_layer(ds, 'test', geom_type=ogr.wkbPoint,
fields=[('test', ogr.OFTReal)])
self.assertTrue(isinstance(lyr, ogr.Layer))
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