2011-06-10 375 views
2

我有覆蓋整個南非的圖像。這些都是TIFF格式,並且嵌入了它們的座標。我正嘗試拍攝這些圖像(約20張圖像),並將它們用作我的iPhone應用程序中的地圖疊加層。我的問題在於將地圖切割成瓷磚(準確地)。如何準確製作地圖覆蓋圖

MapTiler是我計劃用來將這些大量圖像剪切成瓷磚的應用程序,但它讓我想起了幾個細節。我必須選擇:(WKT,PROJ 4,...)系統的

  • 自定義
  • WGS84 - 經度和緯度(大地)
  • 通用橫軸墨卡託 - UTM(預計)
  • 從EPSG/ESRI數據庫指定的ID號
  • 按名稱搜索座標系

我沒有任何線索,Wh是在每一個是/是。

我的tiff文件也有一個.tfw文件與他們(相同的名稱,不同的擴展名) - 我不知道這是什麼。 (我沒有製作圖片,但是相信它們可能是來自政府地理部門的準確信息)

我只是通過MapTiler在所有默認設置中運行該地圖,以確定它不是完全對齊在正常的Google地圖'地圖。據說,我相信我必須手動重新排列這些圖像。在Google地球發佈之前通過MapTiler進行剪切和處理。

我的問題

  • 不MapTiler自動拿起.tfw? - 因爲這些可能會持有正確的協調。
  • 我該如何輕鬆(例如,通過在圖像上然後在真實地圖上選取點)重新對齊/放置這些圖像?

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

任何unclarity,請評論/問!

謝謝你的時間。

[編輯]

我打開.tfw文件,用記事本,這是所有這些都是在那裏:

 0.0004024840 
    -0.0000001596 
    -0.0000002286 
    -0.0003809100 
    17.0984027750 
    -32.6997115702 
+0

我相信谷歌地圖使用墨卡託。有不同類型的預測 - 請看這裏:http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html不知道你需要什麼estest,我會假設墨卡託。 – 2011-06-10 17:07:44

回答

4

如果MapTiler沒有做你需要的,你應該考慮使用GUI背後的實用工具。 GDAL(http://www.gdal.org/gdal_utilities.html)將完成您準備iOS版geotif所需的幾乎所有內容,這正是我用來做到這一點。從這裏開始的說明假設你已經安裝了GDAL。

首先,您需要確保座標確實嵌入在tif中。

gdalinfo your.tif 

讀通過輸出,如果它沒有提到它的投影,而被使用,那麼你需要保持與TIF那個世界的文件現在座標。

根據您的源文件的大小,您可能希望在拼貼之前合併它們。這將導致稍微更好的邊緣,其中一個瓦片包含來自兩個相鄰地理圖的數據。如果20個geotifs一個完美的矩形,它適合內的最大尺寸TIF使用以下方法:

gdalwarp -co COMPRESS=LZW originals/*.tif output.tif -srcnodata 0 -dstnodata 0 -multi 

在年底位作任何未使用的像素透明,並能夠使用多個處理器,如果你有他們。如果上面的命令抱怨透明度或alpha通道,您需要將您的TIFS轉換到使用此RGBA:

gdal_translate -co COMPRESS=LZW old.tif new.tif -expand rgba 

我們實際上平鋪:

gdal2tiles.py --zoom 6-16 your.tif outputfolder 

這會讓你的瓷磚。tif在指定的縮放級別並將它們保存在輸出文件夾中。它還會創建.kml文件以及tif旋轉的邊緣周圍的透明瓦片,以查找瓦片集的投影。這三條線將整理出來。 334c是我的驅動器上透明256x256 .png的大小,以字節爲單位。它會在你的不同,所以找到一個這樣的文件,並調整價值。另外要小心這裏的路徑,自動刪除可能會出錯,所以仔細檢查一切。首先,你刪除的文件.KML,然後取出所有被100%透明.pngs,然後刪除了現在空的任何目錄:

rm -r */*/*.kml 
find ./ -type f -size 334c -exec rm -f {} \; 
find ./ -depth -empty -type d -exec 

但你沒有完成。就像我之前提到的,一些圖塊將覆蓋包含來自兩個tif數據的區域。如果你已經將它們分開拼裝起來,每個tileset將包含相同的tile,其中一半包含數據,一半則透明。如果你只是合併這些文件夾,第一個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文件,修改基本目錄和傳入目錄,並運行它以將所有來自incomingDir的切片複製到baseDir中。 我在ImageMagick中使用了'convert',所以如果你沒有安裝這個庫,你需要替換那一行。我懷疑蘋果的圖像庫中有某些東西可以使用,但是我使用IM作爲其他東西,所以我沒有再看。

合併所有tilesets和你做了你設置什麼做出來的,但有一個步驟我建議。 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%,減少的總文件大小,我可以在文件夾拖放直入tilemap的例子蘋果和它的作品。請讓我知道這可不可以幫你。我一直有意寫一篇完整的教程,我想知道這是否足夠清楚,以及我錯過了什麼步驟。

P.S.我假設你開始與geotifs在其周圍無圖領,如果他們這樣做,你可以檢查出我的小文章刪除它們:http://craig.stanton.net.nz/2011/06/07/merging-geotiffs/

+0

@Craig:You.are.my.hero!哈哈,真的,這真是太好了!無論如何:我的geotifs有一些地理數據 - 當我使用MapTiler,它們有點偏離它,就好像它完全對齊在右邊,但在左邊它被「壓扁」,所以基本上越是左邊,越是「不同步」 - 這意味着它們是錯誤的地理位置「 (如果我可以這樣稱呼它)所以我將不得不從頭開始重新調整/確定它們的大小。我的地圖確實有圓領,我會按照你的文章。(謝謝)2 Q's:我假設所有的命令行命令都是爲了Mac?(我都有),我必須安裝任何東西來運行perl腳本嗎?謝謝 – LouwHopley 2011-06-11 20:53:14

+0

我只是很高興有人最終問完*我知道什麼。是的,所有這些都是基於OS X的,我認爲你有一個你正在爲iOS開發,我認爲你需要的只有GDAL和ImageMagick(我已經很難安裝正確的),除非你能夠通過命令行找到另一種合併到兩個PNG的方式。如果geotifs是公有領域,你可以發佈一個鏈接給他們,我可以快速瀏覽一下,並試着弄清爲什麼他們的對齊關閉。 – Craig 2011-06-12 07:31:20

+0

@克雷格,感謝所有的麻煩!我在我的MacBook上編寫iOS代碼,並在PC上編寫其他代碼。如果你看看這些Tif,我會非常感激。他們不是面向公衆的,所以請在下面評論的電子郵件中發電子郵件給我(所以我可以在之後將其刪除),然後我會通過電子郵件將鏈接發送給您的其中一個文件。 – LouwHopley 2011-06-12 07:46:43

1

我不熟悉聯隊的文件,我也不是熟悉的MapTiler,但我可以採取一些猜測,併爲座標系添加一些背景,因爲我曾在洛克希德馬丁作爲火箭科學家(真的)在前一生中工作過......

首先,TL; DR,I走吧猜測UTM是你選擇的系統。

自定義定義可能會要求您編寫一些壞習慣以使系統理解您的自定義格式。通過名稱的id號和座標號規範可能爲更多的互操作性。我知道的系統是:

  • WGS84是地球作爲於1984年標準化的扁圓(壓扁)sphereoid的模型;它允許人們指定一個位置lat,lon,alt與地球的理想化模型。換句話說,如果一切順利並且處於「海平面」,那麼這是一個地球等值線的等式。

  • UTM是地球變平的模型,就像人們在地圖上看到的一樣。它允許從赤道和主子午線指定一個位置爲northing,easting。這些值是米,在你.TFW文件

有關什麼是在.TFW文件的詳細信息的最後兩個數字,我發現this link。如果我正確讀取它,它似乎只是一個帶有一些元數據的文本文件 - 而.tfw文件的最後兩個數字應指示圖像的左上角像素應該放在哪裏。

this description in Wikipedia是如何在墨卡託投影地圖上找到位置的很好的描述。

最後,有一點谷歌地圖似乎表明谷歌地圖使用WGS84作爲其座標系。您可以嘗試使用在線工具such as this one將您的位置從.tfw文件轉換爲lat,lon,alt,然後查看是否能夠將圖像正確放置在Google地圖上。如果是這樣,你已經破解了你的定位問題:你可以找到更多的自動化解決方案來重新定位你的所有數據。

+0

瘋狂的東西!(我仍然是一名學生 - 我的夢想是在洛克希德工作!)我現在正在嘗試這些東西,比如UTM等,會告訴你結果,謝謝! – LouwHopley 2011-06-10 18:08:13

+0

我現在被困在輸入UTM數據到MapTiler :( – LouwHopley 2011-06-10 19:24:37