7#include "osm/OsmPlacemarkData.h"
10#include "GeoDataExtendedData.h"
12#include <QXmlStreamAttributes>
19 return ::qHash(ident.id, seed) ^ ::qHash((
int)ident.type, seed);
22OsmPlacemarkData::OsmPlacemarkData():
28qint64 OsmPlacemarkData::id()
const
33qint64 OsmPlacemarkData::oid()
const
35 auto const value = m_tags.value(QStringLiteral(
"mx:oid")).toLong();
36 return value > 0 ? value : m_id;
39QString OsmPlacemarkData::changeset()
const
41 return m_tags.value(QStringLiteral(
"mx:changeset"));
44QString OsmPlacemarkData::version()
const
46 return m_tags.value(QStringLiteral(
"mx:version"));
49QString OsmPlacemarkData::uid()
const
51 return m_tags.value(QStringLiteral(
"mx:uid"));
54QString OsmPlacemarkData::isVisible()
const
56 return m_tags.value(QStringLiteral(
"mx:visible"));
59QString OsmPlacemarkData::user()
const
61 return m_tags.value(QStringLiteral(
"mx:user"));
64QString OsmPlacemarkData::timestamp()
const
66 return m_tags.value(QStringLiteral(
"mx:timestamp"));
69QString OsmPlacemarkData::action()
const
71 return m_tags.value(QStringLiteral(
"mx:action"));
74void OsmPlacemarkData::setId( qint64
id )
79void OsmPlacemarkData::setVersion(
const QString& version )
81 m_tags[QStringLiteral(
"mx:version")] =
version;
84void OsmPlacemarkData::setChangeset(
const QString& changeset )
86 m_tags[QStringLiteral(
"mx:changeset")] = changeset;
89void OsmPlacemarkData::setUid(
const QString& uid )
91 m_tags[QStringLiteral(
"mx:uid")] = uid;
94void OsmPlacemarkData::setVisible(
const QString& visible )
96 m_tags[QStringLiteral(
"mx:visible")] = visible;
99void OsmPlacemarkData::setUser(
const QString& user )
101 m_tags[QStringLiteral(
"mx:user")] = user;
104void OsmPlacemarkData::setTimestamp(
const QString& timestamp )
106 m_tags[QStringLiteral(
"mx:timestamp")] = timestamp;
109void OsmPlacemarkData::setAction(
const QString& action )
111 m_tags[QStringLiteral(
"mx:action")] = action;
118 return m_tags.value( key );
123 m_tags.
insert( key, value );
126void OsmPlacemarkData::removeTag(
const QString &key )
131bool OsmPlacemarkData::containsTag(
const QString &key,
const QString &value )
const
133 auto const iter = m_tags.constFind(key);
134 return iter == m_tags.
constEnd() ? false : iter.value() == value;
137bool OsmPlacemarkData::containsTagKey(
const QString &key )
const
144 return m_tags.constFind(key);
147QHash< QString, QString >::const_iterator OsmPlacemarkData::tagsBegin()
const
149 return m_tags.begin();
152QHash< QString, QString >::const_iterator OsmPlacemarkData::tagsEnd()
const
154 return m_tags.constEnd();
163 return m_nodeReferences[ coordinates ];
168 return m_nodeReferences.value( coordinates );
173 m_nodeReferences.insert( key, value );
178 m_nodeReferences.remove( key );
181bool OsmPlacemarkData::containsNodeReference(
const GeoDataCoordinates &key )
const
183 return m_nodeReferences.contains( key );
188 m_nodeReferences.insert( newKey, m_nodeReferences.value( oldKey ) );
189 m_nodeReferences.remove( oldKey );
194 return m_nodeReferences;
199 return m_nodeReferences.begin();
204 return m_nodeReferences.constEnd();
210 return m_memberReferences[ key ];
215 return m_memberReferences.value( key );
221 m_memberReferences.insert( key, value );
224void OsmPlacemarkData::removeMemberReference(
int key )
232 for ( ; it != end; ++it ) {
233 if ( it.key() > key ) {
234 newHash.
insert( it.key() - 1, it.value() );
236 else if ( it.key() < key ) {
237 newHash.
insert( it.key(), it.value() );
240 m_memberReferences = newHash;
243bool OsmPlacemarkData::containsMemberReference(
int key )
const
245 return m_memberReferences.
contains( key );
250 return m_memberReferences;
255 return m_memberReferences.begin();
260 return m_memberReferences.constEnd();
263void OsmPlacemarkData::addRelation( qint64
id,
OsmType type,
const QString &role )
265 m_relationReferences.insert( { id, type }, role );
268void OsmPlacemarkData::removeRelation( qint64
id )
272 m_relationReferences.remove( { id, OsmType::Node } );
273 m_relationReferences.remove( { id, OsmType::Way } );
274 m_relationReferences.remove( { id, OsmType::Relation } );
277bool OsmPlacemarkData::containsRelation( qint64
id )
const
281 return m_relationReferences.contains( { id, OsmType::Node } )
282 || m_relationReferences.contains( { id, OsmType::Way } )
283 || m_relationReferences.contains( { id, OsmType::Relation } );
288 return m_relationReferences.begin();
293 return m_relationReferences.constEnd();
296bool OsmPlacemarkData::isNull()
const
301bool OsmPlacemarkData::isEmpty()
const
303 return m_tags.isEmpty() &&
304 m_nodeReferences.isEmpty() &&
305 m_memberReferences.isEmpty() &&
306 m_relationReferences.isEmpty();
314 osmData.setVersion(s.toString());
317 osmData.setChangeset(s.toString());
320 osmData.setUser(s.toString());
323 osmData.setUid(s.toString());
326 osmData.setVisible(s.toString());
329 osmData.setTimestamp(s.toString());
332 osmData.setAction(s.toString());
337const char *OsmPlacemarkData::nodeType()
const
339 return "OsmPlacemarkDataType";
A 3d point representation.
This class is used to encapsulate the osm data fields kept within a placemark's extendedData.
KDB_EXPORT KDbVersionInfo version()
KTEXTEDITOR_EXPORT size_t qHash(KTextEditor::Cursor cursor, size_t seed=0) noexcept
Binds a QML item to a specific geodetic location in screen coordinates.
OsmType
Type of OSM element.
bool contains(const Key &key) const const
iterator insert(const Key &key, const T &value)
const_iterator constEnd() const const
bool contains(QChar ch, Qt::CaseSensitivity cs) const const
QString & insert(qsizetype position, QChar ch)
QString & remove(QChar ch, Qt::CaseSensitivity cs)
bool isEmpty() const const
QStringView value(QAnyStringView namespaceUri, QAnyStringView name) const const
Identifier for an OSM element.