c++ 读取 .tfw 文件数据(读取 .tif 影像中的投影信息)

简介: c++ 读取 .tfw 文件数据(读取 .tif 影像中的投影信息)

 关于读取 .tif 影像的投影信息,下面介绍了两种方法:

       1、按读取 .txt 的方法读取 .tfw 文件;

       2、使用 GDAL 直接从 .tif 影像中读取投影信息!


1、按读取 .txt 的方法读取 .tfw 文件


#include <iostream>
#include <iomanip>
#include <fstream>
#include <sstream>
#include <vector>
#include <stdio.h>
#include <cmath>
#include <opencv2\opencv.hpp>
#include <opencv2\imgproc\imgproc.hpp>
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include "opencv2\imgproc\types_c.h"
using namespace std;
using namespace cv;
int main() 
{
  ifstream ifs;             //创建流对象
  ifs.open(".\\wgs.tfw", ios::in);    //打开文件
  if (!ifs.is_open())           //判断文件是否打开
  {
    cout << "打开文件失败!!!";
    return 0;
  }
  //读取正确匹配特征点
  vector<string> item;        //用于存放文件中的一行数据
  string temp;            //把文件中的一行数据作为字符串放入容器中
  while (getline(ifs, temp))          //利用getline()读取每一行,并放入到 item 中
  {
    item.push_back(temp);
  }
  vector<double> res;
  for (int i = 0; i < item.size(); i++)
  {
    //数据类型转换,将string类型转换成float,如果字符串不是有数字组成,q则字符被转化为 0
    res.emplace_back(atof(item[i].c_str()));
  }
  for (double num : res)
    cout << num << endl;
  system("pause");
  return 0;
}


2、使用 GDAL 直接从 .tif 影像中读取投影信息


#include <iostream>
#include <iomanip>
#include <fstream>
#include <sstream>
#include <vector>
#include <stdio.h>
#include <cmath>
#include"gdal_priv.h"
using namespace std;
int main() 
{
  GDALAllRegister();
  GDALDataset* podataset = (GDALDataset*)GDALOpen("..\\WGS84\\wgs.tif", GA_ReadOnly);
    //保存 .tif 文件的投影信息' x=geo[0]、y=geo[3]、像素大小=geo[1]
  double geo[6];
  podataset->GetGeoTransform(geo);
  for (int i = 0; i < 6; i++)
    cout << geo[i] << endl;
  system("pause");
  return 0;
}


相关文章
|
3天前
|
存储 算法 搜索推荐
【C++面向对象——群体类和群体数据的组织】实现含排序功能的数组类(头歌实践教学平台习题)【合集】
1. **相关排序和查找算法的原理**:介绍直接插入排序、直接选择排序、冒泡排序和顺序查找的基本原理及其实现代码。 2. **C++ 类与成员函数的定义**:讲解如何定义`Array`类,包括类的声明和实现,以及成员函数的定义与调用。 3. **数组作为类的成员变量的处理**:探讨内存管理和正确访问数组元素的方法,确保在类中正确使用动态分配的数组。 4. **函数参数传递与返回值处理**:解释排序和查找函数的参数传递方式及返回值处理,确保函数功能正确实现。 通过掌握这些知识,可以顺利地将排序和查找算法封装到`Array`类中,并进行测试验证。编程要求是在右侧编辑器补充代码以实现三种排序算法
18 5
|
9天前
|
存储 算法 安全
基于哈希表的文件共享平台 C++ 算法实现与分析
在数字化时代,文件共享平台不可或缺。本文探讨哈希表在文件共享中的应用,包括原理、优势及C++实现。哈希表通过键值对快速访问文件元数据(如文件名、大小、位置等),查找时间复杂度为O(1),显著提升查找速度和用户体验。代码示例展示了文件上传和搜索功能,实际应用中需解决哈希冲突、动态扩容和线程安全等问题,以优化性能。
|
3月前
|
Linux C++
Linux c/c++文件的基本操作
在Linux环境下使用C/C++进行文件的基本操作,包括文件的创建、写入、读取、关闭以及文件描述符的定位。
34 0
Linux c/c++文件的基本操作
|
4月前
|
C++ 内存技术
[转]Visual C++内嵌swf文件并播放
[转]Visual C++内嵌swf文件并播放
|
3月前
|
Linux C++
Linux c/c++文件虚拟内存映射
这篇文章介绍了在Linux环境下,如何使用虚拟内存映射技术来提高文件读写的速度,并通过C/C++代码示例展示了文件映射的整个流程。
74 0
|
3月前
|
Linux C++
Linux c/c++文件移动
这篇文章介绍了在Linux环境下,使用C/C++语言通过命令方式和文件操作方式实现文件移动的方法。
104 0
|
4月前
|
算法 数据安全/隐私保护 C++
超级好用的C++实用库之MD5信息摘要算法
超级好用的C++实用库之MD5信息摘要算法
114 0
|
4月前
|
Linux API C++
超级好用的C++实用库之文件目录操作
超级好用的C++实用库之文件目录操作
59 0
|
3天前
|
C++ 芯片
【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】
声明一个简单的Computer类,含有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,以及两个公有成员函数run、stop。只能在类的内部访问。这是一种数据隐藏的机制,用于保护类的数据不被外部随意修改。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。成员可以在派生类(继承该类的子类)中访问。成员,在类的外部不能直接访问。可以在类的外部直接访问。为了完成本关任务,你需要掌握。
35 18
|
3天前
|
存储 编译器 数据安全/隐私保护
【C++面向对象——类与对象】CPU类(头歌实践教学平台习题)【合集】
声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,以及两个公有成员函数run、stop。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。​ 相关知识 类的声明和使用。 类的声明和对象的声明。 构造函数和析构函数的执行。 一、类的声明和使用 1.类的声明基础 在C++中,类是创建对象的蓝图。类的声明定义了类的成员,包括数据成员(变量)和成员函数(方法)。一个简单的类声明示例如下: classMyClass{ public: int
30 13