如何使用gdal正确地对Web墨卡托瓷砖进行地理定位?


16

作为示例,我将使用以下图块http://a.tile.openstreetmap.org/3/4/2.png并将其保存为“ 4_2.png”。

这种瓷砖的WGS84坐标可以被计算或读取那里通过点击对应的瓦片:

0 66.51326044311185 45 40.97989806962013 (West North East South)

如何正确地对瓷砖进行地理参考(使用gdal生成地理坐标或其他地理参考格式),以便:

  • 不需要拉伸位图(= Geotiff中的像素与原始位图中的像素完全相同)
  • 生成的图像将在GIS查看器/编辑器中的正确位置打开(例如在TatukGIS Free Viewer中)?

(于2011年9月19日编辑,以使我的问题更清楚并包括我的结论)


我的结论是:

我首先说第三个想法(见下文)是正确的。我在GIS Viewer中打开了Geotiff,并将显示的坐标与预期的坐标进行了比较。从第二个想法出来的Geotiff似乎向北移动了2个像素。这就是为什么我认为想法3(或4)是正确的原因。
但是,如果您尝试使用更高缩放级别的图块,则想法3之外的地标肯定会向南移动。在缩放级别3的图块上比较坐标是愚蠢的。在此缩放级别上的国家/地区边界被简化了,以致于比较不能给出良好的结果。

Dan S.是对的,图块的图像已经在EPSG:3857中。第二个想法就是正确的想法(并且在高缩放级别上也能提供良好的效果)


第一个想法:EPSG:4326
WGS84坐标的EPSG代码是EPSG:4326。因此,我仅使用WGS84坐标即可使用gdal_translate将瓷砖作为geotif进行地理参考

gdal_translate -of Gtiff -co tfw=yes -a_ullr 0 66.51326044311185 45 40.97989806962013 -a_srs EPSG:4326 4_2.png t4326.tif

生成的地图显示在正确的位置,但我担心投影不正确,并且瓷砖中间可能会有偏移。在尝试了很长时间以通过使用gdalwarp重新投影地图进行检查之后,我下载了Global Mapper的演示版,似乎是这种情况(与想法3相同的边框,但在磁贴内部发生了偏移)。应该拉伸图像以使用EPSG:4326坐标。


第二个想法:EPSG:3857
此图块使用“网络墨卡托”投影(即Google地图投影),现在具有EPSG代码:EPSG:3857(别名EPSG:900913)。我只是使用gdaltransform转换坐标:

gdaltransform -s_srs EPSG:4326 -t_srs EPSG:3857
0 66.51326044311185
0 10018754.1713946 0
45 40.97989806962013
5009377.08569731 5009377.08569731 0

我以米为单位的坐标是:

0 10018754.1713946 5009377.08569731 5009377.08569731 (West North East South)

现在,我可以使用gdal_translate生成一个geotiff:

gdal_translate -of Gtiff -co tfw=yes -a_ullr 0 10018754.1713946 5009377.08569731 5009377.08569731 -a_srs EPSG:3857 4_2.png t3857.tif

我的印象是,这是不正确的,因为地图的边界向北移动。这似乎是正确的想法。


第三个想法:EPSG:3857到EPSG:4055
我读到“网络墨卡托”使用WGS84坐标,但认为它们好像是球形坐标。由于大地纬度和地心纬度之间的差异(有关纬度,请参见Wikipedia),椭圆形或球面上的纬度值将不同。我发现EPSG:4055是基于WGS84的球体上球坐标的代码。

将坐标转换为EPSG:4055:

gdaltransform -s_srs EPSG:4326 -t_srs EPSG:4055
0 66.51326044311185
0 66.3722684317026 -17964.0621483233
45 40.97989806962013
45 40.7894557844857 -9152.84527519904

相应的球坐标为:

0 66.3722684317026 45 40.7894557844857 (West North East South)

然后,我就像那些坐标仍在椭球上(EPSG:4326)一样,将它们转换为网络墨卡托:

gdaltransform -s_srs EPSG:4326 -t_srs EPSG:3857
0 66.3722684317026
0 9979483.26733298 0
45 40.7894557844857
5009377.08569731 4981335.86590183 0

结果坐标与idea2的坐标不同:

0 9979483.26733298 5009377.08569731 4981335.86590183 (West North East South)

现在,我只需要将坐标写入地图即可:

gdal_translate -of Gtiff -co tfw=yes -a_ullr 0 9979483.26733298 5009377.08569731 4981335.86590183 -a_srs EPSG:3857 4_2.png t3857_through_4055.tif

第三个想法似乎给出了最好的结果。但我不确定是否正确。如果想法3是正确的,是否有一个EPSG代码可以一步完成此操作?


第四个想法:EPSG:3857到towgs84 = 0,0,0,0,0,0,0

gdal(显然还有epsg)也这样定义EPSG:3857:

+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs

而spacespacereference.org像这样:

+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378137 +b=6378137 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs

如果我使用来自spatialreference.org的定义,那么我一步就得到了正确的坐标(不过,如果它们是“正确的”坐标,我仍然不知道,但是至少它们与想法3相同):

gdaltransform -s_srs EPSG:4326 -t_srs "+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378137 +b=6378137 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"
0 66.51326044311185
0 9979483.26733298 -17964.0621483233
45 40.97989806962013
5009377.08569731 4981335.86590183 -9152.84527519904

为什么EPSG:3857的定义有这样的区别?

Answers:


11

切片图像已在EPSG:3857中。为什么不仅仅创建一个引用它的世界文件呢?

http://en.wikipedia.org/wiki/World_file

对于以缩放1覆盖N. America的图块,您将查看以下worldfile内容:

78271.517
0
0
-78271.517
-19998372.6
19998372.6

这些数字来自哪里:

  • 第1行:世界坐标系中图像像素的宽度= 20037508.342789244米/ 256像素。
  • 第2行和第3行:旋转,因此不适用。
  • 第4行:世界像素中图像像素的高度。与第1行相同,但为负,因为在图像文件中,y对应于“向下”,而在坐标系中,y对应于“向上”。
  • 第5行:左上角像素中心的世界坐标中的X坐标。这是-20037508.342789244,由图块报告的“点菜式”链接加上1/2像素像素将其带到中心。
  • 第6行:同上,仅左上角的Y坐标。

GDAL应该选择您的worldfile(.png为png);您仍然必须在命令行上告诉它EPSG:3857。

(注意:由于没有时间进行测试,因此可以轻松解决所有问题……但是希望无论如何在第一次尝试时都可以纠正!!)


谢谢您,对不起您的答复。但是实际上,我认为这将导致与第二个想法相同的事情,在该想法中,gdaltransform实际上仅用于对图像进行地理配准。
命名

您对EPSG:3857中已经流行的瓦片图像说的很对。解决方案实际上是简单地使用EPSG:3857。这是我过去检查结果的方式,这是错误的。
名称为

0

生成网络上使用的全局图块所需的功能。它包含实现以下内容的坐标转换的类:

  • 适用于Google Maps,Yahoo Maps,Microsoft Bing Maps兼容磁贴的 GlobalMercator(基于EPSG:900913 = EPSG:3785

  • 用于OpenLayers基本地图和Google Earth兼容图块的GlobalGeodetic(基于EPSG:4326)

http://svn.osgeo.org/gdal/sandbox/klokan/gdal2tiles.py


谢谢,但没有回答我的问题。我不想生成图块。我想知道什么是/将要正确的瓷砖地理配准。
名称为2010年

我做了“如果正确,是否有EPSG代码可以一步完成此操作?” 回答EPSG:900913
Mapperz

您没有:EPSG:900913的工作方式类似于EPSG:3857(或类似的EPSG:3785),并且不允许一步执行该操作,您仍然需要遍历EPSG:4055。此外,我在最初的问题中已经提到EPSG:900913作为EPSG:3857的别名。
命名

0

关于第四个想法中的第二个问题:为什么gdal的定义和spacespacereference.org的EPSG:3857的定义有这么大的区别:

主要区别在于gdal使用“ + nadgrids = @ null”和空间参考“ + towgs84 = 0,0,0,0,0,0,0”。根据文档或PROJ.4格式,两个参数都用于基准转换。我在Proj4列表服务器上发现了Mikael Rittri的一个有趣的评论

"The +to definition you suggest is not correct for WGS84 Web Mercator, though.
This is because the datum shift you use, 

   +towgs84=0,0,0,0,0,0,0

is not the same as unmodified lat/long, or "without any datum shift" as you say.
It means "no datum shift" only if the +from and +to definitions use the same ellipsoid,
and in your case the +from definition uses the WGS84 ellipsoid, while the +to definition
uses a sphere instead.  

So, you have to use a trick: use 

   +nadgrids=@null 

instead."

使用“ + towgs84 = 0,0,0,0,0,0,0,0”似乎并不正确,或者至少仅在特定条件下使用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.