都给我用rasterio!快,不止一点点
# Convert bitmask to polygon (zero values only)
import rasterio
from rasterio.features import shapes
from shapely.geometry import shape
import geopandas as gpd
import os,shutil
import gc
# Open the raster file
src_dir = "./"
dst_dir = "./"
#if os.path.exists(dst_dir):
# shutil.rmtree(dst_dir)
#os.mkdir(dst_dir)
for file in os.listdir(src_dir):
if not file[-4:] == ".tif":
continue
src_raster = os.path.join(src_dir,file)
print(src_raster)
with rasterio.open(src_raster) as src:
image = src.read(1) # Read the first band
# Convert raster band into polygons
results = [{'properties': {'raster_val': v}, 'geometry': s}
for i, (s, v) in enumerate(shapes(image, transform=src.transform))]
# Transform GeoJSON features into shapely geometries
geoms = [shape(geom['geometry']) for geom in results]
# Create a GeoDataFrame
gdf = gpd.GeoDataFrame.from_features(results)
src.close()
# Now you have a GeoDataFrame with shapely polygons
gdf = gdf[gdf['raster_val'] == 1]
#dissolved = gdf.dissolve(by = 'raster_val')
#dissolved['dem_id'] = (os.path.split(src_raster)[1])
#print(dissolved.head())
#dissolved.to_file(os.path.join(dst_dir,file[0:-4]+".shp"))
gdf.to_file(os.path.join(dst_dir,file[0:-4]+".shp"))
del image
del results
del geoms
del gdf
gc.collect()
标签:raster,raterio,gdf,src,矢量化,一点点,file,os,dir From: https://www.cnblogs.com/wszhang/p/18315702