diff --git a/include/osm_lua_processing.h b/include/osm_lua_processing.h index f4d664da..bdc63d4b 100644 --- a/include/osm_lua_processing.h +++ b/include/osm_lua_processing.h @@ -69,6 +69,8 @@ class OsmLuaProcessing { // Do we have Lua routines for non-MP relations? bool canReadRelations(); bool canPostScanRelations(); + bool canWriteNodes(); + bool canWriteWays(); bool canWriteRelations(); // Shapefile tag remapping @@ -264,6 +266,8 @@ class OsmLuaProcessing { bool supportsRemappingShapefiles; bool supportsReadingRelations; bool supportsPostScanRelations; + bool supportsWritingNodes; + bool supportsWritingWays; bool supportsWritingRelations; const class ShpMemTiles &shpMemTiles; class OsmMemTiles &osmMemTiles; diff --git a/src/osm_lua_processing.cpp b/src/osm_lua_processing.cpp index 76201ebd..073085a5 100644 --- a/src/osm_lua_processing.cpp +++ b/src/osm_lua_processing.cpp @@ -235,6 +235,8 @@ OsmLuaProcessing::OsmLuaProcessing( supportsRemappingShapefiles = !!luaState["attribute_function"]; supportsReadingRelations = !!luaState["relation_scan_function"]; supportsPostScanRelations = !!luaState["relation_postscan_function"]; + supportsWritingNodes = !!luaState["node_function"]; + supportsWritingWays = !!luaState["way_function"]; supportsWritingRelations = !!luaState["relation_function"]; // ---- Call init_function of Lua logic @@ -272,6 +274,14 @@ bool OsmLuaProcessing::canPostScanRelations() { return supportsPostScanRelations; } +bool OsmLuaProcessing::canWriteNodes() { + return supportsWritingNodes; +} + +bool OsmLuaProcessing::canWriteWays() { + return supportsWritingWays; +} + bool OsmLuaProcessing::canWriteRelations() { return supportsWritingRelations; } @@ -1064,7 +1074,10 @@ void OsmLuaProcessing::setRelation( // Start Lua processing for relation if (!isNativeMP && !supportsWritingRelations) return; try { - luaState[isNativeMP ? "way_function" : "relation_function"](); + if (isNativeMP && supportsWritingWays) + luaState["way_function"](); + else if (!isNativeMP && supportsWritingRelations) + luaState["relation_function"](); } catch(luaProcessingException &e) { std::cerr << "Lua error on relation " << originalOsmID << std::endl; exit(1); diff --git a/src/pbf_processor.cpp b/src/pbf_processor.cpp index bbf19d22..43641e6b 100644 --- a/src/pbf_processor.cpp +++ b/src/pbf_processor.cpp @@ -56,7 +56,7 @@ bool PbfProcessor::ReadNodes(OsmLuaProcessing& output, PbfReader::PrimitiveGroup } bool emitted = false; - if (!tags.empty() && nodeKeys.filter(tags)) { + if (output.canWriteNodes() && !tags.empty() && nodeKeys.filter(tags)) { emitted = output.setNode(static_cast(nodeId), latplon, tags); } @@ -142,7 +142,7 @@ bool PbfProcessor::ReadWays( if (llVec.empty()) continue; try { - bool emitted = output.setWay(static_cast(pbfWay.id), llVec, tags); + bool emitted = output.canWriteWays() && output.setWay(static_cast(pbfWay.id), llVec, tags); // If we need it for later, store the way's coordinates in the global way store if (emitted || osmStore.way_is_used(wayId)) {