def GeomType2Name(type): flat_type = ogr.GT_Flatten(type) dic = { ogr.wkbUnknown: ('wkbUnknown', '25D'), ogr.wkbPoint: ('wkbPoint', '25D'), ogr.wkbLineString: ('wkbLineString', '25D'), ogr.wkbPolygon: ('wkbPolygon', '25D'), ogr.wkbMultiPoint: ('wkbMultiPoint', '25D'), ogr.wkbMultiLineString: ('wkbMultiLineString', '25D'), ogr.wkbMultiPolygon: ('wkbMultiPolygon', '25D'), ogr.wkbGeometryCollection: ('wkbGeometryCollection', '25D'), ogr.wkbNone: ('wkbNone', ''), ogr.wkbLinearRing: ('wkbLinearRing', ''), ogr.wkbCircularString: ('wkbCircularString', 'Z'), ogr.wkbCompoundCurve: ('wkbCompoundCurve', 'Z'), ogr.wkbCurvePolygon: ('wkbCurvePolygon', 'Z'), ogr.wkbMultiCurve: ('wkbMultiCurve', 'Z'), ogr.wkbMultiSurface: ('wkbMultiSurface', 'Z'), ogr.wkbCurve: ('wkbCurve', 'Z'), ogr.wkbSurface: ('wkbSurface', 'Z'), ogr.wkbPolyhedralSurface: ('wkbPolyhedralSurface', 'Z'), ogr.wkbTIN: ('wkbTIN', 'Z'), ogr.wkbTriangle: ('wkbTriangle', 'Z') } ret = dic[flat_type][0] if flat_type != type: if ogr.GT_HasM(type): if ogr.GT_HasZ(type): ret += "ZM" else: ret += "M" else: ret += dic[flat_type][1] return ret
def getVectorTables(self, schema=None): items = [] for i in range(self.gdal_ds.GetLayerCount()): lyr = self.gdal_ds.GetLayer(i) geomtype = lyr.GetGeomType() if hasattr(ogr, 'GT_Flatten'): geomtype_flatten = ogr.GT_Flatten(geomtype) else: geomtype_flatten = geomtype geomname = ogr.GeometryTypeToName(geomtype_flatten).upper() geomdim = 'XY' if hasattr(ogr, 'GT_HasZ') and ogr.GT_HasZ(lyr.GetGeomType()): geomdim += 'Z' if hasattr(ogr, 'GT_HasM') and ogr.GT_HasM(lyr.GetGeomType()): geomdim += 'M' srs = lyr.GetSpatialRef() srid = None if srs is not None: if srs.IsProjected(): name = srs.GetAttrValue('PROJCS', 0) elif srs.IsGeographic(): name = srs.GetAttrValue('GEOGCS', 0) else: name = None srid = srs.GetAuthorityCode(None) if srid is not None: srid = int(srid) else: srid = self._fetchOne( 'SELECT srid FROM gpkg_spatial_ref_sys WHERE table_name = %s' % self.quoteString(lyr.GetName())) if srid is not None: srid = int(srid) self.mapSridToName[srid] = name if geomtype == ogr.wkbNone: item = list([ Table.TableType, lyr.GetName(), False, # is_view ]) else: item = list([ Table.VectorType, lyr.GetName(), False, # is_view lyr.GetName(), lyr.GetGeometryColumn(), geomname, geomdim, srid ]) items.append(item) return items
def get_meta_geometry_columns(self): if not self.is_spatial: return None ogr_geom_type = self.ogrlayer.GetGeomType() return { "table_name": self.table, "column_name": self.ogrlayer.GetGeometryColumn() or self.geom_cols[0], "geometry_type_name": self._get_meta_geometry_type(), "srs_id": self._get_meta_srid(), "z": int(ogr.GT_HasZ(ogr_geom_type)), "m": int(ogr.GT_HasM(ogr_geom_type)), }
def get_geometry_v2_column_schema(self): from .dataset2 import ColumnSchema if not self.is_spatial: return None name = self.ogrlayer.GetGeometryColumn() or self.geom_cols[0] geometry_type = self._get_meta_geometry_type() ogr_geom_type = self.ogrlayer.GetGeomType() z = "Z" if ogr.GT_HasZ(ogr_geom_type) else "" m = "M" if ogr.GT_HasM(ogr_geom_type) else "" extra_type_info = { "geometryType": f"{geometry_type} {z}{m}".strip(), "geometrySRS": f"EPSG:{self._get_meta_srid()}", } return ColumnSchema(ColumnSchema.new_id(), name, "geometry", None, **extra_type_info)
def get_geometry_v2_column_schema(self): if not self.is_spatial: return None name = self.ogrlayer.GetGeometryColumn() or self.geom_cols[0] geometry_type = self._get_meta_geometry_type() ogr_geom_type = self.ogrlayer.GetGeomType() z = "Z" if ogr.GT_HasZ(ogr_geom_type) else "" m = "M" if ogr.GT_HasM(ogr_geom_type) else "" extra_type_info = { "geometryType": f"{geometry_type} {z}{m}".strip(), } crs_definitions = list(self.crs_definitions()) if crs_definitions: extra_type_info["geometryCRS"] = crs_definitions[0][0] return ColumnSchema(ColumnSchema.new_id(), name, "geometry", None, **extra_type_info)
def getVectorTables(self, schema=None): items = [] for i in range(self.gdal_ds.GetLayerCount()): lyr = self.gdal_ds.GetLayer(i) geomtype = lyr.GetGeomType() if hasattr(ogr, 'GT_Flatten'): geomtype_flatten = ogr.GT_Flatten(geomtype) else: geomtype_flatten = geomtype geomname = 'GEOMETRY' if geomtype_flatten == ogr.wkbPoint: geomname = 'POINT' elif geomtype_flatten == ogr.wkbLineString: geomname = 'LINESTRING' elif geomtype_flatten == ogr.wkbPolygon: geomname = 'POLYGON' elif geomtype_flatten == ogr.wkbMultiPoint: geomname = 'MULTIPOINT' elif geomtype_flatten == ogr.wkbMultiLineString: geomname = 'MULTILINESTRING' elif geomtype_flatten == ogr.wkbMultiPolygon: geomname = 'MULTIPOLYGON' elif geomtype_flatten == ogr.wkbGeometryCollection: geomname = 'GEOMETRYCOLLECTION' elif geomtype_flatten == ogr.wkbCircularString: geomname = 'CIRCULARSTRING' elif geomtype_flatten == ogr.wkbCompoundCurve: geomname = 'COMPOUNDCURVE' elif geomtype_flatten == ogr.wkbCurvePolygon: geomname = 'CURVEPOLYGON' elif geomtype_flatten == ogr.wkbMultiCurve: geomname = 'MULTICURVE' elif geomtype_flatten == ogr.wkbMultiSurface: geomname = 'MULTISURFACE' geomdim = 'XY' if hasattr(ogr, 'GT_HasZ') and ogr.GT_HasZ(lyr.GetGeomType()): geomdim += 'Z' if hasattr(ogr, 'GT_HasM') and ogr.GT_HasM(lyr.GetGeomType()): geomdim += 'M' srs = lyr.GetSpatialRef() srid = None if srs is not None: if srs.IsProjected(): name = srs.GetAttrValue('PROJCS', 0) elif srs.IsGeographic(): name = srs.GetAttrValue('GEOGCS', 0) else: name = None srid = srs.GetAuthorityCode(None) if srid is not None: srid = int(srid) else: srid = self._fetchOne( 'SELECT srid FROM gpkg_spatial_ref_sys WHERE table_name = %s' % self.quoteString(lyr.GetName())) if srid is not None: srid = int(srid) self.mapSridToName[srid] = name if geomtype == ogr.wkbNone: item = list([ Table.TableType, lyr.GetName(), False, # is_view ]) else: item = list([ Table.VectorType, lyr.GetName(), False, # is_view lyr.GetName(), lyr.GetGeometryColumn(), geomname, geomdim, srid ]) items.append(item) return items