/* Copyright(c)--Navinfo--Author:fangzurui--date:2023-10-20 */ #include "ImageLayer.h" ImageLayer::ImageLayer() {} ImageLayer::~ImageLayer() {} Image* ImageLayer::createImage(std::string name, std::string date, std::string type, MapPoint mapPoint) { // 创建tif对象 Image* image = new Image(); image->setImageName(name); image->setImageDate(date); image->setImageType(type); image->setImageCenterCoord(mapPoint); // 创建pTifImageLayer osg::ref_ptr pTif = nullptr; image->setImagePtr(pTif); return image; } void ImageLayer::addImage(Image* image) { if(image == nullptr) { return; } else { _vecImage.push_back(image); } } Image* ImageLayer::getImage(int num) { return _vecImage.at(num); } std::vector ImageLayer::getImageVec() { return _vecImage; } std::string ImageLayer::getImageName(int num) { if(isExists(num) == true) { return _vecImage.at(num)->getImageName(); } else { return ""; } } std::string ImageLayer::getImageType(int num) { if(isExists(num) == true) { return _vecImage.at(num)->getImageType(); } else { return ""; } } std::string ImageLayer::getImageDate(int num) { if(isExists(num) == true) { return _vecImage.at(num)->getImageDate(); } else { return ""; } } MapPoint ImageLayer::getImageCenterCoord(int num) { if(isExists(num) == true) { return _vecImage.at(num)->getImageCenterCoord(); } else { return {0, 0, 0}; } } osg::ref_ptr ImageLayer::getTifImage(int num) { if(isExists(num) == true) { return _vecImage.at(num)->getImagePtr(); } else { return nullptr; } } osg::ref_ptr ImageLayer::getTifImage(std::string imageDate) { for(int i = 0; i < _vecImage.size(); i++) { if(_vecImage.at(i)->getImageDate() == imageDate) { return _vecImage.at(i)->getImagePtr(); } } return nullptr; } void ImageLayer::clearImage() { // 先释放所有的指针 while(!_vecImage.empty()) { delete _vecImage.back(); } _vecImage.clear(); } void ImageLayer::deleteImage(int num) { if(isExists(num) == true) { // 删除下标对应的指针 _vecImage.at(num)->getImagePtr().release(); delete _vecImage.at(num); // 从数组中移除 _vecImage.erase(_vecImage.begin() + num); } else { return; } } void ImageLayer::deleteImage(std::string imageDate) { for(int i = 0; i < _vecImage.size(); i++) { // 按照生成的时间判断 if(_vecImage.at(i)->getImageDate() == imageDate) { if(_vecImage.at(i)->getImagePtr().valid() == true) { _vecImage.at(i)->getImagePtr().release(); delete _vecImage.at(i); } _vecImage.erase(_vecImage.begin() + i); return; } else { continue; } } } bool ImageLayer::isExists(int num) { // 数组是否为空 if(_vecImage.empty() == true) { return false; } // 下标是否越界 if(num > _vecImage.size() - 1 || num < 0) { return false; } // 下标对应值是否为空 if(_vecImage.at(num) == nullptr) { _vecImage.erase(_vecImage.begin() + num); return false; } return true; } bool ImageLayer::isExists(std::string imageDate) { // 数组是否为空 if(_vecImage.empty() == true) { return false; } // 判断传入指针是否为空 if(imageDate.empty() == true) { return false; } // 元素是否在数组中存在 for(int i = 0; i < _vecImage.size(); i++) { if(_vecImage.at(i)->getImageDate() == imageDate) { return true; } else { continue; } } return false; } int ImageLayer::findKeyFromValue(Image* image) { if(_vecImage.size() == 1) { return -1; } int index = std::find(_vecImage.begin(), _vecImage.end(), image) - _vecImage.begin(); return index; } std::vector ImageLayer::findImageFromDate(std::vector vecImage, std::string imageDate) { std::vector resultVecImage; // 对数组的对象按照时间范围进行检索筛选 if(vecImage.size() == 0) { return resultVecImage; } // 将时间字符串转为数字 QString searchImageDate(imageDate.c_str()); searchImageDate.replace("-", ""); for(int i = 0; i < vecImage.size(); i++) { // 将时间字符串转为数字 QString strImageDate(vecImage.at(i)->getImageDate().c_str()); strImageDate.replace("-", ""); // 大于等于输入时间的对象将存放到输出数组中 if(strImageDate.toInt() >= searchImageDate.toInt()) { resultVecImage.push_back(vecImage.at(i)); } else { continue; } } return resultVecImage; } std::vector ImageLayer::findImageFromType(std::vector vecImage, std::string imageType) { std::vector resultVecImage; // 对数组的对象按照时间范围进行检索筛选 if(vecImage.size() == 0) { return resultVecImage; } // 当输入是全选时直接返回原数组 if(imageType == "All") { return vecImage; } else { for(int i = 0; i < vecImage.size(); i++) { // 符合输入类型的对象将存放到输出数组中 if(imageType == vecImage.at(i)->getImageType()) { resultVecImage.push_back(vecImage.at(i)); } else { continue; } } } return resultVecImage; }