Opened 6 years ago

Closed 6 years ago

Last modified 6 years ago

#1996 closed defect (fixed)

ST_AsGeoJSON('POINT EMPTY') produces invalid JSON

Reported by: cdestigter Owned by: pramsey
Priority: medium Milestone: PostGIS 2.1.0
Component: postgis Version: trunk
Keywords: Cc:

Description

This one's valid:

    # select st_asgeojson('GEOMETRYCOLLECTION EMPTY'::geometry);
                     st_asgeojson                  
    -----------------------------------------------
     {"type":"GeometryCollection","geometries":[]}
    (1 row)

This one's not:

    # select st_asgeojson('POINT EMPTY'::geometry);
              st_asgeojson           
    ---------------------------------
     {"type":"Point","coordinates":}
    (1 row)

I understand that POINT EMPTY isn't valid as WKB, but that shouldn't affect its ability to produce valid JSON. Even it means it comes out as MULTIPOINT EMPTY instead.

The other empty geometry types seem to be fine, only POINT is affected.

POSTGIS="2.1.0SVN r10262" GEOS="3.3.3-CAPI-1.7.4" PROJ="Rel. 4.7.1, 23 September 2009" LIBXML="2.7.6"

PostgreSQL 9.0.6 on x86_64-pc-linux-gnu, compiled by GCC gcc-4.4.real (Ubuntu 4.4.3-4ubuntu5) 4.4.3, 64-bit

Change History (3)

comment:1 Changed 6 years ago by pramsey

Hm, this is an interesting question... given that a non-empty point returns this

 {"type":"Point","coordinates":[0,0]}

and a non-empty linestring returns this

{"type":"LineString","coordinates":[[0,0],[1,1]]}

I would expect the empty linestring to return an array with zero elements, but the coordinates type for the point is not an array, it's just a coordinate. So we'd be returning an empty array (dimensionality 1) in the empty case, but a singleton coordinate (dimensionality 0) in the non-empty case. If that's OK, we can do it. Unfortunately, looks like there is not any official guidance on what to do for empty.

comment:2 Changed 6 years ago by pramsey

Resolution: fixed
Status: newclosed

Fixed in 2.0 at r10627 and trunk at r10628

comment:3 Changed 6 years ago by pramsey

Regardless of the odd dimensionality of the structure, using an empty array at least allows code to blindly test for length==0 as an isEmpty test. Went with that fix as suggested by original filer.

Note: See TracTickets for help on using tickets.