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@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@lists.osgeo.org
    https://lists.osgeo.org/mailman/listinfo/gdal-dev


_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/gdal-dev

--
http://www.spatialys.com
My software is free, but my time generally not.
_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to