BlakeOrth commented on code in PR #8801:
URL: https://github.com/apache/arrow-rs/pull/8801#discussion_r2504856079
##########
parquet-geospatial/src/crs.rs:
##########
@@ -0,0 +1,97 @@
+use std::{collections::HashMap, sync::Arc};
+
+use arrow_schema::{Schema, SchemaBuilder};
+use serde_json::{Value, json};
+
+#[derive(Debug)]
+pub enum Crs {
+ Projjson(serde_json::Value),
+ Srid(u64),
+ Other(String),
+}
+
+impl Crs {
+ // TODO: make fallible
+ fn try_from_parquet_str(crs: &str, metadata: &HashMap<String, String>) ->
Self {
+ let de: Value = serde_json::from_str(crs).unwrap();
+
+ // A CRS that does not exist or is empty defaults to 4326
+ // TODO: http link to parquet geospatial doc
+ let Some(crs) = de["crs"].as_str() else {
+ return Crs::Srid(4326);
+ };
+
+ if let Some(key) = crs.strip_prefix("projjson:") {
+ let Some(proj_meta) = metadata.get(key) else {
+ panic!("Failed to find key in meta: {:?}", metadata)
+ };
+
+ Self::Projjson(serde_json::from_str(proj_meta).unwrap())
+ } else if let Some(srid) = crs.strip_prefix("srid:") {
+ Self::Srid(srid.parse().unwrap())
+ } else {
Review Comment:
Just to make sure I'm understanding this case correctly. The incoming
metadata would look like:
`{"crs": "<PROJJSON string>"}` (omitting the `projjson:` prefix)
It does seem convenient to try to parse the above case as json, and try to
detect if it seems like a PROJJSON object. Since we don't have access to an
actual PROJ parser here I would be a little bit concerned about the potential
for false positives or potentially malformed PROJ objects. I don't think I feel
super strongly about those concerns though. It seems like it's one of those
trade offs between user convenience vs guaranteed correctness.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]