<div dir="ltr"><div>Hi Even,<br><br>Thank you for your reply, that explains a lot. I still wonder why there is not a possibility to return wkbPolygon like below:<br><br>           if( numPoints > 0 && numLines == 0 && numRegions == 0 )<br>

               m_poDefn->SetGeomType( wkbPoint );<br>           else if( numPoints == 0 && numLines > 0 && numRegions == 0 )<br>
               m_poDefn->SetGeomType( wkbLineString );<br>+++     else if ( numPoints == 0 && numLines == 0 && numRegions > 0 )<br>+++         m_poDefn->SetGeomType( wkbPolygon );<br>           else<br>

               /* we leave it unknown indicating a mixture */;<br><br></div>Maybe there is also a way to check if the layer is made of multi geometries of one type (no mixture)... It looks to me that the mitab_<div id=":3hl" class="">
tabfile.cpp module could be improved that way. What do you think?<br><br></div><div id=":3hl" class="">-Max Demars<br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Apr 24, 2014 at 2:23 PM, Even Rouault <span dir="ltr"><<a href="mailto:even.rouault@mines-paris.org" target="_blank">even.rouault@mines-paris.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Le jeudi 24 avril 2014 19:47:36, Max Demars a écrit :<br>
<div class="">> Hi!<br>
><br>
> I am using the OGR MapInfo File driver to read a MapInfo TAB file. However,<br>
> the function<br>
</div>> GetGeomType()<<a href="http://gdal.org/python/osgeo.ogr.Layer-class.html#GetGeomTyp" target="_blank">http://gdal.org/python/osgeo.ogr.Layer-class.html#GetGeomTyp</a><br>
> e>returns 0 which means point<br>
<div class="">> geometry, even if the features in the TAB are only multi-polygons.<br>
<br>
</div>No, see ogr_core.h :<br>
<br>
    wkbUnknown = 0,         /**< unknown type, non-standard */<br>
<div class=""><br>
><br>
> Is it because MapInfo TAB can store many different GeomTypes in the same<br>
> file?<br>
<br>
</div>The MapInfo TAB file will return wkbPoint, wkbLineString or wkbUnknown. The<br>
later being for polygons/multipolygons, or mix or geometry types.<br>
<br>
Source is ogr/ogrsf_frmts/mitab/mitab_tabfile.cpp :<br>
<br>
        if( numPoints > 0 && numLines == 0 && numRegions == 0 )<br>
            m_poDefn->SetGeomType( wkbPoint );<br>
        else if( numPoints == 0 && numLines > 0 && numRegions == 0 )<br>
            m_poDefn->SetGeomType( wkbLineString );<br>
        else<br>
            /* we leave it unknown indicating a mixture */;<br>
<div class=""><br>
<br>
><br>
> If I take for granted that only one geometry type would always be founded<br>
> in the TAB, how could I retrieve it?<br>
><br>
>         driver = ogr.GetDriverByName("MapInfo File")<br>
>         datasource = driver.Open(os.path.join(dirname,shapefileName))<br>
>         layer = datasource.GetLayer(0)<br>
>         geometryType = layer.GetGeomType()<br>
><br>
>         >>>geometryType<br>
>         >>>0<br>
><br>
> Even when looping over features in layer and retrieving geometry type using<br>
</div>> GetDefnRef()<<a href="http://gdal.org/python/osgeo.ogr.Feature-class.html#GetGeometr" target="_blank">http://gdal.org/python/osgeo.ogr.Feature-class.html#GetGeometr</a><br>
> yRef>.GetGeomType() the result is always 0 even for multi-polygon features.<br>
<br>
You should call<br>
        g = feat.GetGeometryRef()<br>
        g.GetType()<br>
to retrieve the geometry type of an individual feature, and that cannot be<br>
0=wkbUnknown<br>
<br>
layer.GetGeomType(), feat.GetDefnRef().GetGeomType() or<br>
layer.GetLayerDefn().GetGeomType() are all alias, that will return the<br>
declared layer geometry type, but not the geometry type of an actual feature.<br>
<span class="HOEnZb"><font color="#888888"><br>
Even<br>
<br>
--<br>
Geospatial professional services<br>
<a href="http://even.rouault.free.fr/services.html" target="_blank">http://even.rouault.free.fr/services.html</a><br>
</font></span></blockquote></div><br><br clear="all"><br>-- <br><div dir="ltr"><div><div><div>Stack Overflow: <a href="http://stackoverflow.com/users/1914034/burton449" target="_blank">http://stackoverflow.com/users/1914034/burton449</a><br>
</div></div>GIS Overflow: <a href="http://gis.stackexchange.com/users/14426/burton449" target="_blank">http://gis.stackexchange.com/users/14426/burton449</a><br></div>LastFm: <a href="http://www.lastfm.fr/user/burton449" target="_blank">http://www.lastfm.fr/user/burton449</a><br>
</div>
</div>