Beispiel #1
0
    def __init__(self, shp_file, model=None, limit=None):
        items = []

        # Open shapefile and get source SRS.
        sf = ogr.Open(shp_file)
        layer = sf.GetLayer(0)
        layer_srs = layer.GetSpatialRef()

        # Set target srs to 4326 (lat/lon).
        target_srs = ogr.osr.SpatialReference()
        target_srs.ImportFromEPSG(4326)

        # Get fields.
        layer_def = layer.GetLayerDefn()
        field_count = layer_def.GetFieldCount()
        fields = [layer_def.GetFieldDefn(i).GetName() for i in range(field_count)]

        counter = 0
        for feature in layer:
            if counter == limit: break

            if conf.conf['verbose']:
                if (counter % 100) == 0: print >> sys.stderr, "at record #%s" % counter
            obj = model()

            # Get fields.
            feature_fields = {}
            for i in range(field_count): 
                field = fields[i]
                value = feature.GetField(i)
                if hasattr(obj, field):
                    setattr(obj, field, value)

            # Get geometry and reproject.
            if hasattr(obj, 'geom'): 
                ogr_g = feature.GetGeometryRef()
                ogr_g = feature.GetGeometryRef()
                ogr_g.TransformTo(target_srs)

                # We convert each feature into a multipolygon, since
                # we may have a mix of normal polygons and multipolygons.
                geom = shapely.wkb.loads(ogr_g.ExportToWkb())
                if geom.geom_type =='Polygon':
                    geom = shapely.geometry.MultiPolygon([(geom.exterior.coords, geom.interiors )])
                obj.geom = geom.wkt

            items.append(obj)
            counter += 1

        Memory_DAO.__init__(self, items=items)
Beispiel #2
0
    def __init__(self, csv_file, model=None):
        model = model
        if isinstance(csv_file, str):
            csv_file = open(csv_file, 'rb')
        reader = csv.reader(csv_file)
        columns = []
        headers = reader.next()
        for i in range(len(headers)):
            header = headers[i]
            m = re.match('(.*)__(.*)', header)
            if m:
                column_name = m.group(1)
                column_type = m.group(2)
            else:
                column_name = header
                column_type = 'str'

            columns.append({
                'name': column_name,
                'index': i,
                'type': column_type
            })

        items = []
        for row in reader:
            obj = model()
            try:
                for c in columns:
                    if c['type'] == 'geom_wkt':
                        value = shapely.wkt.loads(row[c['index']])
                    elif c['type'] == 'geom_wkb':
                        value = shapely.wkb.loads(row[c['index']])
                    else:
                        value = eval("%s('%s')" % (c['type'], row[c['index']]))
                    setattr(obj, c['name'], value)
                items.append(obj)
            except: continue

        Memory_DAO.__init__(self, items=items)