Lou*_*ley 3 overlay map coordinates mkmapview
我有覆盖整个南非的图片。它们为Tiff格式,并已将坐标嵌入其中。我正在尝试拍摄这些图像(大约20张图像),并将它们用作我的iPhone应用程序中的地图叠加层。我的问题在于将地图正确地切成图块。
我计划将MapTiler应用程序用于将这些大量图像切成小块,但它向我询问了一些细节。我必须选择:
关于每个人的所作所为,我一无所知。
我的tiff文件也有一个.tfw文件(相同的名称,不同的扩展名)-我不知道这是什么。(我没有创建图像,但是相信它们可能是准确的,因为它来自政府的地理部门)
我只是在所有默认设置下都通过MapTiler运行了该地图,以查看它与普通Google Maps的地图之间的对齐情况并非完美。如此说来,我相信在通过MapTiler发送图像进行裁剪和处理之前,我必须在Google Earth上手动重新对齐这些图像。
我的问题:
.tfw?-因为它们可能具有正确的坐标。希望有人对此有一些提示!
如有任何疑问,请发表评论/询问!
谢谢你的时间。
[编辑]
我.tfw使用记事本打开了文件,这就是其中的全部内容:
0.0004024840
-0.0000001596
-0.0000002286
-0.0003809100
17.0984027750
-32.6997115702
Run Code Online (Sandbox Code Playgroud)
如果MapTiler没有执行您需要的操作,则应考虑使用GUI背后的实用程序。GDAL(http://www.gdal.org/gdal_utilities.html)几乎可以完成为iOS做好地理标记的准备工作,这正是我正在使用的功能。从这里开始的说明假定您已经安装了GDAL。
首先,您需要确保坐标确实嵌入在tif中。
gdalinfo your.tif
Run Code Online (Sandbox Code Playgroud)
通读该输出,如果未提及该输出使用的是哪个投影和坐标,则现在需要将该世界文件保存为tif。
根据源文件的大小,您可能需要在平铺之前合并它们。这将导致边缘稍微好一些,其中单个图块包含来自两个相邻地理位置的数据。如果20个Geotif组成一个完美的矩形并且适合最大tif尺寸,请使用以下方法:
gdalwarp -co COMPRESS=LZW originals/*.tif output.tif -srcnodata 0 -dstnodata 0 -multi
Run Code Online (Sandbox Code Playgroud)
最后的位将使任何未使用的像素透明,并在有多个像素的情况下使用多个处理器。如果以上命令抱怨透明度或Alpha通道,则需要使用以下命令将tif转换为rgba:
gdal_translate -co COMPRESS=LZW old.tif new.tif -expand rgba
Run Code Online (Sandbox Code Playgroud)
现在开始实际平铺:
gdal2tiles.py --zoom 6-16 your.tif outputfolder
Run Code Online (Sandbox Code Playgroud)
这将使your.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
Run Code Online (Sandbox Code Playgroud)
但是您还没有完成。就像我之前提到的,一些图块将覆盖包含两个tif数据的区域。如果您分别将它们平铺,则每个图块集将包含相同的图块,其中一半带有数据,一半透明。如果仅合并这些文件夹,则第一个tif的图块将覆盖第二个tif的图块,并且仍然是一半/一半。因此,您需要合并各个图块。幸运的是,我已经整理了一个Perl脚本来完成此操作。请不要以我的Perl能力来评判我。我从来没有读过它,我只是在附近找到一个脚本并将其黑客化。
#! /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");
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
将其另存为.pl文件,修改基本目录和传入目录,然后运行它以将所有图块从incomingDir复制到baseDir。我在这里使用了ImageMagick的“转换”功能,因此,如果您没有安装该库,则需要替换该行。我怀疑您可以在Apple的图像库中使用某些内容,但我将IM用于其他内容,因此我没有进一步研究。
合并所有磁贴集,您已经完成了自己打算要做的事情,但是我建议您再走一步。我猜GDAL产生的PNG具有平均大小。但是您将拥有成千上万的设备,而iPhone的磁盘空间有限。因此,请抓住pngnq并压缩所有PNG。我没有发现我的质量有任何损失,在您检查输出之前,不要扔掉您的原始照片。
pngnq -n 256 */*/*.png
Run Code Online (Sandbox Code Playgroud)
我一直在处理包含过多png的文件集,因此我不得不分解命令以单独进行每个缩放图层,制作简短的脚本以确保覆盖每个文件非常容易。现在,您将拥有每个png的副本,如下所示:original.png-> original-nq8.png。这是我编写的Shell脚本,以循环浏览它们并在原始文件上复制nq8版本
for OriginalFile
do
Location=`dirname "$OriginalFile"`
FileName="$OriginalFile"
newName=`echo $FileName | sed 's/-nq8//g'`
if [ $newName != "$FileName" ]
then
mv "$FileName" "$newName"
fi
done
Run Code Online (Sandbox Code Playgroud)
将其另存为.sh,然后从命令行运行它,如下所示:
./removeNq8.sh */*/*nq8.png
Run Code Online (Sandbox Code Playgroud)
再次,您可能必须将其分解为较大的缩放级别,因为您将要处理许多png。
通常我会把所有文件的大小减少30%以上吗?我可以将文件夹直接放入Apple的TileMap示例中,并且可以正常工作。请让我知道这可不可以帮你。我一直想写一个完整的教程,我想知道这是否足够清晰以及我错过的任何步骤。
PS:我假设您开始使用的地理标记周围没有地图项,如果可以,可以查看我的小文章中有关删除它们的内容:http : //craig.stanton.net.nz/2011/06/07 / merging-geotiffs /
| 归档时间: |
|
| 查看次数: |
2194 次 |
| 最近记录: |