Map 如何准确地为地图覆盖制作地图

Map 如何准确地为地图覆盖制作地图,map,mkmapview,overlay,coordinates,Map,Mkmapview,Overlay,Coordinates,我有覆盖整个南非的图片。这些文件采用Tiff格式,并嵌入了坐标。我正在尝试拍摄这些图像(大约20张图像),并将它们用作iPhone应用程序中的地图覆盖。我的问题在于(准确地)将地图切割成瓷砖 MapTiler是我计划用来将这些海量图像切割成瓷砖的应用程序,但它向我询问了一些细节。我必须从以下各项中作出选择: 系统的自定义定义(WKT,项目4,…) WGS84-纬度和经度(大地测量) 通用横向墨卡托-UTM(投影) 从EPSG/ESRI数据库中指定id号 按名称搜索坐标系 我不知道每个人是干什

我有覆盖整个南非的图片。这些文件采用Tiff格式,并嵌入了坐标。我正在尝试拍摄这些图像(大约20张图像),并将它们用作iPhone应用程序中的地图覆盖。我的问题在于(准确地)将地图切割成瓷砖

MapTiler是我计划用来将这些海量图像切割成瓷砖的应用程序,但它向我询问了一些细节。我必须从以下各项中作出选择:

  • 系统的自定义定义(WKT,项目4,…)
  • WGS84-纬度和经度(大地测量)
  • 通用横向墨卡托-UTM(投影)
  • 从EPSG/ESRI数据库中指定id号
  • 按名称搜索坐标系
我不知道每个人是干什么的

我的tiff文件还有一个
.tfw
文件(相同的名称,不同的扩展名)-我不知道这是什么。(我没有创造这些图像,但相信它们可能是准确的,因为它来自政府的地理信息部门)

我只是在所有默认设置下通过MapTiler运行了这张地图,以查看它与普通谷歌地图的地图不完全对齐。说到这里,我相信在我通过MapTiler发送图像进行切割和处理之前,我必须在Google Earth上手动重新对齐这些图像

我的问题

  • MapTiler是否自动拾取
    .tfw
    因为这些可能是正确的坐标
  • 如何轻松地(例如,通过在图像上拾取点,然后在真实地图上)重新对齐/放置这些图像
希望有人对此有一些建议

任何不明确之处,请评论/询问

谢谢你抽出时间

[编辑]

我用记事本打开了
.tfw
文件,里面只有这些内容:

      0.0004024840
     -0.0000001596
     -0.0000002286
     -0.0003809100
     17.0984027750
    -32.6997115702

我不熟悉tfw文件,也不熟悉MapTiler,但我可以做一些猜测,并为坐标系添加一些背景,因为我在前世作为火箭科学家(实际上)为洛克希德·马丁公司工作

首先,TL;博士,我猜UTM是你选择的系统

自定义定义可能需要您编写一些不好的东西,以使系统理解您的自定义格式。id号和按名称指定的坐标号可能是为了实现更多的互操作性。我知道的系统有:

  • WGS84是1984年标准化的扁(挤压)球体地球模型;它允许人们根据这个理想化的地球模型,在lat、lon、alt中指定一个位置。换句话说,这是一个方程式,如果一切都是平稳的,并且处于“海平面”,地球会是什么样子

  • UTM是地球的一个模型,就像人们在地图上看到的一样。它允许用户指定一个位置,即距赤道和本初子午线的北距、东距。这些值以米为单位,是.tfw文件中的最后两个数字

有关.tfw文件中的内容的更多信息,我找到了。如果我读对了,它似乎只是一个带有一些元数据的文本文件,而.tfw文件的最后两个数字应该指示图像左上角像素的位置

这是一个关于如何在墨卡托投影地图上找到一个位置的很好的描述


最后,谷歌搜索似乎表明谷歌地图使用WGS84作为其坐标框架。您可以尝试使用在线工具将您的位置从.tfw文件转换为
lat、lon、alt
,然后查看是否可以在Google地图上正确定位您的图像。如果是这样的话,你已经破解了你的定位问题:你可以找到一些更自动化的解决方案来重新定位你所有的数据。

< P>如果MapTiler没有做你需要的事情,你应该考虑使用GUI背后的实用工具。格达尔(http://www.gdal.org/gdal_utilities.html)将为iOS准备geotifs所需的一切,这正是我用来做的。从这里开始的说明假设您已经安装了GDAL

首先,您需要确保坐标确实嵌入到tif中

gdalinfo your.tif
通读该输出,若它并没有提到它使用的投影和坐标,那个么您现在需要将该世界文件保存在tif中

根据源文件的大小,您可能希望在平铺之前合并它们。这将在单个磁贴包含来自两个相邻geotifs的数据时产生稍微好一点的边。如果20个GEOTIF构成一个完美的矩形,并且符合最大tif尺寸,则使用以下方法:

gdalwarp -co COMPRESS=LZW originals/*.tif  output.tif -srcnodata 0 -dstnodata 0 -multi
末端的位用于使任何未使用的像素透明,并使用多个处理器(如果有)。如果上面的命令抱怨透明度或alpha通道,则需要使用以下命令将TIF转换为rgba:

gdal_translate -co COMPRESS=LZW old.tif new.tif -expand rgba
现在来实际平铺:

gdal2tiles.py --zoom 6-16 your.tif outputfolder
这将以指定的缩放级别制作.tif的平铺,并将其保存在outputfolder中。它还将创建.kml文件和围绕tif旋转的边缘的透明平铺,以找到平铺集的投影。这三条线将解决这个问题。
334c
是我的驱动器上透明的256x256.png的大小,以字节为单位。这将是不同的对你的,所以找到一个这样的文件,并调整值。另外,这里的路径要非常小心,自动删除可能会出错,所以请仔细检查所有内容。首先删除.kml文件,然后删除所有100%透明的.png,然后删除所有现在为空的目录:

rm -r */*/*.kml
find ./ -type f -size 334c -exec rm -f {} \;
find ./ -depth -empty -type d -exec 
但你还没完成。正如我前面提到的,一些平铺将覆盖包含来自两个TIF的数据的区域。如果您将它们分别平铺,并且每个平铺集将包含相同的平铺,其中一半包含数据,一半透明。如果您只是合并这些文件夹,则第一个tif中的磁贴将覆盖第二个tif中的磁贴,并且它仍然会
#! /usr/bin/perl

use File::Slurp;
use File::Copy;

$baseDir = "/Volumes/Elemental/geotifs/destination";
$incomingDir = "/Volumes/Elemental/geotifs/sourcetiles";


my @files = read_dir($incomingDir);
foreach my $zoomlevel(@files) { 

    if(-d "$incomingDir/$zoomlevel") {
        #mkdir "$imgdir/$nextZoom/";

            unless(-e "$baseDir/$zoomlevel")
            {
                mkdir "$baseDir/$zoomlevel";
            }

            my @subdirs = read_dir("$incomingDir/$zoomlevel");

            foreach my $x(@subdirs) {
                    #print "subdir called $imgdir/$zoomlevel/$x\n";

                    if(-d "$incomingDir/$zoomlevel/$x") {
                        unless(-e "$baseDir/$zoomlevel/$x")
                        {
                            mkdir "$baseDir/$zoomlevel/$x";
                        }

                         my @mapfiles = read_dir("$incomingDir/$zoomlevel/$x");
                         foreach my $y(@mapfiles) {

                            if (-e "$baseDir/$zoomlevel/$x/$y")
                            {
                                print "Have to merge /$zoomlevel/$x/$y \n";
                                qx(convert $baseDir/$zoomlevel/$x/$y $incomingDir/$zoomlevel/$x/$y -composite $baseDir/$zoomlevel/$x/$y);
                            } else {
                                copy("$incomingDir/$zoomlevel/$x/$y","$baseDir/$zoomlevel/$x/$y");
                            }

                         }
                    }
            }
    }

}
pngnq -n 256 */*/*.png
for OriginalFile
do

Location=`dirname "$OriginalFile"`
FileName="$OriginalFile"

newName=`echo $FileName | sed 's/-nq8//g'`

if [ $newName != "$FileName" ]
then
  mv "$FileName" "$newName"
fi

done
./removeNq8.sh */*/*nq8.png