Skip to content

Instantly share code, notes, and snippets.

@highway900
Last active October 26, 2021 11:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save highway900/62433cba9941357979ba876c5c5f4b61 to your computer and use it in GitHub Desktop.
Save highway900/62433cba9941357979ba876c5c5f4b61 to your computer and use it in GitHub Desktop.
writing a geometry to fgb format
fn point() {
let mut file = File::create("test_point.fgb").expect("failed to write point");
let hex = decode_hex("6667620366676201").unwrap();
file.write(&hex);
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: 1,
index_node_size: 0,
..Default::default()
};
let header = Header::create(&mut fbb, &header_args);
fbb.finish(header, None);
let buf = fbb.finished_data();
file.write(&buf);
let mut fbb = flatbuffers::FlatBufferBuilder::new();
let g1 = Geometry::create(&mut fbb, &Default::default());
fbb.finish(g1, None);
let buf = fbb.finished_data();
let size = buf.len();
assert_eq!(size, 12);
file.write(&buf);
let mut fbb = flatbuffers::FlatBufferBuilder::new();
let xy = fbb.create_vector(&[0.0, 0.0]);
let g2 = Geometry::create(
&mut fbb,
&GeometryArgs {
xy: Some(xy),
..Default::default()
},
);
fbb.finish(g2, None);
let buf = fbb.finished_data();
let size = buf.len();
assert_eq!(size, 40);
file.write(&buf);
let mut fbb = flatbuffers::FlatBufferBuilder::new();
let xy = fbb.create_vector(&[0.0, 0.0]);
let g3 = Geometry::create(
&mut fbb,
&GeometryArgs {
xy: Some(xy),
..Default::default()
},
);
let f = Feature::create(
&mut fbb,
&FeatureArgs {
geometry: Some(g3),
..Default::default()
},
);
fbb.finish(f, None);
let buf = fbb.finished_data();
let size = buf.len();
assert_eq!(size, 56);
file.write(&buf);
file.flush();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment