예제 #1
0
파일: ogr2vrt.py 프로젝트: rbuffat/gdal
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
예제 #2
0
파일: connector.py 프로젝트: lidapeng/QGIS
    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
예제 #3
0
파일: init.py 프로젝트: craigds/sno
    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)),
        }
예제 #4
0
파일: init.py 프로젝트: craigds/sno
    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)
예제 #5
0
    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