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

Javier Jimenez Shaw j1 at jimenezshaw.com
Mon Oct 16 06:15:39 PDT 2023


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
                }
            }

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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20231016/15c98e13/attachment.htm>


More information about the gdal-dev mailing list