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

Roland Baviere roland.baviere at districtlab.eu
Mon Oct 16 07:15:40 PDT 2023


Thanks a lot Javier. I'll test this and come back to you.

Here is a download link to the shapefile causing this issue for me:
https://filesender.renater.fr/?s=download&token=da2a7ff6-9755-4086-b1ed-71c6ebc72a0f



Le lun. 16 oct. 2023 à 15:21, Even Rouault <even.rouault at spatialys.com> a
écrit :

>
> 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 listgdal-dev at lists.osgeo.orghttps://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/e93b7a2f/attachment.htm>


More information about the gdal-dev mailing list