Reranko05 commented on code in PR #50781:
URL: https://github.com/apache/arrow/pull/50781#discussion_r3717898418


##########
cpp/src/parquet/CMakeLists.txt:
##########


Review Comment:
   Removed.



##########
cpp/src/parquet/geospatial/util_json_internal.cc:
##########
@@ -17,52 +17,93 @@
 
 #include "parquet/geospatial/util_json_internal.h"
 
+#include <simdjson.h>
 #include <string>
 
 #include "arrow/extension_type.h"
-#include "arrow/json/rapidjson_defs.h"  // IWYU pragma: keep
+#include "arrow/json/json_writer_internal.h"
 #include "arrow/result.h"
+#include "arrow/util/simdjson_internal.h"
 #include "arrow/util/string.h"
 
-#include <rapidjson/document.h>
-#include <rapidjson/writer.h>
-
 #include "parquet/exception.h"
 #include "parquet/types.h"
 
 namespace parquet {
 
 namespace {
 ::arrow::Result<std::string> GeospatialGeoArrowCrsToParquetCrs(
-    const ::arrow::rapidjson::Document& document) {
-  namespace rj = ::arrow::rapidjson;
+    simdjson::ondemand::object object) {
+  auto crs_field = object["crs"];
 
-  if (!document.HasMember("crs") || document["crs"].IsNull()) {
+  if (crs_field.error() == simdjson::NO_SUCH_FIELD) {
     // Parquet GEOMETRY/GEOGRAPHY do not have a concept of a null/missing
     // CRS, but an omitted one is more likely to have meant "lon/lat" than
     // a truly unspecified one (i.e., Engineering CRS with arbitrary XY units)
     return "";
   }
 
-  const auto& json_crs = document["crs"];
-  if (json_crs.IsString() && (json_crs == "EPSG:4326" || json_crs == 
"OGC:CRS84")) {
-    // crs can be left empty because these cases both correspond to
-    // longitude/latitude in WGS84 according to the Parquet specification
+  ARROW_ASSIGN_OR_RAISE(auto json_crs, ::arrow::internal::GetSimdjsonResult(
+                                           crs_field, "Failed to get 'crs' 
field: "));
+
+  ARROW_ASSIGN_OR_RAISE(bool is_null, ::arrow::internal::IsJsonNull(json_crs));
+  if (is_null) {
     return "";
-  } else if (json_crs.IsObject()) {
-    // Attempt to detect common PROJJSON representations of longitude/latitude 
and return
-    // an empty crs to maximize compatibility with readers that do not 
implement CRS
-    // support. PROJJSON stores this in the "id" member like:
-    // {..., "id": {"authority": "...", "code": "..."}}
-    if (json_crs.HasMember("id")) {
-      const auto& identifier = json_crs["id"];
-      if (identifier.HasMember("authority") && identifier.HasMember("code")) {
-        if (identifier["authority"] == "OGC" && identifier["code"] == "CRS84") 
{
-          return "";
-        } else if (identifier["authority"] == "EPSG" && identifier["code"] == 
"4326") {
+  }
+
+  if (auto string = ::arrow::internal::GetJsonAs<std::string_view>(json_crs);
+      string.ok()) {
+    if (*string == "EPSG:4326" || *string == "OGC:CRS84") {

Review Comment:
   Addressed.



-- 
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]

Reply via email to