网上有很多下载Google地图的卫片的软件,一般下载下来的图像都是jpg格式的,另外附带一个坐标信息的描述文件。这样的数据不能直接拿来在遥感或者GIS软件中使用,因为图像里面没有投影和坐标信息,所以就需要将这个描述文件中的坐标信息导入到影像中。下面就如何使用gdal提供的工具来完成这个功能,当然也可以自己写程序。

首先看看输入数据都有什么,这里只有一个jpg图像和一个txt文件,jpg图像如下,原始大小为12800×7168,上传的时候太大,我缩小了下。

另外的描述信息主要有:

图片宽度(像素):12800
图片高度(像素):7168 Web墨卡托坐标系(地图原始坐标)
左下角:-4383205.071958936800000,-20037508.165080477000000
左上角:-4383205.071958936800000,-11271098.261898357000000
右上角:11271098.756465839000000,-11271098.261898357000000
右下角:11271098.756465839000000,-20037508.165080477000000 WGS84坐标系(经纬度坐标)
左下角:-39.375000000000000,-85.051128779806547
左上角:-39.375000000000000,-70.612614238019233
右上角:101.250000000000000,-70.612614238019233
右下角:101.250000000000000,-85.051128779806547

从上面的描述信息中可以看出来,地图原始的四角坐标都是知道的,Google的地图使用的都是Web墨卡托投影,对应的EPSG代码是900913,而经纬度对应的EPSG代码是4326。

通过上面的信息可以知道,我们可以将上面的坐标信息处理为一个World file文件,也就是jpw文件,这个文件就可以给jpg图像赋坐标信息了,至于投影信息最后可以使用gdalwarp中的-s_srs命令来指定。

首先使用gdalinfo工具查看图像的信息,如下图所示,可以看出图像是没有任何坐标和投影信息的。

通过上面的坐标计算的图像的分辨率大致为1222.9925米,所以world file里面的内容如下。(注意,这里假设图像正北朝上,一般来说Google的卫片都满足这个要求,如果不满足,可以使用上面的四角坐标用最小二乘来结算这个world file中的六个数值)。

1222.9925000000000
0.0000000000
0.0000000000
-1222.9925000000
-4383205.071958936800000
-11271098.261898357000000

将上面的内存保存为一个和jpg图像名字相同,后缀名为jpw的文件,然后使用gdalinfo查看,看看是不是有坐标信息了。

如果想把这个图像直接转成带有投影和坐标的tif数据的话,可以直接使用gdal_translate工具,命令如下:

gdal_translate.exe -of GTiff -a_srs EPSG:900913 --config GDAL_DATA C:\warmerda\GDAL110_SDK\data --config GDAL_FILENAME_IS_UTF8 NO C:\Users\LiMinlu\Desktop\jpg2tif\全球_03-02.jpg C:\Users\LiMinlu\Desktop\jpg2tif\900913.tif 

执行后使用gdalinfo查看输出的图像信息,如下图,从里面可以看到输出的图像投影和坐标信息都有了。红色区域为使用gdal_translate执行的部分。

如果想将结果直接生成WGS84的经纬度数据,可以直接使用gdalwarp工具,命令行如下。

gdalwarp.exe -of GTiff -s_srs EPSG:900913 -t_srs EPSG:4326 --config GDAL_DATA C:\warmerda\GDAL110_SDK\data --config GDAL_FILENAME_IS_UTF8 NO C:\Users\LiMinlu\Desktop\jpg2tif\全球_03-02.jpg C:\Users\LiMinlu\Desktop\jpg2tif\wgs84.tif 

执行后使用gdalinfo查看输出的图像信息,如下图,从里面可以看到输出的图像投影和坐标信息都有了。红色区域为使用gdalwarp执行的部分。

最新文章

  1. 关于pc端直播
  2. CoreProfiler/NanoProfiler性能调试监控系列总目录
  3. 使用<c:if>标签处理页面数据
  4. CPU host-passthrough技术与应用
  5. Folk博客程序——可以运行于node环境和asp环境的博客系统
  6. PHP 正则表达式处理字符串的应用(一)
  7. Row versus Set Processing, Surprise!(集合处理和单行处理数据的差异性)
  8. Android中图片处理相关问题
  9. 简单说下C#变量的作用域
  10. ThreadLocal是否会导致内存泄露
  11. AB(ApacheBench)工具 -- 压力测试
  12. Jenkins Pipline语法
  13. 如何使用thinkphp的model来验证前端表单?
  14. Golang atomic
  15. 【转】python 2.6.6升级到python 2.7.x版本的方法
  16. Sed&awk笔记之sed篇(转)
  17. 超详细的HashMap解析(jdk1.8)
  18. NodeJS的特点
  19. Linux内核中实现生产者与消费者(避免无效唤醒)【转】
  20. mysql 启动提示:错误2系统找不到指定文件

热门文章

  1. RTMPdump(libRTMP)源代码分析 4: 连接第一步——握手(Hand Shake)
  2. Android开发之手把手教你写ButterKnife框架(三)
  3. 剑指Offer——知识点储备-JVM基础
  4. Leetcode解题-链表(2.2.6)RotateList
  5. GIF动态图制作
  6. Unsupported major.minor version 52.0
  7. SSL协议相关证书文件
  8. Combiners和Partitioner编程
  9. Java继承时的初始化顺序
  10. hbase高性能读取数据