bool OsmAndTools::Styler::evaluate(bool& outRejected, QHash<QString, QString>& outEvaluatedValues, std::ostream& output) #endif { bool success = true; for (;;) { // Find style if (configuration.verbose) output << xT("Resolving style '") << QStringToStlString(configuration.styleName) << xT("'...") << std::endl; const auto mapStyle = configuration.stylesCollection->getResolvedStyleByName(configuration.styleName); if (!mapStyle) { if (configuration.verbose) { output << "Failed to resolve style '" << QStringToStlString(configuration.styleName) << "' from collection:" << std::endl; for (const auto& style : configuration.stylesCollection->getCollection()) { if (style->isMetadataLoaded()) { if (style->isStandalone()) output << "\t" << QStringToStlString(style->name) << std::endl; else output << "\t" << QStringToStlString(style->name) << "::" << QStringToStlString(style->parentName) << std::endl; } else output << "\t[missing metadata]" << std::endl; } } else { output << "Failed to resolve style '" << QStringToStlString(configuration.styleName) << "' from collection:" << std::endl; } success = false; break; } // Load all map objects QList< std::shared_ptr<const OsmAnd::Model::BinaryMapObject> > mapObjects; const auto mapObjectsFilterById = [this] (const std::shared_ptr<const OsmAnd::ObfMapSectionInfo>& section, const uint64_t mapObjectId, const OsmAnd::AreaI& bbox, const OsmAnd::ZoomLevel firstZoomLevel, const OsmAnd::ZoomLevel lasttZoomLevel) -> bool { return configuration.mapObjectsIds.contains(mapObjectId); }; if (configuration.verbose) output << xT("Going to load ") << configuration.mapObjectsIds.size() << xT(" map objects...") << std::endl; const auto obfDataInterface = configuration.obfsCollection->obtainDataInterface(); success = obfDataInterface->loadMapObjects( &mapObjects, nullptr, configuration.zoom, nullptr, mapObjectsFilterById, nullptr, nullptr, nullptr, nullptr); if (!success) break; //// Prepare all resources for renderer //if (configuration.verbose) //{ // output // << xT("Initializing map presentation environment with display density ") // << configuration.displayDensityFactor // << xT(" and locale '") // << QStringToStlString(configuration.locale) // << xT("'...") << std::endl; //} //const std::shared_ptr<OsmAnd::MapPresentationEnvironment> mapPresentationEnvironment(new OsmAnd::MapPresentationEnvironment( // mapStyle, // configuration.displayDensityFactor, // configuration.locale)); //if (configuration.verbose) // output << xT("Applying extra style settings to map presentation environment...") << std::endl; //mapPresentationEnvironment->setSettings(configuration.styleSettings); break; } return success; }
void dump(std::ostream &output, const OsmAnd::Verifier::Configuration& cfg) #endif { OsmAnd::ObfsCollection obfsCollection; for(const auto& obfsDir : cfg.obfDirs) obfsCollection.addDirectory(obfsDir); for(const auto& obfFile : cfg.obfFiles) obfsCollection.addFile(obfFile); const auto dataInterface = obfsCollection.obtainDataInterface(); const auto obfFiles = obfsCollection.getObfFiles(); output << "Will work with these files:" << std::endl; for(const auto& obfFile : obfFiles) output << "\t" << qPrintable(obfFile->filePath) << std::endl; if(cfg.action == OsmAnd::Verifier::Configuration::Action::UniqueMapObjectIds) { const OsmAnd::AreaI entireWorld(0, 0, std::numeric_limits<int32_t>::max(), std::numeric_limits<int32_t>::max()); unsigned int lastReportedCount = 0; unsigned int totalDuplicatesCount = 0; for(int zoomLevel = OsmAnd::MinZoomLevel; zoomLevel <= OsmAnd::MaxZoomLevel; zoomLevel++) { output << "Processing " << zoomLevel << " zoom level..." << std::endl; QList< std::shared_ptr<const OsmAnd::Model::MapObject> > duplicateMapObjects; QHash<uint64_t, unsigned int> mapObjectIds; const auto idsCollector = [&mapObjectIds, &lastReportedCount, &output, &totalDuplicatesCount]( const std::shared_ptr<const OsmAnd::ObfMapSectionInfo>& section, const uint64_t mapObjectId, const OsmAnd::AreaI& bbox, const OsmAnd::ZoomLevel firstZoomLevel, const OsmAnd::ZoomLevel lasttZoomLevel) -> bool { const auto itId = mapObjectIds.find(mapObjectId); if(itId != mapObjectIds.end()) { // Increment duplicates counter itId.value()++; totalDuplicatesCount++; return true; } // Insert new entry mapObjectIds.insert(mapObjectId, 0); if(mapObjectIds.size() - lastReportedCount == 10000) { output << "\t... processed 10k map objects, found " << totalDuplicatesCount << " duplicate(s) so far ... " << std::endl; lastReportedCount = mapObjectIds.size(); } return false; }; dataInterface->loadMapObjects(&duplicateMapObjects, nullptr, entireWorld, static_cast<OsmAnd::ZoomLevel>(zoomLevel), nullptr, idsCollector, nullptr); output << "\tProcessed " << mapObjectIds.size() << " map objects."; if(!mapObjectIds.isEmpty()) output << " Found " << totalDuplicatesCount << " duplicate(s) :"; output << std::endl; for(auto itEntry = mapObjectIds.cbegin(); itEntry != mapObjectIds.cend(); ++itEntry) { const auto mapObjectId = itEntry.key(); const auto duplicatesCount = itEntry.value(); if(duplicatesCount == 0) continue; output << "\tMapObject "; if(static_cast<int64_t>(mapObjectId) < 0) { int64_t originalId = -static_cast<int64_t>(static_cast<uint64_t>(-static_cast<int64_t>(mapObjectId)) & 0xFFFFFFFF); output << originalId; } else { output << mapObjectId; } output << " has " << duplicatesCount << " duplicate(s)." << std::endl; } } output << "Totally " << totalDuplicatesCount << " duplicate(s) across all zoom levels" << std::endl; } }