<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-GB link="#0563C1" vlink="#954F72"><div class=WordSection1><p class=MsoNormal>Hi,<o:p></o:p></p><p class=MsoNormal>I’m trying to use GDAL to read ESRI shapefiles. I’ve got it working for points, lines, polygons, polylines and multipoint but I’m having problems with polygons that contain polygons in the same feature.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The following is a cut down code sample of the code I’m using. The problem I have is that I can read the number of polygons in the feature (i.e. 3 polygons, nested) using OGR_G_GetGemoetryCount. When I use OGR_R_GetGeometryRef to get the handle/pointer for each of the polygons in turn I get what appears to be a valid handle but when I use it to get the number of points/vertices in the polygon it always returns 0.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>If I use the lower level routines SHPOpen, SHPReadObject, SHPClose I can get access to the data (after a fashion) but the requirement is to use the higher level API.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I’m using GDAL-1.6.2 (yes I know I should be using a much more up-to-date version but the project will not sanction it). I’m developing on a Linux (Redhat 5.9) system in GCC.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I’d appreciate it if you could point out what I’m doing wrong (I suspect it is my error).<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>OGRDataSourceH hDS;<o:p></o:p></p><p class=MsoNormal>OGRFeatureH hFeature;<o:p></o:p></p><p class=MsoNormal>OGRLayerH;<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>OGRRegisterAll();<o:p></o:p></p><p class=MsoNormal>hDS = OGROpen(filename, FALSE, NULL);<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>hLayer = OGR_DS_GetLayer(hDS, 0); // only interested in layer 0<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>while ((hFeature = OGR_L_GetNextFeature(hLayer)) != NULL)<o:p></o:p></p><p class=MsoNormal>(<o:p></o:p></p><p class=MsoNormal style='text-indent:36.0pt'>Int index = 0;<o:p></o:p></p><p class=MsoNormal style='text-indent:36.0pt'>OGRGeometryH hGeometry = OGR_F_GetGeometryRef(hFeature);<o:p></o:p></p><p class=MsoNormal style='text-indent:36.0pt'>int shape_type = wkbFlatten(ORG_G_GetGeometry(hGeometry);<o:p></o:p></p><p class=MsoNormal style='text-indent:36.0pt'>int num_geom = OGR_G_GetGeometryCount(hGeometry) - 1; // Returns a valid result<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal style='text-indent:36.0pt'>do<o:p></o:p></p><p class=MsoNormal style='text-indent:36.0pt'>{<o:p></o:p></p><p class=MsoNormal style='text-indent:36.0pt'>                OGRGeometryH hRing = OGR_G_GetGeometryRef(hGeometry, index);<o:p></o:p></p><p class=MsoNormal style='text-indent:36.0pt'>                Int num_vertices = OGR_G_GetPointCount(hRing); // returns 0 <o:p></o:p></p><p class=MsoNormal style='text-indent:36.0pt'>                //.<o:p></o:p></p><p class=MsoNormal style='margin-left:36.0pt;text-indent:36.0pt'>//. Do something with the data<o:p></o:p></p><p class=MsoNormal style='margin-left:36.0pt;text-indent:36.0pt'>//.<o:p></o:p></p><p class=MsoNormal style='margin-left:36.0pt;text-indent:36.0pt'>Index++;<o:p></o:p></p><p class=MsoNormal style='text-indent:36.0pt'>}<o:p></o:p></p><p class=MsoNormal style='text-indent:36.0pt'>// Destroy the hfeature here<o:p></o:p></p><p class=MsoNormal>)<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p></div></body></html>