]> granicus.if.org Git - postgis/commitdiff
gserialized_from_lwgeom get rid of is_geodetic ignored arg ,
authorRegina Obe <lr@pcorp.us>
Mon, 30 Nov 2015 16:24:57 +0000 (16:24 +0000)
committerRegina Obe <lr@pcorp.us>
Mon, 30 Nov 2015 16:24:57 +0000 (16:24 +0000)
force geography_serialize to always return a geography
closes pull request #72
closes ticket #3361

git-svn-id: http://svn.osgeo.org/postgis/trunk@14453 b70326c6-7e19-0410-871a-916f4a2858ee

liblwgeom/cunit/cu_geodetic.c
liblwgeom/cunit/cu_libgeom.c
liblwgeom/cunit/cu_surface.c
liblwgeom/g_serialized.c
liblwgeom/liblwgeom.h.in
libpgcommon/lwgeom_pg.c
postgis/geography_measurement.c
postgis/lwgeom_dumppoints.c
postgis/lwgeom_geos.c
raster/rt_pg/rtpg_geometry.c

index 51d383dacd79576bb367b9bae9af78749e7bde87..fa0436f626235e5df39a5143b5b222b16c74ead7 100644 (file)
@@ -345,7 +345,7 @@ static LWGEOM* lwgeom_over_gserialized(char *wkt)
        GSERIALIZED *g;
 
        lwg = lwgeom_from_wkt(wkt, LW_PARSER_CHECK_NONE);
-       g = gserialized_from_lwgeom(lwg, 1, 0);
+       g = gserialized_from_lwgeom(lwg, 0);
        lwgeom_free(lwg);
        return lwgeom_from_gserialized(g);
 }
@@ -799,7 +799,7 @@ static LWGEOM* lwgeom_over_gserialized(char *wkt, GSERIALIZED **g)
 
        lwg = lwgeom_from_wkt(wkt, LW_PARSER_CHECK_NONE);
        FLAGS_SET_GEODETIC(lwg->flags, 1);
-       *g = gserialized_from_lwgeom(lwg, 1, 0);
+       *g = gserialized_from_lwgeom(lwg, 0);
        lwgeom_free(lwg);
        return lwgeom_from_gserialized(*g);
 }
@@ -901,7 +901,7 @@ static void test_gserialized_from_lwgeom(void)
 
        geom = lwgeom_from_wkt("POINT(0 0.2)", LW_PARSER_CHECK_NONE);
        FLAGS_SET_GEODETIC(geom->flags, 1);
-       g = gserialized_from_lwgeom(geom, 1, 0);
+       g = gserialized_from_lwgeom(geom,  0);
        type = gserialized_get_type(g);
        CU_ASSERT_EQUAL( type, POINTTYPE );
        inspect = (double*)g;
@@ -911,7 +911,7 @@ static void test_gserialized_from_lwgeom(void)
 
        geom = lwgeom_from_wkt("POLYGON((-1 -1, -1 2.5, 2 2, 2 -1, -1 -1), (0 0, 0 1, 1 1, 1 0, 0 0))", LW_PARSER_CHECK_NONE);
        FLAGS_SET_GEODETIC(geom->flags, 1);
-       g = gserialized_from_lwgeom(geom, 1, 0);
+       g = gserialized_from_lwgeom(geom, 0);
        type = gserialized_get_type(g);
        CU_ASSERT_EQUAL( type, POLYGONTYPE );
        inspect = (double*)g;
@@ -921,7 +921,7 @@ static void test_gserialized_from_lwgeom(void)
 
        geom = lwgeom_from_wkt("MULTILINESTRING((0 0, 1 1),(0 0.1, 1 1))", LW_PARSER_CHECK_NONE);
        FLAGS_SET_GEODETIC(geom->flags, 1);
-       g = gserialized_from_lwgeom(geom, 1, 0);
+       g = gserialized_from_lwgeom(geom, 0);
        type = gserialized_get_type(g);
        CU_ASSERT_EQUAL( type, MULTILINETYPE );
        inspect = (double*)g;
index 6fb3187d1e765f85ec44981d37c0424d8a84f787..accf7d2a7e9b8521439cd4b722efcc7d2084725b 100644 (file)
@@ -283,7 +283,7 @@ static void test_lwgeom_from_gserialized(void)
                geom = lwgeom_from_wkt(in_ewkt, LW_PARSER_CHECK_NONE);
                lwgeom_add_bbox(geom);
                if ( geom->bbox ) gbox_float_round(geom->bbox);
-               g = gserialized_from_lwgeom(geom, 0, 0);
+               g = gserialized_from_lwgeom(geom, 0);
 
                geom2 = lwgeom_from_gserialized(g);
                out_ewkt = lwgeom_to_ewkt(geom2);
@@ -337,7 +337,7 @@ static void test_gserialized_is_empty(void)
        {
                // i = 11;
                LWGEOM *lw = lwgeom_from_wkt(cases[i].wkt, LW_PARSER_CHECK_NONE);
-               GSERIALIZED *g = gserialized_from_lwgeom(lw, 0, 0);
+               GSERIALIZED *g = gserialized_from_lwgeom(lw, 0);
                int ie = gserialized_is_empty(g);
                // printf("%s: we say %d, they say %d\n", cases[i].wkt, cases[i].isempty, ie);
                CU_ASSERT_EQUAL(ie, cases[i].isempty);
@@ -420,7 +420,7 @@ static void test_on_gser_lwgeom_count_vertices(void)
 
        lwgeom = lwgeom_from_wkt("MULTIPOINT(-1 -1,-1 2.5,2 2,2 -1,1 1,2 2,4 5)", LW_PARSER_CHECK_NONE);
        CU_ASSERT_EQUAL(lwgeom_count_vertices(lwgeom),7);
-       g_ser1 = gserialized_from_lwgeom(lwgeom, 1, &ret_size);
+       g_ser1 = gserialized_from_lwgeom(lwgeom, &ret_size);
        lwgeom_free(lwgeom);
 
        lwgeom = lwgeom_from_gserialized(g_ser1);
@@ -1055,7 +1055,7 @@ void test_gbox_same_2d(void)
     /* Serializing a GBOX with precise coordinates renders the boxes not strictly equal,
      * but still equal according to gbox_same_2d_float.
      */
-    GSERIALIZED* s3 = gserialized_from_lwgeom(g3, LW_FALSE, NULL);
+    GSERIALIZED* s3 = gserialized_from_lwgeom(g3, NULL);
     GBOX s3box;
     gserialized_read_gbox_p(s3, &s3box);
 
index bf3c2713868d4ea756b391079d5928fbbd82c7ec..4adaa7f4844d22b033f325387c55ba774324e42d 100644 (file)
@@ -99,7 +99,7 @@ void triangle_parse(void)
 
        /* geography support */
        geom = lwgeom_from_wkt("TRIANGLE((0 1 2,3 4 5,6 7 8,0 1 2))", LW_PARSER_CHECK_NONE);
-       g = gserialized_from_lwgeom(geom, 1, 0);
+       g = gserialized_from_lwgeom(geom, 0);
        CU_ASSERT_EQUAL(gserialized_get_type(g), TRIANGLETYPE);
        lwgeom_free(geom);
        lwfree(g);
@@ -225,7 +225,7 @@ void tin_parse(void)
 
        /* geography support */
        geom = lwgeom_from_wkt("TIN(((0 1 2,3 4 5,6 7 8,0 1 2)))", LW_PARSER_CHECK_NONE);
-       g = gserialized_from_lwgeom(geom, 1, 0);
+       g = gserialized_from_lwgeom(geom, 0);
        CU_ASSERT_EQUAL(gserialized_get_type(g), TINTYPE);
        lwgeom_free(geom);
        lwfree(g);
@@ -362,7 +362,7 @@ void polyhedralsurface_parse(void)
 
        /* geography support */
        geom = lwgeom_from_wkt("POLYHEDRALSURFACE(((0 1 2,3 4 5,6 7 8,0 1 2)))", LW_PARSER_CHECK_NONE);
-       g = gserialized_from_lwgeom(geom, 1, 0);
+       g = gserialized_from_lwgeom(geom, 0);
        CU_ASSERT_EQUAL(gserialized_get_type(g), POLYHEDRALSURFACETYPE);
        lwgeom_free(geom);
        lwfree(g);
index ced4177b2804f5b05be41a7c697a7dd4a0cf873f..a5aa9996198a220dc689d01c9d3b4363c28f01ae 100644 (file)
@@ -903,7 +903,7 @@ static size_t gserialized_from_gbox(const GBOX *gbox, uint8_t *buf)
 
 /* Public function */
 
-GSERIALIZED* gserialized_from_lwgeom(LWGEOM *geom, int is_geodetic, size_t *size)
+GSERIALIZED* gserialized_from_lwgeom(LWGEOM *geom, size_t *size)
 {
        size_t expected_size = 0;
        size_t return_size = 0;
index 84abc520b4f35a317ff39be609ef8e01530cd22a..46cf6ed79752a5bb91dadda5442d0a2dea435a67 100644 (file)
@@ -1900,7 +1900,7 @@ extern size_t gserialized_from_lwgeom_size(const LWGEOM *geom);
 * will contain the size of the final output, which is useful for setting the PgSQL 
 * VARSIZE information.
 */
-extern GSERIALIZED* gserialized_from_lwgeom(LWGEOM *geom, int is_geodetic, size_t *size);
+extern GSERIALIZED* gserialized_from_lwgeom(LWGEOM *geom, size_t *size);
 
 /**
 * Allocate a new #LWGEOM from a #GSERIALIZED. The resulting #LWGEOM will have coordinates
index b989c3d3c5fedd257a5da54773ef216e3af7cfbf..14eac85d967c1642713456676a741bdafa4592f6 100644 (file)
@@ -217,11 +217,12 @@ pg_install_lwgeom_handlers(void)
 */
 GSERIALIZED* geography_serialize(LWGEOM *lwgeom)
 {
-       static int is_geodetic = 1;
        size_t ret_size = 0;
        GSERIALIZED *g = NULL;
+       /** force to geodetic in case it's not **/
+       lwgeom_set_geodetic(lwgeom, true);
 
-       g = gserialized_from_lwgeom(lwgeom, is_geodetic, &ret_size);
+       g = gserialized_from_lwgeom(lwgeom,  &ret_size);
        if ( ! g ) lwpgerror("Unable to serialize lwgeom.");
        SET_VARSIZE(g, ret_size);
        return g;
@@ -234,11 +235,10 @@ GSERIALIZED* geography_serialize(LWGEOM *lwgeom)
 */
 GSERIALIZED* geometry_serialize(LWGEOM *lwgeom)
 {
-       static int is_geodetic = 0;
        size_t ret_size = 0;
        GSERIALIZED *g = NULL;
 
-       g = gserialized_from_lwgeom(lwgeom, is_geodetic, &ret_size);
+       g = gserialized_from_lwgeom(lwgeom, &ret_size);
        if ( ! g ) lwpgerror("Unable to serialize lwgeom.");
        SET_VARSIZE(g, ret_size);
        return g;
index d5d4804d36b8f96a856d6251a091d5627527ad93..45ce96b169fea98dd0fed59f6cdf96d87cb9879b 100644 (file)
@@ -673,7 +673,7 @@ Datum geography_point_outside(PG_FUNCTION_ARGS)
        GSERIALIZED *g = NULL;
        GSERIALIZED *g_out = NULL;
        size_t g_out_size;
-       LWPOINT *lwpoint = NULL;
+       LWGEOM *lwpoint = NULL;
        POINT2D pt;
 
        /* Get our geometry object loaded into memory. */
@@ -691,9 +691,12 @@ Datum geography_point_outside(PG_FUNCTION_ARGS)
        /* Get an exterior point, based on this gbox */
        gbox_pt_outside(&gbox, &pt);
 
-       lwpoint = lwpoint_make2d(4326, pt.x, pt.y);
-
-       g_out = gserialized_from_lwgeom((LWGEOM*)lwpoint, 1, &g_out_size);
+       lwpoint = (LWGEOM*) lwpoint_make2d(4326, pt.x, pt.y);
+       /* TODO: Investigate where this is used, this was probably not 
+       * returning a geography object before. How did this miss checking
+       */
+       lwgeom_set_geodetic(lwpoint, true);
+       g_out = gserialized_from_lwgeom(lwpoint, &g_out_size);
        SET_VARSIZE(g_out, g_out_size);
 
        PG_FREE_IF_COPY(g, 0);
index 7c2757834bababc6a0a844b808c09695c2e13daf..d9d984b54e9f43e38758ecb0d21449b6d9c9226a 100644 (file)
@@ -233,7 +233,7 @@ Datum LWGEOM_dumppoints(PG_FUNCTION_ARGS) {
                                pathpt[0] = PointerGetDatum(construct_array(state->path, state->pathlen+1,
                                                INT4OID, state->typlen, state->byval, state->align));
                                
-                               pathpt[1] = PointerGetDatum(gserialized_from_lwgeom((LWGEOM*)lwpoint,0,0));
+                               pathpt[1] = PointerGetDatum(gserialized_from_lwgeom((LWGEOM*)lwpoint,0));
                                
                                tuple = heap_form_tuple(funcctx->tuple_desc, pathpt, isnull);
                                result = HeapTupleGetDatum(tuple);
index 9efc12538e8fc1bf0d67495ef1409c7008893284..b22f1c7078ec0982da132f785f8093fd859c69a8 100644 (file)
@@ -1375,7 +1375,7 @@ Datum ST_OffsetCurve(PG_FUNCTION_ARGS)
        if (lwgeom_result == NULL)
                lwpgerror("ST_OffsetCurve: lwgeom_offsetcurve returned NULL");
 
-       gser_result = gserialized_from_lwgeom(lwgeom_result, 0, 0);
+       gser_result = gserialized_from_lwgeom(lwgeom_result, 0);
        lwgeom_free(lwgeom_input);
        lwgeom_free(lwgeom_result);
        PG_RETURN_POINTER(gser_result);
@@ -3566,7 +3566,7 @@ Datum cluster_within_distance_garray(PG_FUNCTION_ARGS)
        result_array_data = palloc(nclusters * sizeof(Datum));
        for (i=0; i<nclusters; ++i)
        {
-               result_array_data[i] = PointerGetDatum(gserialized_from_lwgeom(lw_results[i], 0, NULL));
+               result_array_data[i] = PointerGetDatum(gserialized_from_lwgeom(lw_results[i], NULL));
                lwgeom_free(lw_results[i]);
        }
        pfree(lw_results);
index abff53cffb6b29d06af6859704d88053ebad3dfb..72d7910b7129b0d972c9707694a5f3599c36efc4 100644 (file)
@@ -102,7 +102,7 @@ Datum RASTER_envelope(PG_FUNCTION_ARGS)
                PG_RETURN_NULL();
        }
 
-       gser = gserialized_from_lwgeom(geom, 0, &gser_size);
+       gser = gserialized_from_lwgeom(geom, &gser_size);
        lwgeom_free(geom);
 
        SET_VARSIZE(gser, gser_size);
@@ -181,7 +181,7 @@ Datum RASTER_convex_hull(PG_FUNCTION_ARGS)
                PG_RETURN_NULL();
        }
 
-       gser = gserialized_from_lwgeom(geom, 0, &gser_size);
+       gser = gserialized_from_lwgeom(geom, &gser_size);
        lwgeom_free(geom);
 
        SET_VARSIZE(gser, gser_size);
@@ -323,7 +323,7 @@ Datum RASTER_dumpAsPolygons(PG_FUNCTION_ARGS) {
                memset(nulls, FALSE, sizeof(bool) * values_length);
 
                /* convert LWGEOM to GSERIALIZED */
-               gser = gserialized_from_lwgeom(lwpoly_as_lwgeom(geomval2[call_cntr].geom), 0, &gser_size);
+               gser = gserialized_from_lwgeom(lwpoly_as_lwgeom(geomval2[call_cntr].geom), &gser_size);
                lwgeom_free(lwpoly_as_lwgeom(geomval2[call_cntr].geom));
 
                values[0] = PointerGetDatum(gser);
@@ -625,7 +625,7 @@ Datum RASTER_getPixelPolygons(PG_FUNCTION_ARGS)
                memset(nulls, FALSE, sizeof(bool) * values_length);
 
                /* convert LWGEOM to GSERIALIZED */
-               gser = gserialized_from_lwgeom(pix2[call_cntr].geom, 0, &gser_size);
+               gser = gserialized_from_lwgeom(pix2[call_cntr].geom, &gser_size);
                lwgeom_free(pix2[call_cntr].geom);
 
                values[0] = PointerGetDatum(gser);