[geos-commits] [SCM] GEOS branch main updated. 66c110b50de56e2722ebbfa28293a3e118d028ba

git at osgeo.org git at osgeo.org
Wed Aug 25 15:59:22 PDT 2021


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GEOS".

The branch, main has been updated
       via  66c110b50de56e2722ebbfa28293a3e118d028ba (commit)
       via  b9dc85cd25e8e63bb08f7cfe6c2883440ec232e9 (commit)
       via  22b3b61705ee13f4b0e66a9ed82439ed64d877c4 (commit)
       via  9ad62ef0a10354d4d43f1d67d3ecb98839587cea (commit)
       via  9626cb60d35e6c47cbe5ad2c3efd7214408d33a3 (commit)
       via  280f7348d4ad686da16ce7afe46f8d2606ec3f51 (commit)
       via  7a6f6c66b558784d1d8f97853bf4d2c7b5bdbd70 (commit)
       via  74fbee9cb0dd41acf34e0c2c8eba09a53566a370 (commit)
       via  569969f1e5095ae1cc04c436ca0632734586a59d (commit)
       via  33627f9d30abb210fef408a1f0fc33a082dd695f (commit)
       via  8f5e9262e3c98f814f1ab5aae33bbb5b0af5f054 (commit)
       via  e077caa15b63a26c880c885dc079b3805d72b87d (commit)
      from  f593230f5907260096202ef0302abe99b81c0bf7 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 66c110b50de56e2722ebbfa28293a3e118d028ba
Merge: f593230 b9dc85c
Author: Paul Ramsey <pramsey at cleverelephant.ca>
Date:   Wed Aug 25 15:59:14 2021 -0700

    Merge branch 'caspervdw-casper-geojson-capi' into main


commit b9dc85cd25e8e63bb08f7cfe6c2883440ec232e9
Merge: f593230 22b3b61
Author: Paul Ramsey <pramsey at cleverelephant.ca>
Date:   Wed Aug 25 15:45:52 2021 -0700

    Merge branch 'casper-geojson-capi' of https://github.com/caspervdw/geos into caspervdw-casper-geojson-capi


commit 22b3b61705ee13f4b0e66a9ed82439ed64d877c4
Author: caspervdw <caspervdw at gmail.com>
Date:   Fri Jun 18 22:08:59 2021 +0200

     Clean

diff --git a/capi/geos_ts_c.cpp b/capi/geos_ts_c.cpp
index 0fd5565..f7b7a0d 100644
--- a/capi/geos_ts_c.cpp
+++ b/capi/geos_ts_c.cpp
@@ -90,7 +90,6 @@
 #include <geos/util/Interrupt.h>
 #include <geos/util/UniqueCoordinateArrayFilter.h>
 #include <geos/util/Machine.h>
-#include "geos/vend/include_nlohmann_json.hpp"
 #include <geos/version.h>
 
 // This should go away

commit 9ad62ef0a10354d4d43f1d67d3ecb98839587cea
Author: caspervdw <caspervdw at gmail.com>
Date:   Fri Jun 18 21:54:55 2021 +0200

    Finish C API

diff --git a/capi/geos_c.cpp b/capi/geos_c.cpp
index 69cb147..f4f3ed0 100644
--- a/capi/geos_c.cpp
+++ b/capi/geos_c.cpp
@@ -1326,9 +1326,9 @@ extern "C" {
     }
 
     char*
-    GEOSGeoJSONWriter_writeGeometry(GEOSGeoJSONWriter* writer, const GEOSGeometry* g, int type, int indent)
+    GEOSGeoJSONWriter_writeGeometry(GEOSGeoJSONWriter* writer, const GEOSGeometry* g, int indent)
     {
-        return GEOSGeoJSONWriter_writeGeometry_r(handle, writer, g, type, indent);
+        return GEOSGeoJSONWriter_writeGeometry_r(handle, writer, g, indent);
     }
 
 
diff --git a/capi/geos_c.h.in b/capi/geos_c.h.in
index 5824295..19fb2ad 100644
--- a/capi/geos_c.h.in
+++ b/capi/geos_c.h.in
@@ -570,26 +570,6 @@ enum GEOSBufJoinStyles {
 	GEOSBUF_JOIN_BEVEL = 3
 };
 
-/**
-* Output options for the GeoJSON writer.
-* \see GEOSGeoJSONWriter_create
-*/
-enum GEOSGeoJSONType {
-    /**
-    * Output only contains a geometry.
-    */
-	GEOSGEOJSON_GEOMETRY,
-    /**
-    * Output is a feature that contains the geometry.
-    */
-	GEOSGEOJSON_FEATURE,
-    /**
-    * Output contains multiple features in a FeatureCollection.
-    * Input must be a collection.
-    */
-	GEOSGEOJSON_FEATURE_COLLECTION
-};
-
 /** \see GEOSBufferParams_create */
 extern GEOSBufferParams GEOS_DLL *GEOSBufferParams_create_r(
     GEOSContextHandle_t handle);
@@ -1795,7 +1775,6 @@ extern char GEOS_DLL *GEOSGeoJSONWriter_writeGeometry_r(
     GEOSContextHandle_t handle,
     GEOSGeoJSONWriter* writer,
     const GEOSGeometry* g,
-    int type,
     int indent);
 
 /** \see GEOSFree */
@@ -4325,7 +4304,7 @@ extern GEOSGeoJSONReader GEOS_DLL *GEOSGeoJSONReader_create(void);
 extern void GEOS_DLL GEOSGeoJSONReader_destroy(GEOSGeoJSONReader* reader);
 
 /**
-* Use a reader to parse a GeoJSON. A single geometry or feature is,
+* Use a reader to parse a GeoJSON. A single geometry or feature is
 * converted into a geometry. A featurecollection is converted into a
 * geometrycollection. Feature properties are not read.
 * \param reader A GeoJSON reader object, caller retains ownership
@@ -4351,17 +4330,16 @@ extern GEOSGeoJSONWriter GEOS_DLL *GEOSGeoJSONWriter_create(void);
 extern void GEOS_DLL GEOSGeoJSONWriter_destroy(GEOSGeoJSONWriter* writer);
 
 /**
-* Write out the GeoJSON representation of a geometry.
+* Write out the GeoJSON representation of a geometry. Note that writing a GeoJSON
+* Feature or FeatureCollection is unsupported through the GEOS C API.
 * \param writer A GeoJSON reader object, caller retains ownership.
 * \param geojson The json string to parse, caller retains ownership.
-* \param type The GeoJSON object type. See \ref GEOSGeoJSONType.
 * \param indent The indentation used. Use -1 for no formatting.
 * \return A \ref GEOSGeometry, caller to free with GEOSGeometry_destroy())
 */
 extern char GEOS_DLL *GEOSGeoJSONWriter_writeGeometry(
     GEOSGeoJSONWriter* writer,
     const GEOSGeometry* g,
-    int type,
     int indent);
 
 #endif /* #ifndef GEOS_USE_ONLY_R_API */
diff --git a/capi/geos_ts_c.cpp b/capi/geos_ts_c.cpp
index 4917c8b..0fd5565 100644
--- a/capi/geos_ts_c.cpp
+++ b/capi/geos_ts_c.cpp
@@ -3098,14 +3098,14 @@ extern "C" {
     }
 
     char*
-    GEOSGeoJSONWriter_writeGeometry_r(GEOSContextHandle_t extHandle, GEOSGeoJSONWriter* writer, const GEOSGeometry* g, int type, int indent)
+    GEOSGeoJSONWriter_writeGeometry_r(GEOSContextHandle_t extHandle, GEOSGeoJSONWriter* writer, const GEOSGeometry* g, int indent)
     {
         return execute(extHandle, [&]() {
             std::string geojson;
             if (indent >= 0) {
-                geojson = writer->writeFormatted(g, static_cast<geos::io::GeoJSONType>(type), indent);
+                geojson = writer->writeFormatted(g, geos::io::GeoJSONType::GEOMETRY, indent);
             } else {
-                geojson = writer->write(g, static_cast<geos::io::GeoJSONType>(type));
+                geojson = writer->write(g, geos::io::GeoJSONType::GEOMETRY);
             }
             char* result = gstrdup(geojson);
             return result;
diff --git a/tests/unit/capi/GEOSGeomGeoJSONWriteTest.cpp b/tests/unit/capi/GEOSGeomGeoJSONWriteTest.cpp
index 6554ece..939ec6e 100644
--- a/tests/unit/capi/GEOSGeomGeoJSONWriteTest.cpp
+++ b/tests/unit/capi/GEOSGeomGeoJSONWriteTest.cpp
@@ -26,10 +26,10 @@ struct test_capigeosgeomwritegeojson_data : public capitest::utility {
     }
 
     void
-    test_geojson(std::string const& wkt, std::string const& expected, int type, int indent)
+    test_geojson(std::string const& wkt, std::string const& expected, int indent)
     {
         geom1_ = fromWKT(&wkt[0]);
-        char* geojson_c = GEOSGeoJSONWriter_writeGeometry(writer_, geom1_, type, indent);
+        char* geojson_c = GEOSGeoJSONWriter_writeGeometry(writer_, geom1_, indent);
         ensure("GEOSGeoJSONWriter_writeGeometry failed to create GeoJSON", nullptr != geojson_c);
 
         std::string actual(geojson_c);
@@ -47,6 +47,7 @@ group test_capigeosgeomwritegeojson_group("capi::GEOSGeomGeoJSONWrite");
 // Test Cases
 //
 
+// Write a Point to GeoJSON
 template<>
 template<>
 void object::test<1>
@@ -54,26 +55,49 @@ void object::test<1>
 {
     std::string wkt("POINT(-117.0 33.0)");
     std::string expected("{\"type\":\"Point\",\"coordinates\":[-117.0,33.0]}");
-    test_geojson(wkt, expected, GEOSGEOJSON_GEOMETRY, -1);
+    test_geojson(wkt, expected, -1);
 }
 
+// Write a GeometryCollection to GeoJSON
 template<>
 template<>
 void object::test<2>
 ()
 {
-    std::string wkt("POINT(-117.0 33.0)");
-    std::string expected("{\"type\":\"Feature\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[-117.0,33.0]}}");
-    test_geojson(wkt, expected, GEOSGEOJSON_FEATURE, -1);
+    std::string wkt("GEOMETRYCOLLECTION(POINT(1 1),POINT(2 2))");
+    std::string expected("{\"type\":\"GeometryCollection\",\"geometries\":[{\"type\":\"Point\",\"coordinates\":[1.0,1.0]},{\"type\":\"Point\",\"coordinates\":[2.0,2.0]}]}");
+    test_geojson(wkt, expected, -1);
 }
 
+
+// Write a LineString to formatted GeoJSON
 template<>
 template<>
 void object::test<3>
 ()
 {
-    std::string wkt("GEOMETRYCOLLECTION (POINT (-117.000 33.000), POINT (-122.000 45.000))");
-    std::string expected("{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[-117.0,33.0]}},{\"type\":\"Feature\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[-122.0,45.0]}}]}");
-    test_geojson(wkt, expected, GEOSGEOJSON_FEATURE_COLLECTION, -1);
+    std::string wkt("LINESTRING(102.0 0.0, 103.0 1.0, 104.0 0.0, 105.0 1.0)");
+    std::string expected(std::string{"{\n"} +
+        "    \"type\": \"LineString\",\n" +
+        "    \"coordinates\": [\n" +
+        "        [\n" + 
+        "            102.0,\n" + 
+        "            0.0\n" + 
+        "        ],\n" + 
+        "        [\n" + 
+        "            103.0,\n" + 
+        "            1.0\n" + 
+        "        ],\n" + 
+        "        [\n" + 
+        "            104.0,\n" + 
+        "            0.0\n" + 
+        "        ],\n" + 
+        "        [\n" + 
+        "            105.0,\n" + 
+        "            1.0\n" +
+        "        ]\n" + 
+        "    ]\n" +
+        "}");
+    test_geojson(wkt, expected, 4);
 }
 }

commit 9626cb60d35e6c47cbe5ad2c3efd7214408d33a3
Author: caspervdw <caspervdw at gmail.com>
Date:   Sun Jun 6 22:01:19 2021 +0200

    Writer WIP

diff --git a/capi/geos_c.cpp b/capi/geos_c.cpp
index 8092fb6..69cb147 100644
--- a/capi/geos_c.cpp
+++ b/capi/geos_c.cpp
@@ -22,6 +22,7 @@
 #include <geos/io/WKTWriter.h>
 #include <geos/io/WKBWriter.h>
 #include <geos/io/GeoJSONReader.h>
+#include <geos/io/GeoJSONWriter.h>
 #include <geos/util/Interrupt.h>
 
 #include <stdexcept>
@@ -41,6 +42,7 @@
 #define GEOSWKBReader geos::io::WKBReader
 #define GEOSWKBWriter geos::io::WKBWriter
 #define GEOSGeoJSONReader geos::io::GeoJSONReader
+#define GEOSGeoJSONWriter geos::io::GeoJSONWriter
 typedef struct GEOSBufParams_t GEOSBufferParams;
 typedef struct GEOSMakeValidParams_t GEOSMakeValidParams;
 
@@ -73,7 +75,7 @@ using geos::io::WKTWriter;
 using geos::io::WKBReader;
 using geos::io::WKBWriter;
 using geos::io::GeoJSONReader;
-
+using geos::io::GeoJSONWriter;
 
 
 typedef std::unique_ptr<Geometry> GeomPtr;
@@ -1305,9 +1307,28 @@ extern "C" {
     }
 
     Geometry*
-    GEOSGeoJSONReader_read(GeoJSONReader* reader, const char* geojson)
+    GEOSGeoJSONReader_readGeometry(GeoJSONReader* reader, const char* geojson)
+    {
+        return GEOSGeoJSONReader_readGeometry_r(handle, reader, geojson);
+    }
+
+    /* GeoJSON Writer */
+    GeoJSONWriter*
+    GEOSGeoJSONWriter_create()
+    {
+        return GEOSGeoJSONWriter_create_r(handle);
+    }
+
+    void
+    GEOSGeoJSONWriter_destroy(GEOSGeoJSONWriter* writer)
+    {
+        GEOSGeoJSONWriter_destroy_r(handle, writer);
+    }
+
+    char*
+    GEOSGeoJSONWriter_writeGeometry(GEOSGeoJSONWriter* writer, const GEOSGeometry* g, int type, int indent)
     {
-        return GEOSGeoJSONReader_read_r(handle, reader, geojson);
+        return GEOSGeoJSONWriter_writeGeometry_r(handle, writer, g, type, indent);
     }
 
 
diff --git a/capi/geos_c.h.in b/capi/geos_c.h.in
index 421ed55..5824295 100644
--- a/capi/geos_c.h.in
+++ b/capi/geos_c.h.in
@@ -570,6 +570,26 @@ enum GEOSBufJoinStyles {
 	GEOSBUF_JOIN_BEVEL = 3
 };
 
+/**
+* Output options for the GeoJSON writer.
+* \see GEOSGeoJSONWriter_create
+*/
+enum GEOSGeoJSONType {
+    /**
+    * Output only contains a geometry.
+    */
+	GEOSGEOJSON_GEOMETRY,
+    /**
+    * Output is a feature that contains the geometry.
+    */
+	GEOSGEOJSON_FEATURE,
+    /**
+    * Output contains multiple features in a FeatureCollection.
+    * Input must be a collection.
+    */
+	GEOSGEOJSON_FEATURE_COLLECTION
+};
+
 /** \see GEOSBufferParams_create */
 extern GEOSBufferParams GEOS_DLL *GEOSBufferParams_create_r(
     GEOSContextHandle_t handle);
@@ -1592,6 +1612,13 @@ typedef struct GEOSWKBWriter_t GEOSWKBWriter;
 */
 typedef struct GEOSGeoJSONReader_t GEOSGeoJSONReader;
 
+/**
+* Writer object to turn a Geometry into GeoJSON.
+* \see GEOSGeoJSONReader_create
+* \see GEOSGeoJSONReader_create_r
+*/
+typedef struct GEOSGeoJSONWriter_t GEOSGeoJSONWriter;
+
 #endif
 
 /* ========== WKT Reader ========== */
@@ -1748,11 +1775,29 @@ extern void GEOS_DLL GEOSGeoJSONReader_destroy_r(GEOSContextHandle_t handle,
     GEOSGeoJSONReader* reader);
 
 /** \see GEOSWKTReader_read */
-extern GEOSGeometry GEOS_DLL *GEOSGeoJSONReader_read_r(
+extern GEOSGeometry GEOS_DLL *GEOSGeoJSONReader_readGeometry_r(
     GEOSContextHandle_t handle,
     GEOSGeoJSONReader* reader,
     const char *geojson);
 
+/* ========== GeoJSON Writer ========== */
+
+/** \see GEOSGeoJSONWriter_create */
+extern GEOSGeoJSONWriter GEOS_DLL *GEOSGeoJSONWriter_create_r(
+    GEOSContextHandle_t handle);
+
+/** \see GEOSGeoJSONWriter_destroy */
+extern void GEOS_DLL GEOSGeoJSONWriter_destroy_r(GEOSContextHandle_t handle,
+    GEOSGeoJSONWriter* reader);
+
+/** \see GEOSWKTWriter_write */
+extern char GEOS_DLL *GEOSGeoJSONWriter_writeGeometry_r(
+    GEOSContextHandle_t handle,
+    GEOSGeoJSONWriter* writer,
+    const GEOSGeometry* g,
+    int type,
+    int indent);
+
 /** \see GEOSFree */
 extern void GEOS_DLL GEOSFree_r(
     GEOSContextHandle_t handle,
@@ -4287,10 +4332,38 @@ extern void GEOS_DLL GEOSGeoJSONReader_destroy(GEOSGeoJSONReader* reader);
 * \param geojson The json string to parse, caller retains ownership
 * \return A \ref GEOSGeometry, caller to free with GEOSGeometry_destroy())
 */
-extern GEOSGeometry GEOS_DLL *GEOSGeoJSONReader_read(
+extern GEOSGeometry GEOS_DLL *GEOSGeoJSONReader_readGeometry(
     GEOSGeoJSONReader* reader,
     const char *geojson);
 
+/* ========= GeoJSON Writer ========= */
+
+/**
+* Allocate a new \ref GEOSGeoJSONWriter.
+* \returns a new writer. Caller must free with GEOSGeoJSONWriter_destroy()
+*/
+extern GEOSGeoJSONWriter GEOS_DLL *GEOSGeoJSONWriter_create(void);
+
+/**
+* Free the memory associated with a \ref GEOSGeoJSONWriter.
+* \param writer The writer to destroy.
+*/
+extern void GEOS_DLL GEOSGeoJSONWriter_destroy(GEOSGeoJSONWriter* writer);
+
+/**
+* Write out the GeoJSON representation of a geometry.
+* \param writer A GeoJSON reader object, caller retains ownership.
+* \param geojson The json string to parse, caller retains ownership.
+* \param type The GeoJSON object type. See \ref GEOSGeoJSONType.
+* \param indent The indentation used. Use -1 for no formatting.
+* \return A \ref GEOSGeometry, caller to free with GEOSGeometry_destroy())
+*/
+extern char GEOS_DLL *GEOSGeoJSONWriter_writeGeometry(
+    GEOSGeoJSONWriter* writer,
+    const GEOSGeometry* g,
+    int type,
+    int indent);
+
 #endif /* #ifndef GEOS_USE_ONLY_R_API */
 
 /* ====================================================================== */
diff --git a/capi/geos_ts_c.cpp b/capi/geos_ts_c.cpp
index f621920..4917c8b 100644
--- a/capi/geos_ts_c.cpp
+++ b/capi/geos_ts_c.cpp
@@ -46,6 +46,7 @@
 #include <geos/io/WKTWriter.h>
 #include <geos/io/WKBWriter.h>
 #include <geos/io/GeoJSONReader.h>
+#include <geos/io/GeoJSONWriter.h>
 #include <geos/algorithm/BoundaryNodeRule.h>
 #include <geos/algorithm/MinimumBoundingCircle.h>
 #include <geos/algorithm/MinimumDiameter.h>
@@ -121,6 +122,7 @@
 #define GEOSWKBReader geos::io::WKBReader
 #define GEOSWKBWriter geos::io::WKBWriter
 #define GEOSGeoJSONReader geos::io::GeoJSONReader
+#define GEOSGeoJSONWriter geos::io::GeoJSONWriter
 
 // Implementation struct for the GEOSMakeValidParams object
 typedef struct {
@@ -161,6 +163,7 @@ using geos::io::WKTWriter;
 using geos::io::WKBReader;
 using geos::io::WKBWriter;
 using geos::io::GeoJSONReader;
+using geos::io::GeoJSONWriter;
 
 using geos::algorithm::distance::DiscreteFrechetDistance;
 using geos::algorithm::distance::DiscreteHausdorffDistance;
@@ -3067,7 +3070,7 @@ extern "C" {
     }
 
     Geometry*
-    GEOSGeoJSONReader_read_r(GEOSContextHandle_t extHandle, GEOSGeoJSONReader* reader, const char* geojson)
+    GEOSGeoJSONReader_readGeometry_r(GEOSContextHandle_t extHandle, GEOSGeoJSONReader* reader, const char* geojson)
     {
         return execute(extHandle, [&]() {
             const std::string geojsonstring(geojson);
@@ -3075,6 +3078,39 @@ extern "C" {
         });
     }
 
+    /* GeoJSON Writer */
+    GeoJSONWriter*
+    GEOSGeoJSONWriter_create_r(GEOSContextHandle_t extHandle)
+    {
+        using geos::io::GeoJSONWriter;
+
+        return execute(extHandle, [&]() {
+            return new GeoJSONWriter();
+        });
+    }
+
+    void
+    GEOSGeoJSONWriter_destroy_r(GEOSContextHandle_t extHandle, GEOSGeoJSONWriter* writer)
+    {
+        return execute(extHandle, [&]() {
+            delete writer;
+        });
+    }
+
+    char*
+    GEOSGeoJSONWriter_writeGeometry_r(GEOSContextHandle_t extHandle, GEOSGeoJSONWriter* writer, const GEOSGeometry* g, int type, int indent)
+    {
+        return execute(extHandle, [&]() {
+            std::string geojson;
+            if (indent >= 0) {
+                geojson = writer->writeFormatted(g, static_cast<geos::io::GeoJSONType>(type), indent);
+            } else {
+                geojson = writer->write(g, static_cast<geos::io::GeoJSONType>(type));
+            }
+            char* result = gstrdup(geojson);
+            return result;
+        });
+    }
 
 
 //-----------------------------------------------------------------
diff --git a/tests/unit/capi/GEOSGeomReadGeoJSONTest.cpp b/tests/unit/capi/GEOSGeomGeoJSONReadTest.cpp
similarity index 83%
rename from tests/unit/capi/GEOSGeomReadGeoJSONTest.cpp
rename to tests/unit/capi/GEOSGeomGeoJSONReadTest.cpp
index 14be31e..0b1f852 100644
--- a/tests/unit/capi/GEOSGeomReadGeoJSONTest.cpp
+++ b/tests/unit/capi/GEOSGeomGeoJSONReadTest.cpp
@@ -28,8 +28,8 @@ struct test_capigeosgeomreadgeojson_data : public capitest::utility {
     void
     test_geojson(std::string const& geojson, std::string const& wkt)
     {
-        geom1_ = GEOSGeoJSONReader_read(reader_, &geojson[0]);
-        ensure("GEOSGeoJSONReader_read failed to create geometry", nullptr != geom1_);
+        geom1_ = GEOSGeoJSONReader_readGeometry(reader_, &geojson[0]);
+        ensure("GEOSGeoJSONReader_readGeometry failed to create geometry", nullptr != geom1_);
         ensure_geometry_equals(geom1_, fromWKT(&wkt[0]));
     }
 };
@@ -37,7 +37,7 @@ struct test_capigeosgeomreadgeojson_data : public capitest::utility {
 typedef test_group<test_capigeosgeomreadgeojson_data> group;
 typedef group::object object;
 
-group test_capigeosgeomreadgeojson_group("capi::GEOSGeomReadGeoJSON");
+group test_capigeosgeomreadgeojson_group("capi::GEOSGeomGeoJSONRead");
 
 //
 // Test Cases
@@ -69,7 +69,7 @@ void object::test<3>
 ()
 {
     std::string geojson("<gml>NOT_GEO_JSON</gml>");
-    geom1_ = GEOSGeoJSONReader_read(reader_, &geojson[0]);
+    geom1_ = GEOSGeoJSONReader_readGeometry(reader_, &geojson[0]);
     ensure(geom1_ == nullptr);
 }
 }
diff --git a/tests/unit/capi/GEOSGeomGeoJSONWriteTest.cpp b/tests/unit/capi/GEOSGeomGeoJSONWriteTest.cpp
new file mode 100644
index 0000000..6554ece
--- /dev/null
+++ b/tests/unit/capi/GEOSGeomGeoJSONWriteTest.cpp
@@ -0,0 +1,79 @@
+//
+// Test Suite for C-API GEOSGeoJSONReader_read
+
+#include <tut/tut.hpp>
+
+#include "capi_test_utils.h"
+
+namespace tut {
+//
+// Test Group
+//
+
+// Common data used in test cases.
+struct test_capigeosgeomwritegeojson_data : public capitest::utility {
+    GEOSGeoJSONWriter* writer_;
+
+    test_capigeosgeomwritegeojson_data() : writer_(nullptr)
+    {
+        writer_ = GEOSGeoJSONWriter_create();
+    }
+
+    ~test_capigeosgeomwritegeojson_data()
+    {
+        GEOSGeoJSONWriter_destroy(writer_);
+        writer_ = nullptr;
+    }
+
+    void
+    test_geojson(std::string const& wkt, std::string const& expected, int type, int indent)
+    {
+        geom1_ = fromWKT(&wkt[0]);
+        char* geojson_c = GEOSGeoJSONWriter_writeGeometry(writer_, geom1_, type, indent);
+        ensure("GEOSGeoJSONWriter_writeGeometry failed to create GeoJSON", nullptr != geojson_c);
+
+        std::string actual(geojson_c);
+        free(geojson_c);
+        ensure_equals(actual, expected);
+    }
+};
+
+typedef test_group<test_capigeosgeomwritegeojson_data> group;
+typedef group::object object;
+
+group test_capigeosgeomwritegeojson_group("capi::GEOSGeomGeoJSONWrite");
+
+//
+// Test Cases
+//
+
+template<>
+template<>
+void object::test<1>
+()
+{
+    std::string wkt("POINT(-117.0 33.0)");
+    std::string expected("{\"type\":\"Point\",\"coordinates\":[-117.0,33.0]}");
+    test_geojson(wkt, expected, GEOSGEOJSON_GEOMETRY, -1);
+}
+
+template<>
+template<>
+void object::test<2>
+()
+{
+    std::string wkt("POINT(-117.0 33.0)");
+    std::string expected("{\"type\":\"Feature\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[-117.0,33.0]}}");
+    test_geojson(wkt, expected, GEOSGEOJSON_FEATURE, -1);
+}
+
+template<>
+template<>
+void object::test<3>
+()
+{
+    std::string wkt("GEOMETRYCOLLECTION (POINT (-117.000 33.000), POINT (-122.000 45.000))");
+    std::string expected("{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[-117.0,33.0]}},{\"type\":\"Feature\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[-122.0,45.0]}}]}");
+    test_geojson(wkt, expected, GEOSGEOJSON_FEATURE_COLLECTION, -1);
+}
+}

commit 280f7348d4ad686da16ce7afe46f8d2606ec3f51
Author: caspervdw <caspervdw at gmail.com>
Date:   Sat May 29 14:21:52 2021 +0200

    Docstrings

diff --git a/capi/geos_c.h.in b/capi/geos_c.h.in
index 219f807..421ed55 100644
--- a/capi/geos_c.h.in
+++ b/capi/geos_c.h.in
@@ -1586,7 +1586,7 @@ typedef struct GEOSWKBReader_t GEOSWKBReader;
 typedef struct GEOSWKBWriter_t GEOSWKBWriter;
 
 /**
-* Reader object to read GeoJSON format and construct a GeometryCollection.
+* Reader object to read GeoJSON format and construct a Geometry.
 * \see GEOSGeoJSONReader_create
 * \see GEOSGeoJSONReader_create_r
 */
@@ -4280,8 +4280,9 @@ extern GEOSGeoJSONReader GEOS_DLL *GEOSGeoJSONReader_create(void);
 extern void GEOS_DLL GEOSGeoJSONReader_destroy(GEOSGeoJSONReader* reader);
 
 /**
-* Use a reader to parse a GeoJSON containing a featurecollection,
-* and return geometrycollection. Feature properties are not read.
+* Use a reader to parse a GeoJSON. A single geometry or feature is,
+* converted into a geometry. A featurecollection is converted into a
+* geometrycollection. Feature properties are not read.
 * \param reader A GeoJSON reader object, caller retains ownership
 * \param geojson The json string to parse, caller retains ownership
 * \return A \ref GEOSGeometry, caller to free with GEOSGeometry_destroy())

commit 7a6f6c66b558784d1d8f97853bf4d2c7b5bdbd70
Author: caspervdw <caspervdw at gmail.com>
Date:   Thu May 27 21:59:40 2021 +0200

    Clean

diff --git a/tests/unit/capi/GEOSGeomReadGeoJSONTest.cpp b/tests/unit/capi/GEOSGeomReadGeoJSONTest.cpp
index 847450e..14be31e 100644
--- a/tests/unit/capi/GEOSGeomReadGeoJSONTest.cpp
+++ b/tests/unit/capi/GEOSGeomReadGeoJSONTest.cpp
@@ -1,8 +1,7 @@
 //
-// Test Suite for C-API GEOSGeomFromWKB
+// Test Suite for C-API GEOSGeoJSONReader_read
 
 #include <tut/tut.hpp>
-#include <utility.h> // wkb_hex_decoder
 
 #include "capi_test_utils.h"
 

commit 74fbee9cb0dd41acf34e0c2c8eba09a53566a370
Author: caspervdw <caspervdw at gmail.com>
Date:   Thu May 27 21:56:07 2021 +0200

    Fix tests

diff --git a/capi/geos_ts_c.cpp b/capi/geos_ts_c.cpp
index fbbf4b1..f621920 100644
--- a/capi/geos_ts_c.cpp
+++ b/capi/geos_ts_c.cpp
@@ -3054,7 +3054,7 @@ extern "C" {
 
         return execute(extHandle, [&]() {
             GEOSContextHandleInternal_t *handle = reinterpret_cast<GEOSContextHandleInternal_t *>(extHandle);
-            return new GeoJSONReader(*(GeometryFactory *) handle->geomFactory);
+            return new GeoJSONReader(*(GeometryFactory*)handle->geomFactory);
         });
     }
 
diff --git a/tests/unit/capi/GEOSGeomReadGeoJSONTest.cpp b/tests/unit/capi/GEOSGeomReadGeoJSONTest.cpp
index 6a34582..847450e 100644
--- a/tests/unit/capi/GEOSGeomReadGeoJSONTest.cpp
+++ b/tests/unit/capi/GEOSGeomReadGeoJSONTest.cpp
@@ -14,28 +14,24 @@ namespace tut {
 // Common data used in test cases.
 struct test_capigeosgeomreadgeojson_data : public capitest::utility {
     GEOSGeoJSONReader* reader_;
-    GEOSWKTReader* wkt_reader_;
 
-    test_capigeosgeomreadgeojson_data() : reader_(nullptr), wkt_reader_(nullptr)
+    test_capigeosgeomreadgeojson_data() : reader_(nullptr)
     {
         reader_ = GEOSGeoJSONReader_create();
-        wkt_reader_ = GEOSWKTReader_create();
     }
 
     ~test_capigeosgeomreadgeojson_data()
     {
         GEOSGeoJSONReader_destroy(reader_);
-        GEOSWKTReader_destroy(wkt_reader_);
         reader_ = nullptr;
-        wkt_reader_ = nullptr;
     }
 
     void
     test_geojson(std::string const& geojson, std::string const& wkt)
     {
         geom1_ = GEOSGeoJSONReader_read(reader_, &geojson[0]);
-        expected_ = GEOSWKTReader_read(wkt_reader_, &wkt[0]);
-        ensure_geometry_equals(geom1_, expected_);
+        ensure("GEOSGeoJSONReader_read failed to create geometry", nullptr != geom1_);
+        ensure_geometry_equals(geom1_, fromWKT(&wkt[0]));
     }
 };
 
@@ -53,9 +49,28 @@ template<>
 void object::test<1>
 ()
 {
-    // POINT(1.234 5.678)
-    std::string geojson(R"({"type":"FeatureCollection","features":[{"type":"Feature","properties":{},"geometry":{"type":"Point","coordinates":[1.234,5.678]}}])");
-    std::string wkt("GEOMETRYCOLLECTION(POINT(1.234 5.678))");
+    std::string geojson("{\"type\":\"Point\",\"coordinates\":[-117.0,33.0]}");
+    std::string wkt("POINT(-117.0 33.0)");
     test_geojson(geojson, wkt);
 }
+
+template<>
+template<>
+void object::test<2>
+()
+{
+    std::string geojson("{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[-117.0,33.0]}},{\"type\":\"Feature\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[-122.0,45.0]}}]}");
+    std::string wkt("GEOMETRYCOLLECTION (POINT (-117.000 33.000), POINT (-122.000 45.000))");
+    test_geojson(geojson, wkt);
+}
+
+template<>
+template<>
+void object::test<3>
+()
+{
+    std::string geojson("<gml>NOT_GEO_JSON</gml>");
+    geom1_ = GEOSGeoJSONReader_read(reader_, &geojson[0]);
+    ensure(geom1_ == nullptr);
+}
 }

commit 569969f1e5095ae1cc04c436ca0632734586a59d
Author: caspervdw <caspervdw at gmail.com>
Date:   Wed May 26 13:47:22 2021 +0200

    Test segfaults

diff --git a/capi/geos_ts_c.cpp b/capi/geos_ts_c.cpp
index bae3b43..fbbf4b1 100644
--- a/capi/geos_ts_c.cpp
+++ b/capi/geos_ts_c.cpp
@@ -3054,7 +3054,7 @@ extern "C" {
 
         return execute(extHandle, [&]() {
             GEOSContextHandleInternal_t *handle = reinterpret_cast<GEOSContextHandleInternal_t *>(extHandle);
-            return new GeoJSONReader((GeometryFactory *) handle->geomFactory);
+            return new GeoJSONReader(*(GeometryFactory *) handle->geomFactory);
         });
     }
 
diff --git a/tests/unit/capi/GEOSGeomReadGeoJSONTest.cpp b/tests/unit/capi/GEOSGeomReadGeoJSONTest.cpp
index 2080ecd..6a34582 100644
--- a/tests/unit/capi/GEOSGeomReadGeoJSONTest.cpp
+++ b/tests/unit/capi/GEOSGeomReadGeoJSONTest.cpp
@@ -13,24 +13,29 @@ namespace tut {
 
 // Common data used in test cases.
 struct test_capigeosgeomreadgeojson_data : public capitest::utility {
-    GEOSWKTReader* reader_;
+    GEOSGeoJSONReader* reader_;
+    GEOSWKTReader* wkt_reader_;
 
-    test_capigeosgeomreadgeojson_data() : reader_(nullptr)
+    test_capigeosgeomreadgeojson_data() : reader_(nullptr), wkt_reader_(nullptr)
     {
         reader_ = GEOSGeoJSONReader_create();
+        wkt_reader_ = GEOSWKTReader_create();
     }
 
     ~test_capigeosgeomreadgeojson_data()
     {
         GEOSGeoJSONReader_destroy(reader_);
+        GEOSWKTReader_destroy(wkt_reader_);
         reader_ = nullptr;
+        wkt_reader_ = nullptr;
     }
 
     void
     test_geojson(std::string const& geojson, std::string const& wkt)
     {
-        geom1_ = GEOSGeoJSONReader_read(&geojson[0]);
-        // TODO: Update test to compare with WKT-based geometry
+        geom1_ = GEOSGeoJSONReader_read(reader_, &geojson[0]);
+        expected_ = GEOSWKTReader_read(wkt_reader_, &wkt[0]);
+        ensure_geometry_equals(geom1_, expected_);
     }
 };
 
@@ -49,7 +54,8 @@ void object::test<1>
 ()
 {
     // POINT(1.234 5.678)
-    std::string geojson('{"type":"FeatureCollection","features":[{"type":"Feature","properties":{},"geometry":{"type":"Point","coordinates":[5.05,48.37]}}]');
-    std::string wkt("GEOMETRYCOLLECTION(POINT(5.05 48.37))");
+    std::string geojson(R"({"type":"FeatureCollection","features":[{"type":"Feature","properties":{},"geometry":{"type":"Point","coordinates":[1.234,5.678]}}])");
+    std::string wkt("GEOMETRYCOLLECTION(POINT(1.234 5.678))");
     test_geojson(geojson, wkt);
 }
+}

commit 33627f9d30abb210fef408a1f0fc33a082dd695f
Author: caspervdw <caspervdw at gmail.com>
Date:   Tue May 25 22:05:50 2021 +0200

    Some missing includes

diff --git a/capi/geos_c.cpp b/capi/geos_c.cpp
index af03335..8092fb6 100644
--- a/capi/geos_c.cpp
+++ b/capi/geos_c.cpp
@@ -21,6 +21,7 @@
 #include <geos/io/WKBReader.h>
 #include <geos/io/WKTWriter.h>
 #include <geos/io/WKBWriter.h>
+#include <geos/io/GeoJSONReader.h>
 #include <geos/util/Interrupt.h>
 
 #include <stdexcept>
diff --git a/capi/geos_ts_c.cpp b/capi/geos_ts_c.cpp
index fe8b71a..bae3b43 100644
--- a/capi/geos_ts_c.cpp
+++ b/capi/geos_ts_c.cpp
@@ -120,6 +120,7 @@
 #define GEOSWKTWriter geos::io::WKTWriter
 #define GEOSWKBReader geos::io::WKBReader
 #define GEOSWKBWriter geos::io::WKBWriter
+#define GEOSGeoJSONReader geos::io::GeoJSONReader
 
 // Implementation struct for the GEOSMakeValidParams object
 typedef struct {
@@ -159,6 +160,7 @@ using geos::io::WKTReader;
 using geos::io::WKTWriter;
 using geos::io::WKBReader;
 using geos::io::WKBWriter;
+using geos::io::GeoJSONReader;
 
 using geos::algorithm::distance::DiscreteFrechetDistance;
 using geos::algorithm::distance::DiscreteHausdorffDistance;
@@ -3057,7 +3059,7 @@ extern "C" {
     }
 
     void
-    GeoJSONReader_destroy_r(GEOSContextHandle_t extHandle, GeoJSONReader* reader)
+    GEOSGeoJSONReader_destroy_r(GEOSContextHandle_t extHandle, GEOSGeoJSONReader* reader)
     {
         return execute(extHandle, [&]() {
             delete reader;
@@ -3065,11 +3067,11 @@ extern "C" {
     }
 
     Geometry*
-    GeoJSONReader_read_r(GEOSContextHandle_t extHandle, GeoJSONReader* reader, const char* geojson)
+    GEOSGeoJSONReader_read_r(GEOSContextHandle_t extHandle, GEOSGeoJSONReader* reader, const char* geojson)
     {
         return execute(extHandle, [&]() {
-            auto geojson_obj = geos_nlohmann::json::parse(geojson);
-            return reader->readFeatureCollectionForGeometry(geojson_obj).release();
+            const std::string geojsonstring(geojson);
+            return reader->read(geojsonstring).release();
         });
     }
 

commit 8f5e9262e3c98f814f1ab5aae33bbb5b0af5f054
Author: caspervdw <caspervdw at gmail.com>
Date:   Tue May 25 21:50:58 2021 +0200

    C API plus tests

diff --git a/capi/geos_c.cpp b/capi/geos_c.cpp
index 650f8eb..af03335 100644
--- a/capi/geos_c.cpp
+++ b/capi/geos_c.cpp
@@ -39,6 +39,7 @@
 #define GEOSWKTWriter geos::io::WKTWriter
 #define GEOSWKBReader geos::io::WKBReader
 #define GEOSWKBWriter geos::io::WKBWriter
+#define GEOSGeoJSONReader geos::io::GeoJSONReader
 typedef struct GEOSBufParams_t GEOSBufferParams;
 typedef struct GEOSMakeValidParams_t GEOSMakeValidParams;
 
@@ -70,6 +71,7 @@ using geos::io::WKTReader;
 using geos::io::WKTWriter;
 using geos::io::WKBReader;
 using geos::io::WKBWriter;
+using geos::io::GeoJSONReader;
 
 
 
@@ -1288,6 +1290,25 @@ extern "C" {
         GEOSWKBWriter_setIncludeSRID_r(handle, writer, newIncludeSRID);
     }
 
+    /* GeoJSON Reader */
+    GeoJSONReader*
+    GEOSGeoJSONReader_create()
+    {
+        return GEOSGeoJSONReader_create_r(handle);
+    }
+
+    void
+    GEOSGeoJSONReader_destroy(GeoJSONReader* reader)
+    {
+        GEOSGeoJSONReader_destroy_r(handle, reader);
+    }
+
+    Geometry*
+    GEOSGeoJSONReader_read(GeoJSONReader* reader, const char* geojson)
+    {
+        return GEOSGeoJSONReader_read_r(handle, reader, geojson);
+    }
+
 
 //-----------------------------------------------------------------
 // Prepared Geometry
diff --git a/capi/geos_ts_c.cpp b/capi/geos_ts_c.cpp
index 14ce229..fe8b71a 100644
--- a/capi/geos_ts_c.cpp
+++ b/capi/geos_ts_c.cpp
@@ -45,6 +45,7 @@
 #include <geos/io/WKBReader.h>
 #include <geos/io/WKTWriter.h>
 #include <geos/io/WKBWriter.h>
+#include <geos/io/GeoJSONReader.h>
 #include <geos/algorithm/BoundaryNodeRule.h>
 #include <geos/algorithm/MinimumBoundingCircle.h>
 #include <geos/algorithm/MinimumDiameter.h>
@@ -88,6 +89,7 @@
 #include <geos/util/Interrupt.h>
 #include <geos/util/UniqueCoordinateArrayFilter.h>
 #include <geos/util/Machine.h>
+#include "geos/vend/include_nlohmann_json.hpp"
 #include <geos/version.h>
 
 // This should go away
@@ -3042,6 +3044,36 @@ extern "C" {
         });
     }
 
+    /* GeoJSON Reader */
+    GeoJSONReader*
+    GEOSGeoJSONReader_create_r(GEOSContextHandle_t extHandle)
+    {
+        using geos::io::GeoJSONReader;
+
+        return execute(extHandle, [&]() {
+            GEOSContextHandleInternal_t *handle = reinterpret_cast<GEOSContextHandleInternal_t *>(extHandle);
+            return new GeoJSONReader((GeometryFactory *) handle->geomFactory);
+        });
+    }
+
+    void
+    GeoJSONReader_destroy_r(GEOSContextHandle_t extHandle, GeoJSONReader* reader)
+    {
+        return execute(extHandle, [&]() {
+            delete reader;
+        });
+    }
+
+    Geometry*
+    GeoJSONReader_read_r(GEOSContextHandle_t extHandle, GeoJSONReader* reader, const char* geojson)
+    {
+        return execute(extHandle, [&]() {
+            auto geojson_obj = geos_nlohmann::json::parse(geojson);
+            return reader->readFeatureCollectionForGeometry(geojson_obj).release();
+        });
+    }
+
+
 
 //-----------------------------------------------------------------
 // Prepared Geometry
diff --git a/tests/unit/capi/GEOSGeomReadGeoJSONTest.cpp b/tests/unit/capi/GEOSGeomReadGeoJSONTest.cpp
new file mode 100644
index 0000000..2080ecd
--- /dev/null
+++ b/tests/unit/capi/GEOSGeomReadGeoJSONTest.cpp
@@ -0,0 +1,55 @@
+//
+// Test Suite for C-API GEOSGeomFromWKB
+
+#include <tut/tut.hpp>
+#include <utility.h> // wkb_hex_decoder
+
+#include "capi_test_utils.h"
+
+namespace tut {
+//
+// Test Group
+//
+
+// Common data used in test cases.
+struct test_capigeosgeomreadgeojson_data : public capitest::utility {
+    GEOSWKTReader* reader_;
+
+    test_capigeosgeomreadgeojson_data() : reader_(nullptr)
+    {
+        reader_ = GEOSGeoJSONReader_create();
+    }
+
+    ~test_capigeosgeomreadgeojson_data()
+    {
+        GEOSGeoJSONReader_destroy(reader_);
+        reader_ = nullptr;
+    }
+
+    void
+    test_geojson(std::string const& geojson, std::string const& wkt)
+    {
+        geom1_ = GEOSGeoJSONReader_read(&geojson[0]);
+        // TODO: Update test to compare with WKT-based geometry
+    }
+};
+
+typedef test_group<test_capigeosgeomreadgeojson_data> group;
+typedef group::object object;
+
+group test_capigeosgeomreadgeojson_group("capi::GEOSGeomReadGeoJSON");
+
+//
+// Test Cases
+//
+
+template<>
+template<>
+void object::test<1>
+()
+{
+    // POINT(1.234 5.678)
+    std::string geojson('{"type":"FeatureCollection","features":[{"type":"Feature","properties":{},"geometry":{"type":"Point","coordinates":[5.05,48.37]}}]');
+    std::string wkt("GEOMETRYCOLLECTION(POINT(5.05 48.37))");
+    test_geojson(geojson, wkt);
+}

commit e077caa15b63a26c880c885dc079b3805d72b87d
Author: caspervdw <caspervdw at gmail.com>
Date:   Tue May 25 21:18:57 2021 +0200

    C API Headers

diff --git a/capi/geos_c.h.in b/capi/geos_c.h.in
index db72c40..219f807 100644
--- a/capi/geos_c.h.in
+++ b/capi/geos_c.h.in
@@ -1585,6 +1585,13 @@ typedef struct GEOSWKBReader_t GEOSWKBReader;
 */
 typedef struct GEOSWKBWriter_t GEOSWKBWriter;
 
+/**
+* Reader object to read GeoJSON format and construct a GeometryCollection.
+* \see GEOSGeoJSONReader_create
+* \see GEOSGeoJSONReader_create_r
+*/
+typedef struct GEOSGeoJSONReader_t GEOSGeoJSONReader;
+
 #endif
 
 /* ========== WKT Reader ========== */
@@ -1730,6 +1737,22 @@ extern void GEOS_DLL GEOSWKBWriter_setIncludeSRID_r(
     GEOSContextHandle_t handle,
     GEOSWKBWriter* writer, const char writeSRID);
 
+/* ========== GeoJSON Reader ========== */
+
+/** \see GEOSGeoJSONReader_create */
+extern GEOSGeoJSONReader GEOS_DLL *GEOSGeoJSONReader_create_r(
+    GEOSContextHandle_t handle);
+
+/** \see GEOSGeoJSONReader_destroy */
+extern void GEOS_DLL GEOSGeoJSONReader_destroy_r(GEOSContextHandle_t handle,
+    GEOSGeoJSONReader* reader);
+
+/** \see GEOSWKTReader_read */
+extern GEOSGeometry GEOS_DLL *GEOSGeoJSONReader_read_r(
+    GEOSContextHandle_t handle,
+    GEOSGeoJSONReader* reader,
+    const char *geojson);
+
 /** \see GEOSFree */
 extern void GEOS_DLL GEOSFree_r(
     GEOSContextHandle_t handle,
@@ -4242,6 +4265,31 @@ extern void GEOS_DLL GEOSWKBWriter_setIncludeSRID(
 */
 extern void GEOS_DLL GEOSFree(void *buffer);
 
+/* ========= GeoJSON Reader ========= */
+
+/**
+* Allocate a new \ref GEOSGeoJSONReader.
+* \returns a new reader. Caller must free with GEOSGeoJSONReader_destroy()
+*/
+extern GEOSGeoJSONReader GEOS_DLL *GEOSGeoJSONReader_create(void);
+
+/**
+* Free the memory associated with a \ref GEOSGeoJSONReader.
+* \param reader The reader to destroy.
+*/
+extern void GEOS_DLL GEOSGeoJSONReader_destroy(GEOSGeoJSONReader* reader);
+
+/**
+* Use a reader to parse a GeoJSON containing a featurecollection,
+* and return geometrycollection. Feature properties are not read.
+* \param reader A GeoJSON reader object, caller retains ownership
+* \param geojson The json string to parse, caller retains ownership
+* \return A \ref GEOSGeometry, caller to free with GEOSGeometry_destroy())
+*/
+extern GEOSGeometry GEOS_DLL *GEOSGeoJSONReader_read(
+    GEOSGeoJSONReader* reader,
+    const char *geojson);
+
 #endif /* #ifndef GEOS_USE_ONLY_R_API */
 
 /* ====================================================================== */

-----------------------------------------------------------------------

Summary of changes:
 capi/geos_c.cpp                              |  45 +++++++++++-
 capi/geos_c.h.in                             | 100 ++++++++++++++++++++++++++
 capi/geos_ts_c.cpp                           |  69 ++++++++++++++++++
 tests/unit/capi/GEOSGeomGeoJSONReadTest.cpp  |  75 +++++++++++++++++++
 tests/unit/capi/GEOSGeomGeoJSONWriteTest.cpp | 103 +++++++++++++++++++++++++++
 5 files changed, 391 insertions(+), 1 deletion(-)
 create mode 100644 tests/unit/capi/GEOSGeomGeoJSONReadTest.cpp
 create mode 100644 tests/unit/capi/GEOSGeomGeoJSONWriteTest.cpp


hooks/post-receive
-- 
GEOS


More information about the geos-commits mailing list