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)
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)