4个版本
0.2.1 | 2021年11月28日 |
---|---|
0.2.0 | 2020年4月9日 |
0.1.1 | 2020年4月8日 |
0.1.0 | 2020年2月2日 |
#609 在 数据库接口
86KB
1.5K SLoC
wkb-raster
RASTER的WKB格式旨在传输,考虑了字节序并避免了任何填充。然而,除了填充和字节序之外,它还与内部序列化格式(参见RFC1)匹配,以便快速输入/输出。
示例
将栅格转换为WKB字符串
use wkb_raster::{Raster, RasterBand, RasterDataSource, InMemoryRasterData, Endian};
// 2x2 image bytes, u8 format
let bytes = vec![
vec![0, 1],
vec![1, 0],
];
let raster = Raster {
endian: Endian::Big, // note: currently Endian::Little is not supported in PostGIS
version: 0, // always set to 0
scale_x: 1.0, // pixel width in degrees
scale_y: 1.0, // pixel height in degrees
ip_x: 0.0, // upper left corner longitude in degrees
ip_y: 0.0, // upper left corner latitude in degrees
skew_x: 0.0, // rotation in degrees (0 to 360)
skew_y: 0.0, // rotation in degrees (0 to 360)
srid: 4326, // SRID EPSG identifier
width: 2, // pixel columns
height: 2, // rows
bands: vec![RasterBand {
is_nodata_value: false // true only if entire band is NODATA
data: RasterDataSource::InMemory(
InMemoryRasterData::UInt8 {
data: bytes,
nodata
}
),
}],
};
assert_eq!(
raster.to_wkb_string(),
String::from("00000000013FF00000000000003FF00000000000000000000000000000000000000000000000000000000000000000000000000000000010E600020002040000010100")
);
将WKB字符串转换为栅格
use wkb_raster::{Raster, RasterBand, RasterDataSource, InMemoryRasterData, Endian};
let parsed_raster = Raster::from_wkb_string(b"00000000013FF00000000000003FF00000000000000000000000000000000000000000000000000000000000000000000000000000000010E600020002040000010100").unwrap();
// 2x2 image bytes, u8 format
let bytes = vec![
vec![0, 1],
vec![1, 0],
];
assert_eq!(parsed_raster, Raster {
endian: Endian::Big,
version: 0,
scale_x: 1.0,
scale_y: 1.0,
ip_x: 0.0,
ip_y: 0.0,
skew_x: 0.0,
skew_y: 0.0,
srid: 4326,
width: 2,
height: 2,
bands: vec![RasterBand {
is_nodata_value: false,
data: RasterDataSource::InMemory(
InMemoryRasterData::UInt8 {
data: bytes,
nodata
}
),
}],
});
许可证:MIT