|
- /* 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<TifImageLayer> 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<Image*> 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<TifImageLayer> ImageLayer::getTifImage(int num) {
- if(isExists(num) == true) {
- return _vecImage.at(num)->getImagePtr();
- } else {
- return nullptr;
- }
- }
-
- osg::ref_ptr<TifImageLayer> 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<Image*> ImageLayer::findImageFromDate(std::vector<Image*> vecImage, std::string imageDate) {
- std::vector<Image*> 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<Image*> ImageLayer::findImageFromType(std::vector<Image*> vecImage, std::string imageType) {
- std::vector<Image*> 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;
- }
|