void printFileInformation(const char* fileName, VerboseInfo* verbose) { BinaryMapFile* file = initBinaryMapFile(fileName); std::vector<BinaryPartIndex*>::iterator its = file->indexes.begin(); time_t date = file->dateCreated/1000; printf("Obf file.\n Version %d, basemap %d, date %s \n", file->version, file->basemap, ctime(&date)); int i = 1; for (; its != file->indexes.end(); its++, i++) { BinaryPartIndex* it = *its; std::string partname = ""; if (it->type == MAP_INDEX) { partname = "Map"; } else if (it->type == TRANSPORT_INDEX) { partname = "Transport"; } else if (it->type == ROUTING_INDEX) { partname = "Routing"; } else if (it->type == POI_INDEX) { partname = "Poi"; } else if (it->type == ADDRESS_INDEX) { partname = "Address"; } printf("%d. %s data %s - %d bytes\n", i, partname.c_str(), it->name.c_str(), it->length); if (it->type == MAP_INDEX) { MapIndex* m = ((MapIndex*) it); int j = 1; std::vector<MapRoot>::iterator rt = m->levels.begin(); for (; rt != m->levels.end(); rt++) { const char* ch = formatBounds(rt->left, rt->right, rt->top, rt->bottom); printf("\t%d.%d Map level minZoom = %d, maxZoom = %d, size = %d bytes \n\t\t Bounds %s \n", i, j++, rt->minZoom, rt->maxZoom, rt->length, ch); } if ((verbose != NULL && verbose->vmap)) { // FIXME //printMapDetailInfo(verbose, index); } } else if (it->type == TRANSPORT_INDEX) { // FIXME // TransportIndex ti = ((TransportIndex) p); // int sh = (31 - BinaryMapIndexReader.TRANSPORT_STOP_ZOOM); // println( // "\t Bounds " // + formatBounds(ti.getLeft() << sh, ti.getRight() << sh, ti.getTop() << sh, // ti.getBottom() << sh)); } else if (it->type == POI_INDEX && (verbose != NULL && verbose->vpoi)) { //printPOIDetailInfo(verbose, index, (PoiRegion) p); } else if (it->type == ADDRESS_INDEX && (verbose != NULL && verbose->vaddress)) { // printAddressDetailedInfo(verbose, index); } } }
void printPOIDetailInfo(std::ostream& output, const OsmAnd::Inspector::Configuration& cfg, const std::shared_ptr<OsmAnd::ObfReader>& reader, const std::shared_ptr<const OsmAnd::ObfPoiSectionInfo>& section) #endif { output << xT("\tBounds ") << formatBounds(section->area31.left, section->area31.right, section->area31.top, section->area31.bottom) << std::endl; QList< std::shared_ptr<const OsmAnd::Model::AmenityCategory> > categories; OsmAnd::ObfPoiSectionReader::loadCategories(reader, section, categories); output << xT("\tCategories:") << std::endl; for(auto itCategory = categories.cbegin(); itCategory != categories.cend(); ++itCategory) { auto category = *itCategory; output << xT("\t\t") << QStringToStlString(category->name) << std::endl; for(auto itSubcategory = category->subcategories.cbegin(); itSubcategory != category->subcategories.cend(); ++itSubcategory) output << xT("\t\t\t") << QStringToStlString(*itSubcategory) << std::endl; } QList< std::shared_ptr<const OsmAnd::Model::Amenity> > amenities; OsmAnd::AreaI bbox31; bbox31.top = OsmAnd::Utilities::get31TileNumberY(cfg.bbox.top); bbox31.bottom = OsmAnd::Utilities::get31TileNumberY(cfg.bbox.bottom); bbox31.left = OsmAnd::Utilities::get31TileNumberX(cfg.bbox.left); bbox31.right = OsmAnd::Utilities::get31TileNumberX(cfg.bbox.right); OsmAnd::ObfPoiSectionReader::loadAmenities(reader, section, cfg.zoom, 3, &bbox31, nullptr, &amenities); output << xT("\tAmenities, ") << amenities.count() << xT(" item(s)"); if(!cfg.verboseAmenities) { output << std::endl; return; } output << ":" << std::endl;; for(auto itAmenity = amenities.cbegin(); itAmenity != amenities.cend(); ++itAmenity) { auto amenity = *itAmenity; output << xT("\t\t") << QStringToStlString(amenity->latinName) << xT(" [") << amenity->id << xT("], ") << QStringToStlString(categories[amenity->categoryId]->name) << xT(":") << QStringToStlString(categories[amenity->categoryId]->subcategories[amenity->subcategoryId]) << xT(", lat ") << OsmAnd::Utilities::get31LatitudeY(amenity->point31.y) << xT(" lon ") << OsmAnd::Utilities::get31LongitudeX(amenity->point31.x) << std::endl; } }
void dump(std::ostream &output, const QString& filePath, const OsmAnd::Inspector::Configuration& cfg) #endif { std::shared_ptr<QFile> file(new QFile(filePath)); if(!file->exists()) { output << xT("OBF '") << QStringToStlString(filePath) << xT("' does not exist.") << std::endl; return; } if(!file->open(QIODevice::ReadOnly)) { output << xT("Failed to open OBF '") << QStringToStlString(file->fileName()) << xT("'") << std::endl; return; } std::shared_ptr<OsmAnd::ObfReader> obfReader(new OsmAnd::ObfReader(file)); const auto& obfInfo = obfReader->obtainInfo(); output << xT("OBF '") << QStringToStlString(file->fileName()) << xT("' version = ") << obfInfo->version << std::endl; int idx = 1; for(auto itSection = obfInfo->mapSections.cbegin(); itSection != obfInfo->mapSections.cend(); ++itSection, idx++) { const auto& section = *itSection; output << idx << xT(". Map data '") << QStringToStlString(section->name) << xT("' - ") << section->length << xT(" bytes") << std::endl; int levelIdx = 1; for(auto itLevel = section->levels.cbegin(); itLevel != section->levels.cend(); ++itLevel, levelIdx++) { auto level = (*itLevel); output << xT("\t") << idx << xT(".") << levelIdx << xT(" Map level minZoom = ") << level->minZoom << xT(", maxZoom = ") << level->maxZoom << std::endl; output << xT("\t\tBounds ") << formatBounds(level->area31.left, level->area31.right, level->area31.top, level->area31.bottom) << std::endl; } if(cfg.verboseMap) printMapDetailInfo(output, cfg, obfReader, section); } for(auto itSection = obfInfo->transportSections.cbegin(); itSection != obfInfo->transportSections.cend(); ++itSection, idx++) { const auto& section = *itSection; output << idx << xT(". Transport data '") << QStringToStlString(section->name) << xT("' - ") << section->length << xT(" bytes") << std::endl; output << "\tBounds " << formatBounds(section->area24.left << (31 - 24), section->area24.right << (31 - 24), section->area24.top << (31 - 24), section->area24.bottom << (31 - 24)) << std::endl; } for(auto itSection = obfInfo->routingSections.cbegin(); itSection != obfInfo->routingSections.cend(); ++itSection, idx++) { const auto& section = *itSection; output << idx << xT(". Routing data '") << QStringToStlString(section->name) << xT("' - ") << section->length << xT(" bytes") << std::endl; double lonLeft = 180; double lonRight = -180; double latTop = -90; double latBottom = 90; for(auto itSubsection = section->subsections.cbegin(); itSubsection != section->subsections.cend(); ++itSubsection) { auto subsection = itSubsection->get(); lonLeft = std::min(lonLeft, OsmAnd::Utilities::get31LongitudeX(subsection->area31.left)); lonRight = std::max(lonRight, OsmAnd::Utilities::get31LongitudeX(subsection->area31.right)); latTop = std::max(latTop, OsmAnd::Utilities::get31LatitudeY(subsection->area31.top)); latBottom = std::min(latBottom, OsmAnd::Utilities::get31LatitudeY(subsection->area31.bottom)); } output << xT("\tBounds ") << formatGeoBounds(lonLeft, lonRight, latTop, latBottom) << std::endl; } for(auto itSection = obfInfo->poiSections.cbegin(); itSection != obfInfo->poiSections.cend(); ++itSection, idx++) { const auto& section = *itSection; output << idx << xT(". POI data '") << QStringToStlString(section->name) << xT("' - ") << section->length << xT(" bytes") << std::endl; if(cfg.verbosePoi) printPOIDetailInfo(output, cfg, obfReader, section); } for(auto itSection = obfInfo->addressSections.cbegin(); itSection != obfInfo->addressSections.cend(); ++itSection, idx++) { const auto& section = *itSection; output << idx << xT(". Address data '") << QStringToStlString(section->name) << xT("' - ") << section->length << xT(" bytes") << std::endl; printAddressDetailedInfo(output, cfg, obfReader, section); } file->close(); }