[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [marble] src/plugins/runner/osm: Don't create further items from ways that are part of multipolygons
From: Dennis_Nienhüser <nienhueser () kde ! org>
Date: 2015-10-31 21:04:15
Message-ID: E1ZsdJv-00046m-UC () scm ! kde ! org
[Download RAW message or body]
Git commit 90cfcdd5805bd3bd697051ad51e08796d29e70f7 by Dennis Nienhüser.
Committed on 31/10/2015 at 21:02.
Pushed by nienhueser into branch 'master'.
Don't create further items from ways that are part of multipolygons
M +5 -1 src/plugins/runner/osm/OsmParser.cpp
M +5 -4 src/plugins/runner/osm/OsmRelation.cpp
M +3 -2 src/plugins/runner/osm/OsmRelation.h
http://commits.kde.org/marble/90cfcdd5805bd3bd697051ad51e08796d29e70f7
diff --git a/src/plugins/runner/osm/OsmParser.cpp \
b/src/plugins/runner/osm/OsmParser.cpp index de19e3d..30b9135 100644
--- a/src/plugins/runner/osm/OsmParser.cpp
+++ b/src/plugins/runner/osm/OsmParser.cpp
@@ -114,8 +114,12 @@ GeoDataDocument *OsmParser::createDocument(OsmNodes &nodes, \
OsmWays &ways, OsmRe backgroundStyle->setId( "background" );
document->addStyle( backgroundStyle );
+ QSet<qint64> usedWays;
foreach(OsmRelation const &relation, relations) {
- relation.create(document, ways, nodes);
+ relation.create(document, ways, nodes, usedWays);
+ }
+ foreach(qint64 id, usedWays) {
+ ways.remove(id);
}
foreach(OsmWay const &way, ways) {
diff --git a/src/plugins/runner/osm/OsmRelation.cpp \
b/src/plugins/runner/osm/OsmRelation.cpp index 27be7dc..8a4ed47 100644
--- a/src/plugins/runner/osm/OsmRelation.cpp
+++ b/src/plugins/runner/osm/OsmRelation.cpp
@@ -41,14 +41,14 @@ void OsmRelation::parseMember(const QXmlStreamAttributes \
&attributes) m_members << member;
}
-void OsmRelation::create(GeoDataDocument *document, const OsmWays &ways, const \
OsmNodes &nodes) const +void OsmRelation::create(GeoDataDocument *document, const \
OsmWays &ways, const OsmNodes &nodes, QSet<qint64> &usedWays) const {
if (!m_osmData.containsTag("type", "multipolygon")) {
return;
}
QStringList const outerRoles = QStringList() << "outer" << "";
- QList<GeoDataLinearRing> outer = rings(outerRoles, ways, nodes);
+ QList<GeoDataLinearRing> outer = rings(outerRoles, ways, nodes, usedWays);
if (outer.isEmpty()) {
return;
} else if (outer.size() > 1) {
@@ -69,7 +69,7 @@ void OsmRelation::create(GeoDataDocument *document, const OsmWays \
&ways, const O // placemark->osmData().addMemberReference(-1, );
QStringList const innerRoles = QStringList() << "inner";
- QList<GeoDataLinearRing> inner = rings(innerRoles, ways, nodes);
+ QList<GeoDataLinearRing> inner = rings(innerRoles, ways, nodes, usedWays);
foreach(const GeoDataLinearRing &ring, inner) {
// @todo: How to get the reference here?
// placemark->osmData().addMemberReference(polygon->innerBoundaries().size(), \
); @@ -81,7 +81,7 @@ void OsmRelation::create(GeoDataDocument *document, const \
OsmWays &ways, const O document->append(placemark);
}
-QList<GeoDataLinearRing> OsmRelation::rings(const QStringList &roles, const OsmWays \
&ways, const OsmNodes &nodes) const +QList<GeoDataLinearRing> \
OsmRelation::rings(const QStringList &roles, const OsmWays &ways, const OsmNodes \
&nodes, QSet<qint64> &usedWays) const {
QList<qint64> roleMembers;
foreach(const OsmMember &member, m_members) {
@@ -110,6 +110,7 @@ QList<GeoDataLinearRing> OsmRelation::rings(const QStringList \
&roles, const OsmW }
ring << nodes[id].coordinates();
}
+ usedWays << wayId;
result << ring;
}
diff --git a/src/plugins/runner/osm/OsmRelation.h \
b/src/plugins/runner/osm/OsmRelation.h index 48d668f..75a41aa 100644
--- a/src/plugins/runner/osm/OsmRelation.h
+++ b/src/plugins/runner/osm/OsmRelation.h
@@ -19,6 +19,7 @@
#include <QString>
#include <QXmlStreamAttributes>
+#include <QSet>
namespace Marble {
@@ -30,7 +31,7 @@ public:
const OsmPlacemarkData & osmData() const;
- void create(GeoDataDocument* document, const OsmWays &ways, const OsmNodes \
&nodes) const; + void create(GeoDataDocument* document, const OsmWays &ways, const \
OsmNodes &nodes, QSet<qint64> &usedWays) const;
private:
struct OsmMember
@@ -42,7 +43,7 @@ private:
OsmMember();
};
- QList<GeoDataLinearRing> rings(const QStringList &roles, const OsmWays &ways, \
const OsmNodes &nodes) const; + QList<GeoDataLinearRing> rings(const QStringList \
&roles, const OsmWays &ways, const OsmNodes &nodes, QSet<qint64> &usedWays) const;
OsmPlacemarkData m_osmData;
QVector<OsmMember> m_members;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic