def process(parsed, target, temp_metatile, temp_processed, save_offsetx, save_offsety, save_xsize, save_ysize, nodata, ot, *args, **kwargs): scale = parsed.s zfactor = parsed.z altitude = parsed.alt process_hillshade = "gdaldem hillshade -s %s -z %s -alt %s %s -of GTiff %s > /dev/null" %(scale, zfactor, altitude, temp_metatile, temp_processed) os.system(process_hillshade) nodata = 0 ot = "-ot Byte" # open in numpy _, gt, _, nodata, array_numpy = numpy_read(temp_processed) processed_numpy = ndimage.median_filter(array_numpy, size=3) numpy_save(processed_numpy, target, save_offsetx, save_offsety, save_xsize, save_ysize, gt, nodata, ot)
def process(parsed, target, temp_metatile, temp_processed, save_offsetx, save_offsety, save_xsize, save_ysize, nodata, ot, *args, **kwargs): scale = parsed.s process_slopeshade = "gdaldem slope -s %s %s -of GTiff %s > /dev/null" %(scale, temp_metatile, temp_processed) os.system(process_slopeshade) nodata = 0 ot = "-ot Byte" _, gt, _, nodata, array_numpy = numpy_read(temp_processed) array_numpy[array_numpy==nodata] = 0 # convert to 8 bit and invert values array_numpy = -(array_numpy.astype(numpy.uint8)-255) array_numpy[array_numpy==0] = 255 #print array_numpy.shape processed_numpy = array_numpy #print processed_numpy[1][3] numpy_save(processed_numpy, target, save_offsetx, save_offsety, save_xsize, save_ysize, gt, nodata, ot)
def process(parsed, target, temp_metatile, temp_processed, save_offsetx, save_offsety, save_xsize, save_ysize, nodata, ot, *args, **kwargs): scale = parsed.s process_slopeshade = "gdaldem slope -s %s %s -of GTiff %s > /dev/null" % ( scale, temp_metatile, temp_processed) os.system(process_slopeshade) nodata = 0 ot = "-ot Byte" _, gt, _, nodata, array_numpy = numpy_read(temp_processed) array_numpy[array_numpy == nodata] = 0 # convert to 8 bit and invert values array_numpy = -(array_numpy.astype(numpy.uint8) - 255) array_numpy[array_numpy == 0] = 255 #print array_numpy.shape processed_numpy = array_numpy #print processed_numpy[1][3] numpy_save(processed_numpy, target, save_offsetx, save_offsety, save_xsize, save_ysize, gt, nodata, ot)
def process(parsed, target, temp_metatile, temp_processed, save_offsetx, save_offsety, save_xsize, save_ysize, nodata, ot, *args, **kwargs): _, gt, _, nodata, array_numpy = numpy_read(temp_metatile) #target_db = target.split(".")[0] + ".sqlite" targetdb = "geodata" dbuser = "******" targettable = str(parsed.table) median = int(parsed.median) # geotransform values for tile xmin = gt[0] + (save_offsetx * gt[1]) xmax = gt[0] + ((save_offsetx + save_xsize) * gt[1]) ymin = gt[3] + ((save_offsety + save_ysize) * gt[5]) ymax = gt[3] + (save_offsety * gt[5]) # geotransform values for metatile save_offsetx = 0 save_offsety = 0 save_xsize = array_numpy.shape[1] save_ysize = array_numpy.shape[0] # reclassify ''' 11: cropland 14: cropland 20: cropland 30: forest 40: forest 50: forest 60: forest 70: forest 90: forest 100: forest 110: shrubland 120: shrubland 130: shrubland 140: shrubland 150: shrubland 160: forest 170: forest 180: grassland 190: sealed 200: bare 210: water 220: ice 230: nodata ''' ''' nodata: 0 cropland: 1 forest: 2 shrubland: 3 grassland: 4 sealed: 5 bare: 6 water: 7 ice: 8 ''' # vectorize (smooth edges) # smooth # reclassify ############ classification = { 11:1, 14:1, 20:1, 30:2, 40:2, 50:2, 60:2, 70:2, 90:2, 100:2, 110:3, 120:3, 130:3, 140:3, 150:3, 160:2, 170:2, 180:4, 190:5, 200:6, 210:7, 220:8#, #230:0 } temp_numpy = numpy.zeros((array_numpy.shape[0], array_numpy.shape[1])) for c in classification: idx = (array_numpy == c).nonzero() temp_numpy[idx] = classification[c] # median filter ############### processed_numpy = ndimage.median_filter(temp_numpy, size=median) #create Memory driver src_ds = gdal.Open( temp_metatile ) format = "MEM" driver = gdal.GetDriverByName( format ) mem_ds = driver.CreateCopy('', src_ds ) # write filtered numpy array to GDAL band gdal_array.BandWriteArray(mem_ds.GetRasterBand(1), processed_numpy) mem_ds.GetRasterBand(1).WriteArray(processed_numpy) drv = ogr.GetDriverByName( 'Memory' ) ogr_ds = drv.CreateDataSource('out') ogr_lyr = ogr_ds.CreateLayer('landcover') fieldname = 'type' field_defn = ogr.FieldDefn( fieldname, ogr.OFTInteger ) ogr_lyr.CreateField(field_defn) ogr_field = ogr_lyr.GetLayerDefn().GetFieldIndex(fieldname) ogr_field = 0 maskband = None gdal.Polygonize(mem_ds.GetRasterBand(1), maskband, ogr_lyr, ogr_field, []) # clip to tile boundary ####################### ring = ogr.Geometry(ogr.wkbLinearRing) ring.AddPoint(xmin, ymin) ring.AddPoint(xmin, ymax) ring.AddPoint(xmax, ymax) ring.AddPoint(xmax, ymin) ring.AddPoint(xmin, ymin) clipbox = ogr.Geometry(ogr.wkbPolygon) clipbox.AddGeometry(ring) cliplayer = ogr_ds.CreateLayer('clipbox', geom_type=ogr.wkbPolygon) clipfeaturedefn = cliplayer.GetLayerDefn() clipfeature = ogr.Feature(clipfeaturedefn) clipfeature.SetGeometry(clipbox) cliplayer.CreateFeature(clipfeature) clipped = ogr_ds.CreateLayer('landcover_clipped', geom_type=ogr.wkbMultiPolygon) #clipped.ForceToMultiLineString() field_defn = ogr.FieldDefn('ID', ogr.OFTInteger) clipped.CreateField(field_defn) field_defn = ogr.FieldDefn('type', ogr.OFTInteger) clipped.CreateField(field_defn) ogr_lyr.Clip(cliplayer, clipped) connection = psycopg2.connect(database = targetdb, user = dbuser) # psql -d geodata -c "DROP TABLE landcover; CREATE TABLE landcover (id bigserial primary key, typeid double precision, type text); SELECT AddGeometryColumn ('','landcover','the_geom',4326,'MULTIPOLYGON',2);" cursor = connection.cursor() for i in range(clipped.GetFeatureCount()): insert = True feature = clipped.GetFeature(i) geometry = feature.GetGeometryRef() #print geometry.GetGeometryName() if geometry.GetGeometryName() in ("POLYGON", "MULTIPOLYGON") : continue #print "polygon" if geometry.GetGeometryName() == "GEOMETRYCOLLECTION" : geometry_new = ogr.Geometry(ogr.wkbMultiLineString) for i in xrange(geometry.GetGeometryCount()): g = geometry.GetGeometryRef(i) if g.GetGeometryName() in ("POLYGON", "MULTIPOLYGON") : #print "geometrycollection polygon" geometry_new.AddGeometry(g.Clone()) else: print g.GetGeometryName() geometry = geometry_new if geometry.GetGeometryName() in ("LINESTRING", "MULTILINESTRING", "POINT", "MULTIPOINT") : insert = False if insert: lctype = feature.GetField("type") geometry.SetCoordinateDimension(2) wkt = geometry.ExportToWkt() cursor.execute("INSERT INTO " + targettable + " (type,the_geom) VALUES (%s, ST_Multi(ST_GeomFromText(%s, " +"4326)))", (lctype, wkt)) connection.commit() ogr_ds.Destroy() processed_numpy = [] mem_ds = None #numpy_save(processed_numpy, target, save_offsetx, save_offsety, save_xsize, save_ysize, gt, nodata, ot) #processed_numpy = array_numpy #print "save processed_numpy" #print str(processed_numpy.shape[0]) + " " + str(processed_numpy.shape[1]) cursor.close() connection.close()
def process(parsed, target, temp_metatile, temp_processed, save_offsetx, save_offsety, save_xsize, save_ysize, nodata, ot, *args, **kwargs): temp_voids = tempfile.mktemp() + ".geojson" #"tmp_voids_%s.geojson" % os.getpid() with open(temp_voids, "w+"): pass temp_voids_raster = tempfile.mktemp() #"/tmp/tmp_voids_raster_%s.tif" % os.getpid() with open(temp_voids_raster, "w+"): pass temp_secondary = tempfile.mktemp() #"/tmp/tmp_secondary_%s" % os.getpid() with open(temp_voids, "w+"): pass void_mask = parsed.voids secondary_source = parsed.secondary tertiary_source = parsed.tertiary landmask = parsed.landmask nodata = 0 ot = "-ot Int16" # read primary data _, gt, _, nodata, primary_dem = numpy_read(temp_metatile) # TODO check if valid ulx, llx = gt[0], gt[0] uly, ury = gt[3], gt[3] urx, lrx = ulx + (gt[1] * primary_dem.shape[1]), ulx + (gt[1] * primary_dem.shape[1]) lly, lry = uly + (gt[5] * primary_dem.shape[0]), uly + (gt[5] * primary_dem.shape[0]) # read secondary clip_secondary = "gdal_translate -projwin %s %s %s %s %s %s" %(ulx, uly, lrx, lry, secondary_source, temp_secondary) print "%s: clipping secondary DEM" %(target) os.system(clip_secondary) _, gt, _, nodata, secondary_dem = numpy_read(temp_secondary) # clip void mask os.remove(temp_voids) clip_void_mask = "ogr2ogr -overwrite -f 'GeoJSON' %s %s -clipsrc %s %s %s %s" %(temp_voids, void_mask, llx, lly, urx, ury) print "%s: clipping void mask" %(target) os.system(clip_void_mask) # rasterize void mask rasterize_void_mask = "gdal_rasterize -burn 1 -i -te %s %s %s %s -tr %s %s -ot Byte %s %s" %(llx, lly, urx, ury, gt[1], -gt[5], temp_voids, temp_voids_raster) print "%s: rasterize void mask" %(target) os.system(rasterize_void_mask) _, gt, _, nodata, void_mask_raster = numpy_read(temp_voids_raster) ## numpy_read # fill gaps by overlaying numpy arrays # http://stackoverflow.com/questions/19817955/overlay-part-of-the-matrix-on-top-of-another processed_numpy = numpy.where(void_mask_raster != 0, primary_dem, secondary_dem) # clean up os.remove(temp_voids) os.remove(temp_voids_raster) os.remove(temp_secondary) if landmask: # read mask to numpy temp_landmask = tempfile.mktemp() #"/tmp/tmp_voids_raster_%s.tif" % os.getpid() with open(temp_landmask, "w+"): pass clip_landmask = "gdal_translate -projwin %s %s %s %s %s %s" %(ulx, uly, lrx, lry, landmask, temp_landmask) print clip_landmask os.system(clip_landmask) _, gt, _, nodata, numpy_landmask = numpy_read(temp_landmask) os.remove(temp_landmask) processed_numpy = numpy.where(numpy_landmask == 1, processed_numpy, 0) numpy_save(processed_numpy, target, save_offsetx, save_offsety, save_xsize, save_ysize, gt, nodata, ot)
def process(parsed, target, temp_metatile, temp_processed, save_offsetx, save_offsety, save_xsize, save_ysize, nodata, ot, *args, **kwargs): #target_db = target.split(".")[0] + ".sqlite" targetdb = "geodata" dbuser = "******" targettable = str(parsed.table) elevation = int(parsed.elevation) median = int(parsed.median) glacier_mask = parsed.glacier_mask nodata = 0 #print "read temp_metatile" _, gt, _, nodata, array_numpy = numpy_read(temp_metatile) processed_numpy = ndimage.median_filter(array_numpy, size=median) #processed_numpy = array_numpy #print "save processed_numpy" #print str(processed_numpy.shape[0]) + " " + str(processed_numpy.shape[1]) # geotransform values for tile xmin = gt[0] + (save_offsetx * gt[1]) xmax = gt[0] + ((save_offsetx + save_xsize) * gt[1]) ymin = gt[3] + ((save_offsety + save_ysize) * gt[5]) ymax = gt[3] + (save_offsety * gt[5]) # geotransform values for metatile save_offsetx = 0 save_offsety = 0 save_xsize = processed_numpy.shape[1] save_ysize = processed_numpy.shape[0] # create contours from processed_numpy ds = gdal.Open(temp_metatile) drv = ogr.GetDriverByName( 'Memory' ) ogr_ds = drv.CreateDataSource('out') #ogr_ds = ogr.GetDriverByName('ESRI Shapefile').CreateDataSource('contours_ogr/contour.shp') ogr_lyr = ogr_ds.CreateLayer('contour', geom_type = ogr.wkbMultiLineString) field_defn = ogr.FieldDefn('ID', ogr.OFTInteger) ogr_lyr.CreateField(field_defn) field_defn = ogr.FieldDefn('elev', ogr.OFTReal) ogr_lyr.CreateField(field_defn) #create Memory driver src_ds = gdal.Open( temp_metatile ) format = "MEM" driver = gdal.GetDriverByName( format ) mem_ds = driver.CreateCopy('', src_ds ) # write filtered numpy array to GDAL band gdal_array.BandWriteArray(mem_ds.GetRasterBand(1), processed_numpy) mem_ds.GetRasterBand(1).WriteArray(processed_numpy) # write contours to OGR layer gdal.ContourGenerate(mem_ds.GetRasterBand(1), elevation, 0, [], 0, 0, ogr_lyr, 0, 1) # convert 3D geometries to 2D for i in range(ogr_lyr.GetFeatureCount()): feature = ogr_lyr.GetFeature(i) geometry = feature.GetGeometryRef() geometry.SetCoordinateDimension(2) # clip to tile boundary ring = ogr.Geometry(ogr.wkbLinearRing) ring.AddPoint(xmin, ymin) ring.AddPoint(xmin, ymax) ring.AddPoint(xmax, ymax) ring.AddPoint(xmax, ymin) ring.AddPoint(xmin, ymin) clipbox = ogr.Geometry(ogr.wkbPolygon) clipbox.AddGeometry(ring) cliplayer = ogr_ds.CreateLayer('clipbox', geom_type=ogr.wkbPolygon) clipfeaturedefn = cliplayer.GetLayerDefn() clipfeature = ogr.Feature(clipfeaturedefn) clipfeature.SetGeometry(clipbox) cliplayer.CreateFeature(clipfeature) clipped = ogr_ds.CreateLayer('contour_clipped', geom_type=ogr.wkbMultiLineString) #clipped.ForceToMultiLineString() field_defn = ogr.FieldDefn('ID', ogr.OFTInteger) clipped.CreateField(field_defn) field_defn = ogr.FieldDefn('elev', ogr.OFTReal) clipped.CreateField(field_defn) ogr_lyr.Clip(cliplayer, clipped) # PostGIS connection #connection = db.connect('contours.sqlite') connection = psycopg2.connect(database = targetdb, user = dbuser) # psql -d geodata -c "DROP TABLE contours; CREATE TABLE contours (id bigserial primary key, elev double precision, type text); SELECT AddGeometryColumn ('','contours','the_geom',4326,'MULTILINESTRING',2);" cursor = connection.cursor() if glacier_mask: # read glacier_mask shapefile = glacier_mask driver = ogr.GetDriverByName("ESRI Shapefile") dataSource = driver.Open(shapefile, 0) glacier_layer = dataSource.GetLayer() glacier_layer_clipped = ogr_ds.CreateLayer('glacier_clipped', geom_type=ogr.wkbPolygon) glacier_layer.Clip(cliplayer, glacier_layer_clipped) #print "processing land contours" # clip & save land contours land_clipped = ogr_ds.CreateLayer('contour_clipped', geom_type=ogr.wkbMultiLineString) field_defn = ogr.FieldDefn('ID', ogr.OFTInteger) land_clipped.CreateField(field_defn) field_defn = ogr.FieldDefn('elev', ogr.OFTReal) land_clipped.CreateField(field_defn) if glacier_layer_clipped.GetFeatureCount() == 0: land_clipped = clipped else: # create inverse clip inverse_clip = ogr_ds.CreateLayer('inverse_clip', geom_type=ogr.wkbPolygon) cliplayer.Erase(glacier_layer_clipped, inverse_clip) clipped.Clip(inverse_clip, land_clipped) contour_type = "land" for i in range(land_clipped.GetFeatureCount()): feature = land_clipped.GetFeature(i) geometry = feature.GetGeometryRef() # hack removing loose points from geometry if geometry.GetGeometryName() in ("POINT", "MULTIPOINT") : continue if geometry.GetGeometryName() == "GEOMETRYCOLLECTION" : geometry_new = ogr.Geometry(ogr.wkbMultiLineString) for i in xrange(geometry.GetGeometryCount()): g = geometry.GetGeometryRef(i) if g.GetGeometryName() == "LINESTRING" : geometry_new.AddGeometry(g.Clone()) geometry = geometry_new elev = feature.GetField("elev") geometry.SetCoordinateDimension(2) wkt = geometry.ExportToWkt() cursor.execute("INSERT INTO " + targettable + " (elev,the_geom,type) VALUES (%s, ST_Multi(ST_GeomFromText(%s, " +"4326)), %s)", (elev, wkt, contour_type)) connection.commit() #print "processing glacier contours" # clip & save glacier contours glacier_clipped = ogr_ds.CreateLayer('glacier_clipped', geom_type=ogr.wkbMultiLineString) field_defn = ogr.FieldDefn('ID', ogr.OFTInteger) glacier_clipped.CreateField(field_defn) field_defn = ogr.FieldDefn('elev', ogr.OFTReal) glacier_clipped.CreateField(field_defn) clipped.Clip(glacier_layer_clipped, glacier_clipped) contour_type = "glaciated" for i in range(glacier_clipped.GetFeatureCount()): feature = glacier_clipped.GetFeature(i) geometry = feature.GetGeometryRef() # hack removing loose points from geometry if geometry.GetGeometryName() in ("POINT", "MULTIPOINT") : continue if geometry.GetGeometryName() == "GEOMETRYCOLLECTION" : geometry_new = ogr.Geometry(ogr.wkbMultiLineString) for i in xrange(geometry.GetGeometryCount()): g = geometry.GetGeometryRef(i) if g.GetGeometryName() == "LINESTRING" : geometry_new.AddGeometry(g.Clone()) geometry = geometry_new elev = feature.GetField("elev") geometry.SetCoordinateDimension(2) wkt = geometry.ExportToWkt() cursor.execute("INSERT INTO " + targettable + " (elev,the_geom,type) VALUES (%s, ST_Multi(ST_GeomFromText(%s, " +"4326)), %s)",(elev, wkt, contour_type)) connection.commit() else: # save to POSTGIS for i in range(clipped.GetFeatureCount()): feature = clipped.GetFeature(i) geometry = feature.GetGeometryRef() # hack removing loose points from geometry if geometry.GetGeometryName() in ("POINT", "MULTIPOINT") : continue if geometry.GetGeometryName() == "GEOMETRYCOLLECTION" : geometry_new = ogr.Geometry(ogr.wkbMultiLineString) for i in xrange(geometry.GetGeometryCount()): g = geometry.GetGeometryRef(i) if g.GetGeometryName() == "LINESTRING" : geometry_new.AddGeometry(g.Clone()) geometry = geometry_new elev = feature.GetField("elev") #feature_geometry = ogr.ForceToMultiLineString(feature.GetGeometryRef()) geometry.SetCoordinateDimension(2) wkt = geometry.ExportToWkt() cursor.execute("INSERT INTO " + targettable + " (elev,the_geom) VALUES (%s, ST_Multi(ST_GeomFromText(%s, " +"4326)))", (elev, wkt)) connection.commit() ogr_ds.Destroy() processed_numpy = [] mem_ds = None #os.remove(target) #os.remove(temp_target) cursor.close() connection.close()
def process(parsed, target, temp_metatile, temp_processed, save_offsetx, save_offsety, save_xsize, save_ysize, nodata, ot, *args, **kwargs): _, gt, _, nodata, array_numpy = numpy_read(temp_metatile) #target_db = target.split(".")[0] + ".sqlite" targetdb = "geodata" dbuser = "******" targettable = str(parsed.table) median = int(parsed.median) # geotransform values for tile xmin = gt[0] + (save_offsetx * gt[1]) xmax = gt[0] + ((save_offsetx + save_xsize) * gt[1]) ymin = gt[3] + ((save_offsety + save_ysize) * gt[5]) ymax = gt[3] + (save_offsety * gt[5]) # geotransform values for metatile save_offsetx = 0 save_offsety = 0 save_xsize = array_numpy.shape[1] save_ysize = array_numpy.shape[0] # reclassify ''' 11: cropland 14: cropland 20: cropland 30: forest 40: forest 50: forest 60: forest 70: forest 90: forest 100: forest 110: shrubland 120: shrubland 130: shrubland 140: shrubland 150: shrubland 160: forest 170: forest 180: grassland 190: sealed 200: bare 210: water 220: ice 230: nodata ''' ''' nodata: 0 cropland: 1 forest: 2 shrubland: 3 grassland: 4 sealed: 5 bare: 6 water: 7 ice: 8 ''' # vectorize (smooth edges) # smooth # reclassify ############ classification = { 11: 1, 14: 1, 20: 1, 30: 2, 40: 2, 50: 2, 60: 2, 70: 2, 90: 2, 100: 2, 110: 3, 120: 3, 130: 3, 140: 3, 150: 3, 160: 2, 170: 2, 180: 4, 190: 5, 200: 6, 210: 7, 220: 8 #, #230:0 } temp_numpy = numpy.zeros((array_numpy.shape[0], array_numpy.shape[1])) for c in classification: idx = (array_numpy == c).nonzero() temp_numpy[idx] = classification[c] # median filter ############### processed_numpy = ndimage.median_filter(temp_numpy, size=median) #create Memory driver src_ds = gdal.Open(temp_metatile) format = "MEM" driver = gdal.GetDriverByName(format) mem_ds = driver.CreateCopy('', src_ds) # write filtered numpy array to GDAL band gdal_array.BandWriteArray(mem_ds.GetRasterBand(1), processed_numpy) mem_ds.GetRasterBand(1).WriteArray(processed_numpy) drv = ogr.GetDriverByName('Memory') ogr_ds = drv.CreateDataSource('out') ogr_lyr = ogr_ds.CreateLayer('landcover') fieldname = 'type' field_defn = ogr.FieldDefn(fieldname, ogr.OFTInteger) ogr_lyr.CreateField(field_defn) ogr_field = ogr_lyr.GetLayerDefn().GetFieldIndex(fieldname) ogr_field = 0 maskband = None gdal.Polygonize(mem_ds.GetRasterBand(1), maskband, ogr_lyr, ogr_field, []) # clip to tile boundary ####################### ring = ogr.Geometry(ogr.wkbLinearRing) ring.AddPoint(xmin, ymin) ring.AddPoint(xmin, ymax) ring.AddPoint(xmax, ymax) ring.AddPoint(xmax, ymin) ring.AddPoint(xmin, ymin) clipbox = ogr.Geometry(ogr.wkbPolygon) clipbox.AddGeometry(ring) cliplayer = ogr_ds.CreateLayer('clipbox', geom_type=ogr.wkbPolygon) clipfeaturedefn = cliplayer.GetLayerDefn() clipfeature = ogr.Feature(clipfeaturedefn) clipfeature.SetGeometry(clipbox) cliplayer.CreateFeature(clipfeature) clipped = ogr_ds.CreateLayer('landcover_clipped', geom_type=ogr.wkbMultiPolygon) #clipped.ForceToMultiLineString() field_defn = ogr.FieldDefn('ID', ogr.OFTInteger) clipped.CreateField(field_defn) field_defn = ogr.FieldDefn('type', ogr.OFTInteger) clipped.CreateField(field_defn) ogr_lyr.Clip(cliplayer, clipped) connection = psycopg2.connect(database=targetdb, user=dbuser) # psql -d geodata -c "DROP TABLE landcover; CREATE TABLE landcover (id bigserial primary key, typeid double precision, type text); SELECT AddGeometryColumn ('','landcover','the_geom',4326,'MULTIPOLYGON',2);" cursor = connection.cursor() for i in range(clipped.GetFeatureCount()): insert = True feature = clipped.GetFeature(i) geometry = feature.GetGeometryRef() #print geometry.GetGeometryName() if geometry.GetGeometryName() in ("POLYGON", "MULTIPOLYGON"): continue #print "polygon" if geometry.GetGeometryName() == "GEOMETRYCOLLECTION": geometry_new = ogr.Geometry(ogr.wkbMultiLineString) for i in xrange(geometry.GetGeometryCount()): g = geometry.GetGeometryRef(i) if g.GetGeometryName() in ("POLYGON", "MULTIPOLYGON"): #print "geometrycollection polygon" geometry_new.AddGeometry(g.Clone()) else: print g.GetGeometryName() geometry = geometry_new if geometry.GetGeometryName() in ("LINESTRING", "MULTILINESTRING", "POINT", "MULTIPOINT"): insert = False if insert: lctype = feature.GetField("type") geometry.SetCoordinateDimension(2) wkt = geometry.ExportToWkt() cursor.execute( "INSERT INTO " + targettable + " (type,the_geom) VALUES (%s, ST_Multi(ST_GeomFromText(%s, " + "4326)))", (lctype, wkt)) connection.commit() ogr_ds.Destroy() processed_numpy = [] mem_ds = None #numpy_save(processed_numpy, target, save_offsetx, save_offsety, save_xsize, save_ysize, gt, nodata, ot) #processed_numpy = array_numpy #print "save processed_numpy" #print str(processed_numpy.shape[0]) + " " + str(processed_numpy.shape[1]) cursor.close() connection.close()