[postgis-users] exterior rings in multipolygons

Mr. Puneet Kishor punk.kish at gmail.com
Tue Jul 26 22:01:23 PDT 2011


On Jul 26, 2011, at 7:53 PM, Ben Madin wrote:

> Maybe you could share the polygon - does it pass tests like st_isvalid()?

it does pass the ST_IsValid() test with flying colors, but the truth is... the entire poly never got imported. So, from ArcMap, I exported poly id 280 to a shapefile. Then I opened that shapefile in QGIS, and overlaid the same poly from the Pg table. See the attached image. The orange line is the poly 280 from Pg, and the green solid is the same poly 280 from the shapefile. Most of the poly is missing in the Pg version.

The shapefile can be downloaded from http://dl.dropbox.com/u/3526821/280.zip

> 
> cheers
> 
> Ben
> 
> 
> On 27/07/2011, at 4:16 AM, Mr. Puneet Kishor wrote:
> 
>> 
>> On Jul 26, 2011, at 9:56 AM, Sandro Santilli wrote:
>> 
>>> On Tue, Jul 26, 2011 at 09:47:23AM -0500, Mr. Puneet Kishor wrote:
>>>> 
>>>> On Jul 26, 2011, at 9:34 AM, Sandro Santilli wrote:
>>>> 
>>>>> On Tue, Jul 26, 2011 at 09:31:50AM -0500, Mr. Puneet Kishor wrote:
>>>>> 
>>>>>> 	ERROR:  function st_interiorringn(geometry) does not exist
>>>>> 
>>>>> Check your parens, the call above is missing a parameter (ring number).
>>>>> 
>>>> 
>>>> That is a bit embarrassing. Yes, I had missed out on giving the ring number. However, still no luck --
>>>> 
>>>> SELECT objectid, 
>>>> 	ST_NRings(the_geom) num_of_rings, 
>>>> 	ST_NumInteriorRings(the_geom) num_of_int_rings, 
>>>> 	ST_NumPoints(ST_ExteriorRing(ST_GeometryN(the_geom,1))) num_of_points_ext_ring,
>>>> 	ST_AsText(the_geom) wkt_feature, 
>>>> 	ST_AsText(ST_MakePolygon(ST_ExteriorRing(ST_GeometryN(the_geom, 1)))) wkt_ext_ring,
>>>> 	ST_AsText(ST_MakePolygon(ST_InteriorRingN(ST_GeometryN(the_geom, 2), 2))) wkt_int_ring_a,
>>>> 	ST_AsText(ST_MakePolygon(ST_GeometryN(the_geom, 2))) wkt_int_ring_b
>>>> FROM table 
>>>> WHERE objectid = 280;
>>>> 
>>>> objectid: 280;
>>>> num_of_rings: 4;
>>>> num_of_int_rings: 3;
>>>> num_of_points_ext_ring: 496;
>>>> wkt_feature: "MULTIPOLYGON(((<1>),(<2>),(<3>),(<4>))";
>>>> wkt_ext_ring: "POLYGON((<1>))";
>>>> wkt_int_ring_a: "";
>>>> wkt_int_ring_b: ""
>>>> 
>>>> As you see, I tried to get the interior ring "n" two different ways. Not getting anywhere.
>>> 
>>> Write down a matrix of all combinations you tried.
>>> Use real paper, and pencil.
>>> Publish a scanned version.
>>> 
>> 
>> So, as advised, I got a real pencil and paper, drew out all my options, scanned them in, and discovered that I had a poor understanding on the relationship of MULTIPOLYGONs and GEOMETRIES. Turns out, my MULTIPOLYGON has 1 GEOMETRY, 4 rings, one being exterior and three interior rings. Hence, an expression like the following works well
>> 
>> 	ST_NumPoints(ST_InteriorRingN(ST_GeometryN(the_geom, 1), 2))
>> 	
>> Now, here is where it gets interesting. My test feature in reality is a lot more complicated, as can be seen in the attached image (see the blue bordered multipoly). I took the shapefile and shp2pgsql-ed it, and now I get only 4 rings in my query. My guess is that these four rings are the ones on the top of the image. So, I thought maybe I have another GEOMETRY that I am missing out on. But, no... ST_NumGeometries(the_geom) = 1.
>> 
>> Can anyone theorize what happened to the rest of the feature? How did it get lost in translation? Was it simply ignored, or was it made into a different feature? Or, is it there, but I still haven't understood the MULTIPOLYGON/GEOMETRY/POLYGON/LINERSTRING nexus really well.
>> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20110727/9df68f4f/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 280_error.png
Type: image/png
Size: 12091 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20110727/9df68f4f/attachment.png>


More information about the postgis-users mailing list