gpt4 book ai didi

map - 如何为 map 叠加层准确制作 map

转载 作者:行者123 更新时间:2023-12-04 03:49:30 28 4
gpt4 key购买 nike

我有覆盖整个南非的图片。它们为Tiff格式,并已将坐标嵌入其中。我正在尝试拍摄这些图像(大约20张图像),并将它们用作我的iPhone应用程序中的地图叠加层。我的问题在于(准确地)将地图切成图块。

我打算使用MapTiler应用程序将这些大量图像切成小块,但它向我询问了几个细节。我必须选择:


系统的自定义定义(WKT,项目4,...)
WGS84-经纬度(大地)
通用横轴墨卡托-UTM(预计)
从EPSG / ESRI数据库中指定ID号
按名称搜索坐标系


我不知道每个人是/做什么。

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

我只是在所有默认设置下通过MapTiler运行了该地图,以查看它与普通Google Maps的地图之间的对齐情况并不理想。话虽如此,我相信我必须在例如在我通过MapTiler发送Google Earth进行裁剪和处理之前,请先对其进行处理。

我的问题:


MapTiler是否自动拾取.tfw? -因为它们可能具有正确的坐标。
如何轻松地(例如,通过在图像上然后在真实地图上的拾取点)重新对齐/放置这些图像?


希望有人对此有一些提示!

如有任何疑问,请发表评论/询问!

谢谢你的时间。

[编辑]

我用记事本打开了.tfw文件,这就是其中的全部内容:

      0.0004024840
-0.0000001596
-0.0000002286
-0.0003809100
17.0984027750
-32.6997115702

最佳答案

如果MapTiler没有执行您需要的操作,则应考虑使用GUI后面的实用程序。 GDAL(http://www.gdal.org/gdal_utilities.html)几乎可以完成为iOS做好地理标记的准备工作,这正是我正在使用的工具。从这里开始的说明假定您已经安装了GDAL。

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

gdalinfo your.tif


通读该输出,如果未提及该输出使用的是哪个投影和坐标,则现在需要将该世界文件保存为tif。

根据源文件的大小,您可能需要在平铺之前合并它们。这将导致边缘稍微好一些,其中单个图块包含来自两个相邻地理位置的数据。如果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


这将使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


但是您还没有完成。就像我之前提到的,一些图块将覆盖包含两个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");
}

}
}
}
}

}


将其另存为.pl文件,修改基本目录和传入目录,然后运行它以将所有tile从incomingDir复制到baseDir。我在这里使用了ImageMagick的“转换”功能,因此,如果您没有安装该库,则需要替换该行。我怀疑您可以在Apple的图像库中使用某些东西,但是我将IM用于其他内容,因此我没有进一步研究。

合并所有磁贴集,您已经完成了自己打算要做的事情,但是我建议您再走一步。我猜GDAL产生的PNG具有平均大小。但是您将拥有成千上万的设备,而iPhone的磁盘空间有限。因此,请抓住 pngnq并压缩所有PNG。我没有发现我的质量有任何损失,在您检查输出之前,我不会丢弃您的原始照片。

pngnq -n 256 */*/*.png


我一直在处理包含过多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


将其另存为.sh,然后从命令行运行它,如下所示:

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


再次,您可能必须将其分解为较大的缩放级别,因为您将要处理许多png。

通常我会把所有文件的大小减少30%以上吗?我可以将文件夹直接放入Apple的TileMap示例中,并且可以正常工作。请让我知道这可不可以帮你。我一直想写一个完整的教程,我想知道这是否足够清晰以及我错过的任何步骤。

附言我假设您开始使用的地理标记周围没有地图项,如果有,您可以查看我有关删除它们的小文章: http://craig.stanton.net.nz/2011/06/07/merging-geotiffs/

关于map - 如何为 map 叠加层准确制作 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6309670/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com