使用

tiff3.8.2 和 geotiff1.2.5 读取一个 geotiff 格式的图像,获取图片的经度、纬度和高度值。

1、

经度和纬度可以通过 geotiff 读到栅格坐标和地理坐标的换算关系。

GTIF *gtif ;

int tiepoint_count, count, transform_count;

tiff_t *tif=gtif->gt_tif;

double

*tiepoints =

0;

double *pixel_scale =

0;

double

*transform =

0;

TempKeyData tempData;

if

(!(gtif->gt_methods.get)(tif,

GTIFF_TIEPOINTS,&tiepoint_count,

&tiepoints ))

tiepoint_count = 0;

if

(!(gtif->gt_methods.get)(tif, GTIFF_PIXELSCALE,

&count, &pixel_scale ))

count = 0;

if

(!(gtif->gt_methods.get)(tif,

GTIFF_TRANSMATRIX,&transform_count,

&transform ))

transform_count = 0;

这里用到的是

geotiff 的方法。

ModelTiepointTag (2,3):

0

0

0

118.999861

32.0001389

0

ModelPixelScaleTag (1,3):

0.000277777778

0.000277777778

0

坐标

(0,0) 点的经度和纬度是 118.999861 和

32.0001389 ,换算比例是 0.000277777778 和 0.000277777778 ,换算公式为

*x = (*x - tiepoints[0]) *

pixel_scale[0] + tiepoints[3];

*y = (*y - tiepoints[1]) * (-1 *

pixel_scale[1]) + tiepoints[4];

如果读到的是

ModelTransformationTag

,可以这样计算经度、纬度。

*x = x_in * transform[0] + y_in * transform[1] +

transform[3];

*y = x_in *

transform[4] + y_in * transform[5] + transform[7];

2、

要读取高度值,必须先读取某点的灰度值。

int stripMax, stripCount;

stripSize = TIFFStripSize (image);

stripMax = TIFFNumberOfStrips (image);

unsigned long

bufferSize, count;

bufferSize = stripMax *

stripSize;

if ((buffer = (char

*) malloc(bufferSize)) == NULL)

{

fprintf(stderr, "Could not allocate enough memory for the

uncompressed image/n" );

exit(42);

}

for (stripCount = 0; stripCount

< stripMax; stripCount++){

if ((result = TIFFReadEncodedStrip

(image, stripCount,buffer + imageOffset,stripSize)) ==

-1){

fprintf(stderr, "Read error on input

strip number %d/n" , stripCount);

exit(42);

}

imageOffset += result;

}

通过 TIFFReadEncodeStrip 将图像的灰度值读出来,灰度值即高度值。这里用到的 tiff 的方法。

3、

tiff 和 geotiff 在

windows 下的编译

打开

visual studio 2008

命令提示,

tiff 的解压目录下 nmake /f makefile.vc 。

如果提示缺少

jpeglib.h 导致编译失败,这时请修改 ../libtiff/tiffconf.h.vc , 把其中的 , 中的注释 去掉。这是因为机子上缺少 libjpeg 库,再删掉

.../libtiff/

下的所有 .obj 文件。 然后再编译,这样就可以编译成功。

创建一个目录

libgeotiff (路径也可以是其它的),把 Libgeotiff 解压到

X:/libgeotiff/

下,同时在 X: /libgeotiff/ 创建一个 libtiff (文件夹名一定要为 libtiff )

, 再到 C:/

tiff-3.8.2/ 把编译好的

libtiff 目录复制到 C:/libgeotiff/libtiff/ 下,最后形成的目录结构如下所示: /libgeotiff

/libgeotiff/libgeotiff-1.2.5

/libtiff

/libtiff/libtiff 注意目录结构一定要为上述结构,否则无法编译。 在命令提示符下,用 “cd” 命令定位到

X:

/libgeotiff/libgeotiff-1.2.5 ,输入以下命令: nmake /f makefile.vc

4、

利用 Tiff 和

geotiff 在 vs2008 下的开发

VC 中你的工程里 Projects->Settings 中进行如下设置:

Link->Project Options 中加上 /nodefaultlib:"libcd.lib"

Link->Object/library modules

中添加 libgeotiff.lib 和 libtiff.lib ;

然后在

Tools->Options 中的 Drectories 选项卡中添加 libgeotiff 库的目录:

Include

Files : .../libgeotiff ;

.../libgeotiff/libtiff/libtiff ; .../libgeotiff/libxtiff

Library

Files : .../libgeotiff ;

.../libgeotiff/libtiff/libtiff ;

1.

添加编译所需要(依赖)的 lib 文件

[

解决方案资源管理器 ]“ 项目

->

属性 -> 配置属性 -> 连接器 -> 输入 -> 附加依赖项 ” 里填写

“xxx.lib” ,多个 lib 以空格隔开。

(等同于 “#pragma comment(lib, "xxx.lib") ” 语句)

2.

添加库( Libs )文件目录

方法

1 : [ 解决方案资源管理器

]“ 项目 -> 属性 -> 配置属性 -> 连接器 -> 常规 -> 附加库目录 ”方法

2 : [ 菜单

]“ 工具 -> 选项 -> 项目和解决方案 ->C++ 目录 ” ,选择对应平台,然后添加所需 “ 库文件

” 目录

3.

添加包含( include )文件目录

方法

1 : [ 解决方案资源管理器

]“ 项目 -> 属性 -> 配置属性 ->C/C++-> 常规 -> 附加包含目录 ”方法

2 : [ 菜单

]“ 工具 -> 选项 -> 项目和解决方案 ->C++ 目录 ” ,选择对应平台,然后添加所需 “ 包括文件

” 目录。

geotif 添加坐标_tiff和geotiff经度纬度高度值读取相关推荐

  1. geotif 添加坐标_python – 如何获取geotif中单元格的坐标?

    使用仿射变换矩阵,将像素坐标映射到世界坐标.例如,使用 affine包. (还有其他方法可以使用简单的数学方法.) from affine import Affine fname = '/path/t ...

  2. 飞机3D轨迹绘制(经度-纬度-高度)

    使用Python绘制 #绘制三维直线图,将飞机飞行的航迹用(经度,纬度和高度)来描述 #******************************************************** ...

  3. django经度纬度计算两点距离实例及微信商家付款给用户接口实例

    长路漫漫,未知作伴. python 根据经度纬度计算两点距离 小数点保留位数 base加时间戳加密 十六进制数字转十进制字符串 微信获取用户openid 云通讯发送短信接口 django 微信小程序提 ...

  4. java根据2个经纬度点,计算这2个经纬度点之间的距离(通过经度纬度得到距离)

    最近做一个项目:需要查询一个站点(已知该站点经纬度)500米范围内的其它站点.所以,我首先想到的是,对每条记录,去进行遍历,跟数据库中的每一个点进行距离计算,当距离小于500米时,认为匹配.这样做确实 ...

  5. 根据经度纬度计算两者之间的距离

    $i = 10.0; //差值可自定义,值越大,范围就越大 $min_latitude = $lat - $i; //纬度最小值 $max_latitude = $lat + $i; //纬度最大值 ...

  6. 半正矢公式(Haversine公式)——根据经度纬度计算两点间距离

    一.说明 该计算得到的距离是两点之间的直线距离. 参考文章 坐标测算直线距离与坐标转换 半正矢公式:根据经度纬度计算两点间距离 半正矢公式(Haversine公式)

  7. 根据2个经纬度点,计算这2个经纬度点之间的距离(通过经度纬度得到距离)

    根据2个经纬度点,计算这2个经纬度点之间的距离(通过经度纬度得到距离) 球面上任意两点之间的距离计算公式可以参考维基百科上的下述文章. Great-circle distance Haversine ...

  8. 高德地图----逆向地理编码(将经度纬度转换地址)

    概述: 需要根据经度纬度转换为具体的地址. 1.官方例子: 网址:官方的例子(用不了) <!doctype html> <html> <head><meta ...

  9. Spark之cache ,persist ,checkpoint ,广播变量及其案例 : 根据IP地址(浏览器访问日志获取) / 经度纬度定位地理位置案例(7)

    一  cache 和 persist 和 unpersist 1  cache 和 persist 1.1  cache 和 persist 的使用场景 (为什么使用 ?) 一个 applicatio ...

最新文章

  1. java中的volatile和synchronized
  2. Android UncaughtExceptionHandler 全局异常监控
  3. 面试再也不怕问到HashMap(二)
  4. 安装 PyCharm
  5. Python format功能
  6. 蛋糕是叫胚子还是坯子_教你做巧克力淋面蛋糕,掌握这个配比,好看又好吃,10分钟做一个...
  7. Spring框架学习笔记05:Spring AOP基础
  8. Linux Kernel TCP/IP Stack|Linux网络硬核系列 | 图
  9. springmvc往html设置变量,SpringMVC:@MatrixVariable矩阵变量
  10. C++中读取文件乱码问题
  11. 随想录(学习nxp rt1052 soc)
  12. 【前端】【thymeleaf】thymeleaf初始化的表格循环
  13. sonar不支持mysql_sonar-iOS的实践
  14. vc6.0c语言如何延迟清屏时间,[转载]关于在vc6.0中输出运动的笑脸问题
  15. Adobe Acrobat软件安装步骤
  16. android是j2me的一个实现吗,J2me和安卓有什么区别
  17. yuv420转yuv422(yuyv)
  18. matlab导出高分辨率图片,Matlab导出高DPI图像——生成高分辨率.eps .tiff .jpg
  19. Android app客户端性能测试工具Emmagee 浅析
  20. 表白代码收藏馆,谁说程序猿不懂浪漫

热门文章

  1. 【python 1】python 基础
  2. 群晖DSM PT软件安装记录一:安装transmission
  3. 长期坐着使用计算机会导致,安全生产知识竞赛题库体力处理操作
  4. 商业需求文档(BRD)怎么写
  5. 视觉惯性单目SLAM (二) 算法基础知识
  6. webRTC(十):webrtc 实现web端对端视频
  7. 东华大学 oj1——求长方形的面积和周长
  8. 剑桥标准英语教程听力资源1-4级
  9. 马自达CX-4升级英国·牧童Vaquero汽车音响
  10. 合肥通用职业技术学院计算机专业,2020年安徽高考专科提前批及大专录取时间及录取结果查询...