diff --git a/hoot-core/src/main/cpp/hoot/core/io/OsmXmlReader.cpp b/hoot-core/src/main/cpp/hoot/core/io/OsmXmlReader.cpp
index c6dd4ba..5b7f2ab 100644
--- a/hoot-core/src/main/cpp/hoot/core/io/OsmXmlReader.cpp
+++ b/hoot-core/src/main/cpp/hoot/core/io/OsmXmlReader.cpp
@@ -95,7 +95,8 @@ void OsmXmlReader::setConfiguration(const Settings& conf)
setStatusUpdateInterval(configOptions.getTaskStatusUpdateInterval() * 10);
setBounds(GeometryUtils::envelopeFromConfigString(configOptions.getConvertBoundingBox()));
setKeepImmediatelyConnectedWaysOutsideBounds(
- ConfigOptions().getConvertBoundingBoxKeepImmediatelyConnectedWaysOutsideBounds());
+ configOptions.getConvertBoundingBoxKeepImmediatelyConnectedWaysOutsideBounds());
+ setWarnOnVersionZeroElement(configOptions.getReaderWarnOnZeroVersionElement());
}
void OsmXmlReader::_parseTimeStamp(const QXmlAttributes &attributes)
@@ -169,6 +170,19 @@ void OsmXmlReader::_createNode(const QXmlAttributes& attributes)
{
uid = _parseDouble(attributes.value("uid"));
}
+ LOG_VART(version);
+ if (_warnOnVersionZeroElement && version == 0)
+ {
+ if (logWarnCount < Log::getWarnMessageLimit())
+ {
+ LOG_WARN("Element with version = 0: " << ElementId(ElementType::Node, newId));
+ }
+ else if (logWarnCount == Log::getWarnMessageLimit())
+ {
+ LOG_WARN(className() << ": " << Log::LOG_WARN_LIMIT_REACHED_MESSAGE);
+ }
+ logWarnCount++;
+ }
_element =
Node::newSp(
@@ -238,6 +252,19 @@ void OsmXmlReader::_createWay(const QXmlAttributes& attributes)
{
uid = _parseDouble(attributes.value("uid"));
}
+ LOG_VART(version);
+ if (_warnOnVersionZeroElement && version == 0)
+ {
+ if (logWarnCount < Log::getWarnMessageLimit())
+ {
+ LOG_WARN("Element with version = 0: " << ElementId(ElementType::Way, newId));
+ }
+ else if (logWarnCount == Log::getWarnMessageLimit())
+ {
+ LOG_WARN(className() << ": " << Log::LOG_WARN_LIMIT_REACHED_MESSAGE);
+ }
+ logWarnCount++;
+ }
_element.reset(
new Way(_status, newId, _defaultCircularError, changeset, version, timestamp, user, uid));
@@ -294,6 +321,19 @@ void OsmXmlReader::_createRelation(const QXmlAttributes& attributes)
{
uid = _parseDouble(attributes.value("uid"));
}
+ LOG_VART(version);
+ if (_warnOnVersionZeroElement && version == 0)
+ {
+ if (logWarnCount < Log::getWarnMessageLimit())
+ {
+ LOG_WARN("Element with version = 0: " << ElementId(ElementType::Relation, newId));
+ }
+ else if (logWarnCount == Log::getWarnMessageLimit())
+ {
+ LOG_WARN(className() << ": " << Log::LOG_WARN_LIMIT_REACHED_MESSAGE);
+ }
+ logWarnCount++;
+ }
_element.reset(
new Relation(
@@ -407,6 +447,7 @@ void OsmXmlReader::read(const OsmMapPtr& map)
LOG_VARD(StringUtils::formatLargeNumber(_map->getElementCount()));
}
+ // Should we be using RemoveMissingElementsVisitor here instead?
ReportMissingElementsVisitor visitor;
LOG_INFO("\t" << visitor.getInitStatusMessage());
_map->visitRw(visitor);
@@ -540,8 +581,8 @@ bool OsmXmlReader::startElement(const QString& /*namespaceURI*/, const QString&
if (logWarnCount < Log::getWarnMessageLimit())
{
LOG_WARN(
- "Missing " << ElementId(ElementType::Node, ref) << " in " <<
- ElementId(ElementType::Way, _wayId) << ".");
+ "Skipping missing " << ElementId(ElementType::Node, ref) << " in " <<
+ ElementId(ElementType::Way, _wayId) << "...");
}
else if (logWarnCount == Log::getWarnMessageLimit())
{
@@ -582,8 +623,8 @@ bool OsmXmlReader::startElement(const QString& /*namespaceURI*/, const QString&
if (logWarnCount < Log::getWarnMessageLimit())
{
LOG_WARN(
- "Missing " << ElementId(ElementType::Node, ref) << " in " <<
- ElementId(ElementType::Relation, _relationId) << ".");
+ "Skipping missing " << ElementId(ElementType::Node, ref) << " in " <<
+ ElementId(ElementType::Relation, _relationId) << "...");
}
else if (logWarnCount == Log::getWarnMessageLimit())
{
@@ -615,8 +656,8 @@ bool OsmXmlReader::startElement(const QString& /*namespaceURI*/, const QString&
if (logWarnCount < Log::getWarnMessageLimit())
{
LOG_WARN(
- "Missing " << ElementId(ElementType::Way, ref) << " in " <<
- ElementId(ElementType::Relation, _relationId) << ".");
+ "Skipping missing " << ElementId(ElementType::Way, ref) << " in " <<
+ ElementId(ElementType::Relation, _relationId) << "...");
}
else if (logWarnCount == Log::getWarnMessageLimit())
{