File indexing completed on 2024-05-19 03:53:14

0001 // SPDX-License-Identifier: LGPL-2.1-or-later
0002 //
0003 // SPDX-FileCopyrightText: 2015 Stanciu Marius-Valeriu <stanciumarius94@gmail.com>
0004 //
0005 
0006 //Self
0007 #include "OsmWayTagWriter.h"
0008 
0009 //Marble
0010 #include "OsmElementDictionary.h"
0011 #include "OsmObjectAttributeWriter.h"
0012 #include "OsmTagTagWriter.h"
0013 #include "GeoDataLineString.h"
0014 #include "GeoDataCoordinates.h"
0015 #include "osm/OsmPlacemarkData.h"
0016 #include "osm/OsmObjectManager.h"
0017 #include "GeoWriter.h"
0018 
0019 
0020 namespace Marble
0021 {
0022 
0023 void OsmWayTagWriter::writeWay( const GeoDataLineString& lineString,
0024                                 const OsmPlacemarkData& osmData, GeoWriter& writer )
0025 {
0026 
0027     writer.writeStartElement( osm::osmTag_way );
0028 
0029     OsmObjectAttributeWriter::writeAttributes( osmData, writer );
0030     OsmTagTagWriter::writeTags( osmData, writer );
0031 
0032     // Writing all the component nodes ( Nd tags )
0033     QVector<GeoDataCoordinates>::const_iterator it =  lineString.constBegin();
0034     QVector<GeoDataCoordinates>::ConstIterator const end = lineString.constEnd();
0035 
0036     for ( ; it != end; ++it ) {
0037         QString ndId = QString::number( osmData.nodeReference( *it ).id() );
0038         writer.writeStartElement( osm::osmTag_nd );
0039         writer.writeAttribute( "ref", ndId );
0040         writer.writeEndElement();
0041     }
0042 
0043     if (!lineString.isEmpty() && lineString.isClosed()) {
0044         auto const startId = osmData.nodeReference(lineString.first()).id();
0045         auto const endId = osmData.nodeReference(lineString.last()).id();
0046         if (startId != endId) {
0047             writer.writeStartElement( osm::osmTag_nd );
0048             writer.writeAttribute( "ref", QString::number(startId));
0049             writer.writeEndElement();
0050         }
0051     }
0052 
0053     writer.writeEndElement();
0054 }
0055 
0056 }