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 }