From ff2b0992ed88a4067023ff94685cb7a39f85ba33 Mon Sep 17 00:00:00 2001 From: Kyle Barron Date: Mon, 23 Dec 2024 14:35:09 -0500 Subject: [PATCH] Fix js bindings and update name --- js/Cargo.lock | 4 +-- js/src/io/flatgeobuf.rs | 11 ++++--- rust/geoarrow/src/io/flatgeobuf/mod.rs | 2 +- rust/geoarrow/src/io/flatgeobuf/reader/mod.rs | 2 +- .../geoarrow/src/io/flatgeobuf/reader/sync.rs | 33 +++++++++---------- 5 files changed, 26 insertions(+), 26 deletions(-) diff --git a/js/Cargo.lock b/js/Cargo.lock index aaede781..65a6d6d8 100644 --- a/js/Cargo.lock +++ b/js/Cargo.lock @@ -895,7 +895,7 @@ dependencies = [ [[package]] name = "flatgeobuf" version = "4.5.0" -source = "git+https://github.com/kylebarron/flatgeobuf?rev=06e987d6d3d73edb95124a14cdaab9ee8e6e57ac#06e987d6d3d73edb95124a14cdaab9ee8e6e57ac" +source = "git+https://github.com/flatgeobuf/flatgeobuf?rev=f7563617549f8ab0c111e83ee423996f100ddb0c#f7563617549f8ab0c111e83ee423996f100ddb0c" dependencies = [ "byteorder", "fallible-streaming-iterator", @@ -1092,7 +1092,7 @@ dependencies = [ [[package]] name = "geoarrow" -version = "0.4.0-beta.2" +version = "0.4.0-beta.3" dependencies = [ "arrow", "arrow-array", diff --git a/js/src/io/flatgeobuf.rs b/js/src/io/flatgeobuf.rs index 50c1f2d4..3465bd01 100644 --- a/js/src/io/flatgeobuf.rs +++ b/js/src/io/flatgeobuf.rs @@ -1,7 +1,8 @@ use std::io::Cursor; +use arrow_array::RecordBatchReader; use arrow_wasm::Table; -use geoarrow::io::flatgeobuf::{read_flatgeobuf as _read_flatgeobuf, FlatGeobufReaderOptions}; +use geoarrow::io::flatgeobuf::{FlatGeobufReaderBuilder, FlatGeobufReaderOptions}; // use parquet_wasm::utils::assert_parquet_file_not_empty; use wasm_bindgen::prelude::*; @@ -27,12 +28,14 @@ use crate::error::WasmResult; #[wasm_bindgen(js_name = readFlatGeobuf)] pub fn read_flatgeobuf(file: &[u8], batch_size: Option) -> WasmResult { // assert_parquet_file_not_empty(parquet_file)?; - let mut cursor = Cursor::new(file); + let cursor = Cursor::new(file); let options = FlatGeobufReaderOptions { batch_size, ..Default::default() }; - let geo_table = _read_flatgeobuf(&mut cursor, options)?; - let (batches, schema) = geo_table.into_inner(); + let reader_builder = FlatGeobufReaderBuilder::open(cursor)?; + let record_batch_reader = reader_builder.read(options)?; + let schema = record_batch_reader.schema(); + let batches = record_batch_reader.collect::>()?; Ok(Table::new(schema, batches)) } diff --git a/rust/geoarrow/src/io/flatgeobuf/mod.rs b/rust/geoarrow/src/io/flatgeobuf/mod.rs index ff8d3524..85acb33d 100644 --- a/rust/geoarrow/src/io/flatgeobuf/mod.rs +++ b/rust/geoarrow/src/io/flatgeobuf/mod.rs @@ -5,5 +5,5 @@ mod writer; #[cfg(feature = "flatgeobuf_async")] pub use reader::read_flatgeobuf_async; -pub use reader::{FlatGeobufReaderBuilder, FlatGeobufReaderOptions, FlatGeobufRecordBatchReader}; +pub use reader::{FlatGeobufReader, FlatGeobufReaderBuilder, FlatGeobufReaderOptions}; pub use writer::{write_flatgeobuf, write_flatgeobuf_with_options, FlatGeobufWriterOptions}; diff --git a/rust/geoarrow/src/io/flatgeobuf/reader/mod.rs b/rust/geoarrow/src/io/flatgeobuf/reader/mod.rs index df457386..250aebad 100644 --- a/rust/geoarrow/src/io/flatgeobuf/reader/mod.rs +++ b/rust/geoarrow/src/io/flatgeobuf/reader/mod.rs @@ -8,4 +8,4 @@ mod sync; pub use common::FlatGeobufReaderOptions; #[cfg(feature = "flatgeobuf_async")] pub use r#async::read_flatgeobuf_async; -pub use sync::{FlatGeobufReaderBuilder, FlatGeobufRecordBatchReader}; +pub use sync::{FlatGeobufReader, FlatGeobufReaderBuilder}; diff --git a/rust/geoarrow/src/io/flatgeobuf/reader/sync.rs b/rust/geoarrow/src/io/flatgeobuf/reader/sync.rs index 2f35b7c5..c84ba6f3 100644 --- a/rust/geoarrow/src/io/flatgeobuf/reader/sync.rs +++ b/rust/geoarrow/src/io/flatgeobuf/reader/sync.rs @@ -35,7 +35,7 @@ use geozero::{FeatureProcessor, FeatureProperties}; use std::io::{Read, Seek}; use std::sync::Arc; -/// A builder for [FlatGeobufRecordBatchReader] +/// A builder for [FlatGeobufReader] pub struct FlatGeobufReaderBuilder { reader: FgbReader, } @@ -86,12 +86,12 @@ impl FlatGeobufReaderBuilder { pub fn read_seq( self, options: FlatGeobufReaderOptions, - ) -> Result> { + ) -> Result> { let (data_type, properties_schema, array_metadata) = self.infer_from_header()?; if let Some((min_x, min_y, max_x, max_y)) = options.bbox { let selection = self.reader.select_bbox_seq(min_x, min_y, max_x, max_y)?; let num_rows = selection.features_count(); - Ok(FlatGeobufRecordBatchReader { + Ok(FlatGeobufReader { selection, data_type, batch_size: options.batch_size.unwrap_or(65_536), @@ -102,7 +102,7 @@ impl FlatGeobufReaderBuilder { } else { let selection = self.reader.select_all_seq()?; let num_rows = selection.features_count(); - Ok(FlatGeobufRecordBatchReader { + Ok(FlatGeobufReader { selection, data_type, batch_size: options.batch_size.unwrap_or(65_536), @@ -116,15 +116,12 @@ impl FlatGeobufReaderBuilder { impl FlatGeobufReaderBuilder { /// Read features - pub fn read( - self, - options: FlatGeobufReaderOptions, - ) -> Result> { + pub fn read(self, options: FlatGeobufReaderOptions) -> Result> { let (data_type, properties_schema, array_metadata) = self.infer_from_header()?; if let Some((min_x, min_y, max_x, max_y)) = options.bbox { let selection = self.reader.select_bbox(min_x, min_y, max_x, max_y)?; let num_rows = selection.features_count(); - Ok(FlatGeobufRecordBatchReader { + Ok(FlatGeobufReader { selection, data_type, batch_size: options.batch_size.unwrap_or(65_536), @@ -135,7 +132,7 @@ impl FlatGeobufReaderBuilder { } else { let selection = self.reader.select_all()?; let num_rows = selection.features_count(); - Ok(FlatGeobufRecordBatchReader { + Ok(FlatGeobufReader { selection, data_type, batch_size: options.batch_size.unwrap_or(65_536), @@ -150,7 +147,7 @@ impl FlatGeobufReaderBuilder { /// An iterator over record batches from a FlatGeobuf file. /// /// This implements [arrow_array::RecordBatchReader], which you can use to access data. -pub struct FlatGeobufRecordBatchReader { +pub struct FlatGeobufReader { selection: FeatureIter, data_type: NativeType, batch_size: usize, @@ -159,7 +156,7 @@ pub struct FlatGeobufRecordBatchReader { array_metadata: Arc, } -impl FlatGeobufRecordBatchReader { +impl FlatGeobufReader { fn construct_options(&self) -> GeoTableBuilderOptions { let coord_type = self.data_type.coord_type(); let mut batch_size = self.batch_size; @@ -177,7 +174,7 @@ impl FlatGeobufRecordBatchReader { } } -impl FlatGeobufRecordBatchReader { +impl FlatGeobufReader { fn process_batch(&mut self) -> Result> { let options = self.construct_options(); let batch_size = options.batch_size; @@ -252,7 +249,7 @@ impl FlatGeobufRecordBatchReader { } } -impl FlatGeobufRecordBatchReader { +impl FlatGeobufReader { fn process_batch(&mut self) -> Result> { let options = self.construct_options(); let batch_size = options.batch_size; @@ -332,7 +329,7 @@ impl FlatGeobufRecordBatchReader { } } -impl Iterator for FlatGeobufRecordBatchReader { +impl Iterator for FlatGeobufReader { type Item = std::result::Result; fn next(&mut self) -> Option { @@ -342,7 +339,7 @@ impl Iterator for FlatGeobufRecordBatchReader { } } -impl RecordBatchReader for FlatGeobufRecordBatchReader { +impl RecordBatchReader for FlatGeobufReader { fn schema(&self) -> SchemaRef { let geom_field = self.data_type @@ -356,7 +353,7 @@ impl RecordBatchReader for FlatGeobufRecordBatchReader } } -impl Iterator for FlatGeobufRecordBatchReader { +impl Iterator for FlatGeobufReader { type Item = std::result::Result; fn next(&mut self) -> Option { @@ -366,7 +363,7 @@ impl Iterator for FlatGeobufRecordBatchReader { } } -impl RecordBatchReader for FlatGeobufRecordBatchReader { +impl RecordBatchReader for FlatGeobufReader { fn schema(&self) -> SchemaRef { let geom_field = self.data_type