Skip to content

Instantly share code, notes, and snippets.

@pka
Forked from highway900/point.rs
Last active October 26, 2021 12:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pka/0ea538b8893471c3d817e7365e81b02f to your computer and use it in GitHub Desktop.
Save pka/0ea538b8893471c3d817e7365e81b02f to your computer and use it in GitHub Desktop.
writing a geometry to fgb format
fn write_file() {
let mut file = File::create("test_point.fgb").expect("failed to write point");
let points = [[1.0, 1.0], [2.0, 2.0]];
const MAGIC_BYTES: [u8; 8] = [b'f', b'g', b'b', 3, b'f', b'g', b'b', 0];
let _ = file.write(&MAGIC_BYTES);
let mut fbb = flatbuffers::FlatBufferBuilder::new();
let column_args = ColumnArgs {
name: Some(fbb.create_string("STATE_FIPS")),
type_: ColumnType::String,
..Default::default()
};
let column = Column::create(&mut fbb, &column_args);
let header_args = HeaderArgs {
name: Some(fbb.create_string("Test1")),
geometry_type: GeometryType::Point,
columns: Some(fbb.create_vector(&[column])),
features_count: points.len() as u64,
index_node_size: 0,
..Default::default()
};
let header = Header::create(&mut fbb, &header_args);
fbb.finish_size_prefixed(header, None);
let buf = fbb.finished_data();
let _ = file.write(&buf);
for point in points {
let mut fbb = flatbuffers::FlatBufferBuilder::new();
let xy = fbb.create_vector(&point);
let g = Geometry::create(
&mut fbb,
&GeometryArgs {
xy: Some(xy),
..Default::default()
},
);
let f = Feature::create(
&mut fbb,
&FeatureArgs {
geometry: Some(g),
..Default::default()
},
);
fbb.finish_size_prefixed(f, None);
let buf = fbb.finished_data();
assert_eq!(buf.len(), 64);
let _ = file.write(&buf);
}
let _ = file.flush();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment