当前位置:网站首页>[rasterio] geojson vector rasterization
[rasterio] geojson vector rasterization
2022-07-18 04:43:00 【there2belief】
Use rasterio take geojson Vector rasterization :
The core is to use rasterio.features.rasterize Function to realize rasterization , Specifically considered :
- Vectorization into a single value
- Vectorization into different values according to a certain field
- For empty vectors , Vectorization results in 0 Grid of values
- Writing out grids supports compression
Code implementation :
Pay attention to SN6 The data has been specially modified
import os.path from os.path import join, exists import numpy as np import rasterio as rio from rasterio import features, enums import geopandas as gpd from tqdm import tqdm def vector2img(vectorFileName, templateTifFileName, outputFileName, field=None): # Read in vector vector = gpd.read_file(vectorFileName) # Get list of geometries for all features in vector file geom = [shapes for shapes in vector.geometry] # Open example raster raster = rio.open(templateTifFileName) if len(geom) > 0: # only rasterize non-empty vector if field is None: rasterized = features.rasterize(geom, out_shape=raster.shape, fill=0, out=None, transform=raster.transform, all_touched=False, default_value=1, dtype=None) else: # create a numeric unique value for each row vector[field] = range(0, len(vector)) # create tuples of geometry, value pairs, where value is the attribute value you want to burn geom_value = ((geom, value) for geom, value in zip(vector.geometry, vector[field])) # Rasterize vector using the shape and transform of the raster rasterized = features.rasterize(geom_value, out_shape=raster.shape, transform=raster.transform, all_touched=True, fill=0, # background value merge_alg=enums.MergeAlg.replace, dtype=np.int16) else: rasterized = np.zeros([raster.height, raster.width]).astype(np.uint8) with rio.open( outputFileName, "w", driver="GTiff", transform=raster.transform, dtype=rio.uint8, count=1, width=raster.width, height=raster.height, compress='lzw') as dst: dst.write(rasterized, indexes=1) def vector2imgBatch(vector_dir, vector_postfix, ref_img_dir, img_postfix, output_dir, lab_postfix, field=None, mismatch=False, vector_lastdir="", ref_img_lastdir=""): files = [f for f in os.listdir(vector_dir) if f.endswith(vector_postfix)] for file in tqdm(files): in_vector = join(vector_dir, file) if mismatch: ref_img = os.path.join(ref_img_dir, file[:-len(vector_postfix)].replace(vector_lastdir, ref_img_lastdir) + img_postfix) else: ref_img = os.path.join(ref_img_dir, file[:-len(vector_postfix)].replace(vector_lastdir, ref_img_lastdir) + img_postfix) out_label = os.path.join(output_dir, file[:-len(vector_postfix)].replace(vector_lastdir, ref_img_lastdir) + lab_postfix) if exists(in_vector) and exists(ref_img): if os.path.exists(out_label): print('INFO: vector2img ' + out_label + " exists! Skip.") else: # print('vector2img: ' + file) vector2img(in_vector, ref_img, out_label, field) if __name__ == '__main__': vector_dir = r'Spacenet6_buildings\train\Buildings' ref_img_dir = r'Spacenet6_buildings\train\PS-RGB' output_dir = r'Spacenet6_buildings\train\PS-RGB_Label' vector_postfix = 'geojson' img_postfix = 'tif' lab_postfix = 'tif' vector_lastdir = vector_dir.split('\\')[-1] ref_img_lastdir = ref_img_dir.split('\\')[-1] if not exists(output_dir): os.makedirs(output_dir) vector2imgBatch(vector_dir, vector_postfix, ref_img_dir, img_postfix, output_dir, lab_postfix,field=None, mismatch=True, vector_lastdir=vector_lastdir, ref_img_lastdir=ref_img_lastdir)
Reference resources :
Rasterize Vectors w. Rasterio — Python Open Source Spatial Programming & Remote Sensing (pygis.io)
边栏推荐
- 2022.07.11
- u-boot之链接脚本
- 工程仪器振弦无线采集仪的采集数据发送方式及在线监测系统
- 1035. 不相交的线
- Dream CMS foreground SQL injection
- RS2022/云检测:考虑域偏移问题的卫星图像半监督云检测Semi-Supervised Cloud Detection in Satellite Images by Considering the
- 中金财富开户安全吗 开户有什么用
- WPS关闭烦人广告
- 使用vscode搭建u-boot开发环境
- Sword finger offer16- integer power bit operation of numeric value
猜你喜欢
随机推荐
博客园美化教程
C#静态方法和非静态方法
1301_ Two ways to add serial port monitoring function to the development board
u-boot之顶层Makefile分析(二)之config.mk文件的生成
LeNet
梦想CMS 前台SQL注入
一文搞懂│什么是跨域?如何解决跨域?
Luogu p4113 [heoi2012] flower picking solution
LeetCode_滑动窗口_简单_643.子数组最大平均数 I
苹果手机蓝牙联网
【rasterio】geojson矢量栅格化
理解了Dowanward API的妙用,轻松拿捏kubernetes环境变量
一种新的UI测试方法:视觉感知测试
机器学习练习 4 - 神经网络
一种新的UI测试方法:视觉感知测试
SSM整合
openstack登陆dashboard提示认证发生错误
机器学习练习 5 - 偏差和方差
音视频 SDP 添加码率
浏览器兼容性测试系统以及方法和过程









