3

I have a MultiPolygon representation of some shapes in POSTGIS, I am trying to convert them to Polygon data.

I tried, st_geometryn(r.geom, 1) but that didnt work because the way polygons are embedded I think. Just returns a partial.

Tried ST_ConcaveHull(ST_Collect(r.geom), 0.99), no luck returns nothing

Tried:

SELECT f.gid, ST_AsGeoJSON(ST_Union(f.geom)) as singlegeom FROM (SELECT gid, 
       (ST_Dump(geom)).geom As geom FROM public.nyc_boroughs ) As f GROUP BY gid" 

but getting back to Multi Polygon,

I feel like a little bit of direction could help me figure out.

Data is here http://www.sendspace.com/file/2savyw

urcm
  • 22,533
  • 4
  • 57
  • 109
Igal Nassima
  • 31
  • 1
  • 2

1 Answers1

3

The polygons features are indeed multipart, so st_geometryn(r.geom, 1) will discard data.

If you are just trying to get the footprint for the polygon(s), use ST_ConvexHull(r.geom). Or to apply this only to true multi-part geometries, but keep single-part:

SELECT
  CASE
    WHEN ST_NumGeometries(r.geom) > 1 THEN
      ST_ConvexHull(r.geom)
    ELSE
      ST_GeometryN(r.geom, 1)
  END AS geom
FROM mytable AS r
...

Warning: the former multi-part geometries might look funny.

Mike T
  • 42,095
  • 10
  • 126
  • 187
  • Thank you for the response, I just realized ST_ConcaveHull is only available at v2.0+, and ST_ConvexHull is not precise enough for what I need. (see http://bit.ly/129VmAo). I am gonna upgrade, test will post results. – Igal Nassima Dec 13 '12 at 07:22
  • 2
    upgraded to 2.0 and used ST_ConcaveHull, works pretty well, here is a result http://bit.ly/Zm3uOz – Igal Nassima Dec 13 '12 at 20:31
  • 1
    Yup, that certainly looks good. However, I'd only use a concave hull functions on true multi-part geometries, using the CASE ... statement provided, simply because it can unnecessarily alter a single-part geometry. – Mike T Dec 13 '12 at 22:48