inline bool PBFParser::ReadHeader() { _ThreadData initData; /** read Header */ if(!readPBFBlobHeader(input, &initData)) { return false; } if(readBlob(input, &initData)) { if(!initData.PBFHeaderBlock.ParseFromArray(&(initData.charBuffer[0]), initData.charBuffer.size() ) ) { std::cerr << "[error] Header not parseable!" << std::endl; return false; } for(int i = 0, featureSize = initData.PBFHeaderBlock.required_features_size(); i < featureSize; ++i) { const std::string& feature = initData.PBFHeaderBlock.required_features( i ); bool supported = false; if ( "OsmSchema-V0.6" == feature ) { supported = true; } else if ( "DenseNodes" == feature ) { supported = true; } if ( !supported ) { std::cerr << "[error] required feature not supported: " << feature.data() << std::endl; return false; } } } else { std::cerr << "[error] blob not loaded!" << std::endl; } return true; }
bool PBFParser::readNextBlock(std::fstream &stream, ParserThreadData *thread_data) { if (stream.eof()) { return false; } if (!readPBFBlobHeader(stream, thread_data)) { return false; } if (thread_data->PBFBlobHeader.type() != "OSMData") { return false; } if (!readBlob(stream, thread_data)) { return false; } if (!thread_data->PBFprimitiveBlock.ParseFromArray(&(thread_data->charBuffer[0]), thread_data->charBuffer.size())) { std::cerr << "failed to parse PrimitiveBlock" << std::endl; return false; } return true; }