[gdal-dev] Reading a shapefile containing multi-parts Polyline from OGR (C++ API)

Even Rouault even.rouault at spatialys.com
Mon Oct 16 06:21:20 PDT 2023


Le 16/10/2023 à 15:15, Javier Jimenez Shaw via gdal-dev a écrit :
> Do you mean a MultiLineString?
>
> This piece of code is working for me (I hope without any bug).
>
> if (wkbFlatten(poGeometry->getGeometryType()) == wkbMultiLineString)
> multiLineStringGeometry(poGeometry);
> ...
> multiLineStringGeometry(OGRGeometry* poGeometry)
>             {
>                 OGRMultiLineString* multiLine = 
> dynamic_cast<OGRMultiLineString*>(poGeometry);
>                 int numGeometries = multiLine->getNumGeometries();
>                 for (int i = 0; i < numGeometries; i++)
>                 {
>                     OGRGeometry* eachGeometry = 
> multiLine->getGeometryRef(i);
>                     OGRLineString* line = 
> dynamic_cast<OGRLineString*>(eachGeometry);
>                     // do whatever with that LineString
>                 }
>             }

Can further be simplified to something like:

multiLineStringGeometry(const OGRGeometry* poGeometry)
             {
                 for (const OGRLineString* line: 
poGeometry->toMultiLineString())
                 {
                     // do whatever with that LineString
                 }
             }

>
> On Mon, 16 Oct 2023 at 12:14, Roland Baviere via gdal-dev 
> <gdal-dev at lists.osgeo.org> wrote:
>
>     Hi all,
>
>      I hope this e-mel finds you well.
>
>     I am trying to read a shapefile layer from OGR from a C++
>     application following the tutorial found here:
>     https://gdal.org/tutorials/vector_api_tut.html#reading-from-ogr
>
>     We have difficulties with a layer containing PolyLines with
>     several parts.
>
>     The pre-existing code works fine for polylines having a unique part.
>
>     Do you have any example or advice to help me implement a version
>     that works for polylines containing several parts. My intention is
>     to display each shape on a map, so I need to retrieve the
>     coordinates of points and draw segment between points when relevant.
>
>     Thanks a lot for your help.
>
>     Kind regards,
>
>     Roland
>
>
>
>     //// CODE THAT WORKS for "simple" polylines but fails when
>     dealiing with a polyline containing several parts
>     int o = 0;
>                             for(auto y : poGeometry->toLineString()) {
>                                 if (o == 0) {
>                                     line.mInCoord =
>     QGeoCoordinate(y.getX(), y.getY());
>                                 } else if (o ==
>     (poGeometry->toLineString()->getNumPoints() - 1)) {
>                                     line.mOutCoord =
>     QGeoCoordinate(y.getX(), y.getY());
>                                 } else {
>     line.mPath.addCoordinate(QGeoCoordinate(y.getX(), y.getY()));
>                                 }
>                                 qDebug() << o;
>                                 o++;
>                             }
>
>     _______________________________________________
>     gdal-dev mailing list
>     gdal-dev at lists.osgeo.org
>     https://lists.osgeo.org/mailman/listinfo/gdal-dev
>
>
> _______________________________________________
> gdal-dev mailing list
> gdal-dev at lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/gdal-dev

-- 
http://www.spatialys.com
My software is free, but my time generally not.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20231016/c931bdd8/attachment-0001.htm>


More information about the gdal-dev mailing list