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 2a6a503..37ba853 100644
--- a/hoot-core/src/main/cpp/hoot/core/io/OsmXmlReader.cpp
+++ b/hoot-core/src/main/cpp/hoot/core/io/OsmXmlReader.cpp
@@ -22,7 +22,7 @@
* This will properly maintain the copyright information. DigitalGlobe
* copyrights will be updated automatically.
*
- * @copyright Copyright (C) 2015, 2016, 2017, 2018, 2019 DigitalGlobe (http://www.digitalglobe.com/)
+ * @copyright Copyright (C) 2015, 2016, 2017, 2018, 2019, 2020 DigitalGlobe (http://www.digitalglobe.com/)
*/
#include "OsmXmlReader.h"
@@ -90,6 +90,7 @@ OsmXmlReader::~OsmXmlReader()
void OsmXmlReader::setConfiguration(const Settings& conf)
{
+ PartialOsmMapReader::setConfiguration(conf);
ConfigOptions configOptions(conf);
setDefaultAccuracy(configOptions.getCircularErrorDefaultValue());
setKeepStatusTag(configOptions.getReaderKeepStatusTag());
@@ -405,13 +406,19 @@ void OsmXmlReader::read(const OsmMapPtr& map)
LOG_VART(_keepStatusTag);
LOG_VART(_preserveAllTags);
- // clear node id maps in case the reader is used for multiple files
- _nodeIdMap.clear();
- _relationIdMap.clear();
- _wayIdMap.clear();
+ // Reusing the reader for multiple files has two options, the first is the
+ // default where the reader is reset and duplicates error out. The second
+ // is where duplicates are ignored in the same file and across files so the
+ // ID maps aren't reset
+ if (!_ignoreDuplicates)
+ {
+ _nodeIdMap.clear();
+ _relationIdMap.clear();
+ _wayIdMap.clear();
- _numRead = 0;
- finalizePartial();
+ _numRead = 0;
+ finalizePartial();
+ }
_map = map;
_map->appendSource(_url);