2011-06-10 3 views
2

У меня есть изображения, охватывающие всю Южную Африку. Они находятся в формате Tiff и имеют встроенные в них координаты. Я пытаюсь взять эти изображения (около 20 изображений) и использовать их в качестве наложения карты в своем приложении для iPhone. Моя проблема заключается в разрезании карт на плитки (точно).Как точно составить карту для наложения карт

MapTiler - это приложение, которое я планирую использовать для резки этих массивных изображений в плитки, но он спрашивает меня о нескольких деталях. Я должен выбрать: (. WKT, Рго 4, ...)

  • Пользовательские определения системы
  • WGS84 - широта и долгота (геодезическая)
  • Универсальная Поперечная Меркатора - UTM (проектируется)
  • Укажите идентификационный номер из базы данных EPSG/ESRI
  • Поиск системы координат по имени

Я понятия не имею, как к Wh на каждом из них есть /.

У моих файлов tiff также есть файл .tfw с ними (одно имя, другое расширение), о котором я понятия не имею, что это такое. (Я не создавал изображения, но считаю, что они могут быть точными с момента его создания из правительственного геодепартамента)

Я просто запустил эту карту через MapTiler по всем настройкам по умолчанию, чтобы убедиться, что она не была почти полностью выровнена по обычная карта Google Maps. С учетом сказанного, я считаю, что мне приходится вручную перестраивать эти изображения, например. Google Earth, прежде чем отправлять его через MapTiler для обработки и обработки.

Мои вопросы:

  • ли MapTiler подобрать .tfw автоматически? - поскольку они могут содержать правильные координаты.
  • Как я могу легко (например, через точки выбора на изображении, а затем на реальной карте) перестроить/разместить эти изображения?

Надеюсь, у кого-то есть несколько советов по этому вопросу!

Любая неискренность, пожалуйста, прокомментируйте/спросите!

Спасибо за ваше время.

[EDIT]

Я открыл файл .tfw с помощью блокнота, и это было все, что там:

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

Я считаю, что Карты Google используют Меркатор. Существуют различные типы прогнозов - посмотрите здесь: http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html Не уверен, что вам нужно, я бы предпочел Меркатор. –

ответ

4

Если MapTiler не делает то, что вам нужно, вам следует рассмотреть возможность использования утилиты за графическим интерфейсом. GDAL (http://www.gdal.org/gdal_utilities.html) будет делать почти все, что вам нужно, чтобы подготовить ваши геотипы для iOS, это то, что я использую для этого. Инструкции отсюда предполагают, что у вас установлен GDAL.

Прежде всего, вы должны быть уверены, что координаты действительно встроены в tif.

gdalinfo your.tif 

Читать через этот выход, и если он не упоминает, какой проекции и координаты его использования, то вам необходимо сохранить этот мировой файл с TIF на данный момент.

В зависимости от размера исходных файлов вы можете объединить их перед черепицей. Это приведет к получению более качественных ребер, где одна плитка содержит данные из двух соседних геотипов. Если 20 geotifs сделать идеальный прямоугольник и он вписывается в максимальных размерах TIF использовать следующие:

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

Бит на конце должны сделать все неиспользуемые пикселы прозрачными и использовать несколько процессоры, если у вас есть. Если команда выше жалуется прозрачность или альфа-каналы вам необходимо конвертировать 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 файлов, а затем удалить все прозрачные .pngs 100%, то вы удалите все каталоги, которые теперь пусты:

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, изменять базу и входящие каталоги и запустить его, чтобы скопировать все плитки из incomingDir в BASEDIR. Я использовал «конвертировать» здесь из ImageMagick, поэтому, если у вас нет установленной библиотеки, вам нужно будет заменить эту строку. Я подозреваю, что в библиотеке изображений Apple есть что-то, что можно использовать, но я использую IM для других вещей, поэтому я не смотрел дальше.

Объедините все свои плитки, и вы сделали то, что вы намеревались сделать, но есть еще один шаг, который я бы рекомендовал. PNG, которые производит GDAL, имеют средний размер, я бы предположил. Но у вас будет много тысяч, а iPhone - ограниченное дисковое пространство. Поэтому возьмите pngnq и сжимайте все PNG. Я не заметил никакой потери качества на моем, я не выбрасываю оригинал, пока вы не проверите выход.

pngnq -n 256 */*/*.png 

Я имел дело с наборами файлов, которые содержат слишком много PNGs поэтому мне пришлось разбить команду, чтобы сделать каждый трансфокатор слоя отдельно, это было бы довольно легко сделать короткий скрипт, чтобы гарантировать, что каждый файл был покрыт. Теперь у вас будет дубликат каждого png: original.png ->original-nq8.png. Вот сценарий оболочки Я написал цикл через них и скопировать версию 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 

Опять вы» вероятно, придется разбить его на более крупные уровни масштабирования, потому что у вас будет так много pngs, с которыми нужно иметь дело.

Будет ли все сделано, я обычно уменьшаю общий размер файла на более чем 30%, и я могу отбросить папку прямо в примере TileMap от Apple, и это работает. Пожалуйста, дайте мне знать, если это поможет. Я хотел написать полный учебник, и я хотел бы знать, насколько это достаточно ясно и какие шаги я пропустил.

P.S. Я предположил, что у вас есть геотипы, у которых нет карточного ошейника, если они это сделают, вы можете проверить мою маленькую статью об их удалении: http://craig.stanton.net.nz/2011/06/07/merging-geotiffs/

+0

@Craig: You.are.my.hero! Ха-ха, на самом деле. Это очень подробно! Во всяком случае: у моих геотипов есть некоторые геоданные в них - когда я используйте MapTiler, они немного выключены. Это похоже на то, что он идеально выровнен справа, а слева его «раздавлен», так что в основном более левый, тем более «не синхронизированный» - это означает, что они ошибочно гео », tagged "(Если я могу это назвать), то мне придется начать с переустановки/определения размеров. Мои карты имеют ошейники, и я буду следовать вашей статье. (Спасибо) 2 Q: Я предполагаю, что все команды командной строки для Mac? (У меня есть оба), я должен установить что-нибудь для запуска скрипта perl? THANKS – LouwHopley

+0

Я просто рад, что кто-то наконец спросил * точно, что я знаю. Да, все это OS X на основе, я предположил, что у вас есть один с вы разрабатываете для iOS. Я думаю, вам нужно всего лишь GDAL и ImageMagick (которые у меня были серьезные проблемы с установкой правильно), если вы не используете способный найти другой способ слияния с двумя PNG через командную строку. Если геотипы являются общедоступными, и вы можете опубликовать ссылку на них, я могу быстро взглянуть на них и попытаться понять, почему их выравнивание отключено. – Craig

+0

@Craig, спасибо за все проблемы! Я кодирую IOS на своем MacBook и все остальное на ПК. Я был бы очень признателен, если бы вы взглянули на эти Тифы. Они не предназначены для публики, поэтому напишите мне по электронной почте, прокомментированной ниже (поэтому я могу удалить ее после этого), а затем отправлю ссылку на один из файлов для вас. – LouwHopley

1

Я не знаком с TFW файлов, и я не знаком с MapTiler, но я могу взять некоторые догадки и добавить некоторый фон для систем координат, поскольку я работал на Lockheed Martin в качестве ракетолога (действительно) в предыдущей жизни ...

Прежде всего, TL; DR, I идти догадаться, что UTM - ваша система выбора.

Возможно, для пользовательского определения вам потребуется написать некоторую гадость, чтобы система поняла ваш пользовательский формат. Идентификатор номера и номер координаты по имени, вероятно, для большей функциональной совместимости. Системы я в курсе являются:

  • WGS84 модель Земли как сплюснутый (раздавленный) sphereoid, который был стандартизирован в 1984 году; он позволяет указать местоположение в lat,lon,alt против этой идеализированной модели Земли. Другими словами, это уравнение того, как будет выглядеть глобус, если все будет гладко и «на уровне моря».

  • UTM - это модель земли, сплющенная, как на карте. Он позволяет указать местоположение как northing,easting от экватора и первичного меридиана. Эти значения в метрах и являются последние две цифры в вашем файле .tfw

Для получения дополнительной информации о том, что находится в файле .tfw, я нашел this link. Если я прочитал его правильно, кажется, что это всего лишь текстовый файл с некоторыми метаданными - и последние два номера вашего файла .tfw должны указывать, где должен лежать верхний левый пиксель вашего изображения.

И this description in Wikipedia - отличное описание того, как найти местоположение на проецируемой карте Меркатора.

И, наконец, немного похожего на Google Google, что Google Maps использует WGS84 в качестве рамки координат. Вы можете попытаться преобразовать свое местоположение из вашего .tfw-файла в lat,lon,alt с помощью онлайн-инструмента such as this one и посмотреть, правильно ли оно позиционирует ваши изображения на Картах Google. Если это так, вы нарушили свою проблему с позиционированием: вы можете найти еще несколько автоматических решений для изменения всех ваших данных.

+0

Сумасшедший!(Я все еще студент - моя мечта работать в Lockheed!) Я сейчас пробую эти вещи, такие как UTM и т. Д., Сообщит вам о результатах, спасибо! – LouwHopley

+0

Я теперь застреваю при вводе данных UTM в MapTiler :( – LouwHopley

Смежные вопросы