Створення файлів TFW та PRJ для папки файлів GeoTIFF? [зачинено]


16

У мене папка, яка містить велику кількість файлів у форматі GeoTIFF.

Мені потрібно генерувати як PRJ, так і TFW файли для кожного з цих зображень.

Чи є спосіб це зробити?


за допомогою якого програмного забезпечення? Що вам доступно?
jbchurchill

Відповіді:


16

Найкрутіший спосіб генерування TFW - це написання сценарію в Python або Java за допомогою GDAL, що було б декількома рядками коду.

Створення старих стилів (до ArcGis 9) .prj файлів не підтримується GDAL , лише читання (див. Тут ). Файли нового стилю (на основі WKT) підтримуються для створення, але не гарантується, що вони охоплюють усі випадки. Але в будь-якому випадку, у вищому випадку переміщення, я написав сценарій Python, який робить все, що вам потрібно. Немає перевірки помилок чи нічого, але це працює для каталогу тифів, які мені довелося передати, YMMV.

# Written by MerseyViking (mersey dot viking at gmail dot com), 2011.
# Released into the public domain - May 8, 2011
# I accept no responsibility for any errors or loss of data, revenue, or life this script may cause. Use at your own risk.

import osgeo.gdal as gdal
import osgeo.osr as osr
import os
import glob
import sys

def generate_tfw(path, gen_prj):
    for infile in glob.glob(os.path.join(path, '*.tif')):
        src = gdal.Open(infile)
        xform = src.GetGeoTransform()

        if gen_prj == 'prj':
            src_srs = osr.SpatialReference()
            src_srs.ImportFromWkt(src.GetProjection())
            src_srs.MorphToESRI()
            src_wkt = src_srs.ExportToWkt()

            prj = open(os.path.splitext(infile)[0] + '.prj', 'wt')
            prj.write(src_wkt)
            prj.close()

        src = None
        edit1=xform[0]+xform[1]/2
        edit2=xform[3]+xform[5]/2

        tfw = open(os.path.splitext(infile)[0] + '.tfw', 'wt')
        tfw.write("%0.8f\n" % xform[1])
        tfw.write("%0.8f\n" % xform[2])
        tfw.write("%0.8f\n" % xform[4])
        tfw.write("%0.8f\n" % xform[5])
        tfw.write("%0.8f\n" % edit1)
        tfw.write("%0.8f\n" % edit2)
        tfw.close()

if __name__ == '__main__':
    generate_tfw(sys.argv[1], sys.argv[2])

Викличте його з командного рядка так:

python gen_tfw.py <path_to_tiff_directory> [prj]

Другий параметр може бути prj для створення файлів prj у стилі WKT або будь-що інше, щоб просто генерувати .TFW.

Якщо ви не можете використовувати сценарії Python з будь-якої причини, ви можете використовувати:

gdal_translate -co "TFW=YES" in.tif out.tif

Але це також скопіює дані зображення, тому вам доведеться видалити оригінал. І звичайно, він не генерує .prj файли будь-якого смаку. Але якщо припустити, що всі ваші тиффи знаходяться в одній і тій же проекції, ви можете просто створити .prj файл і копіювати його для всіх вихідних зображень.


2
Зауважте, що generate_tfwвін не працює належним чином на обертових растрах, які, на щастя, є менш поширеними. Це можна виправити за допомогою множення матричного множення.
Майк Т

Ей, чоловіче, я намагаюся використовувати цей інструмент, але я не знаю, як це зробити, екcllty. Чи можете ви, будь ласка, дати більш детальне пояснення, як ним користуватися? Мені просто потрібно створити tfw для TIF, у папках і вкладених папках. Якщо він не може працювати на папках, це добре. Я можу запустити його кілька разів. Спасибі
Рафаель

У відкритому меню QGIS "Растр" виберіть "Перетворення", потім виберіть "Перекласти - перетворити формат". З'явиться вікно - у верхньому рядку виберіть геотиф і в розділі Додаткові параметри натисніть + знак, щоб додати команду. Під Іменем введіть слово tfw, під Значенням введіть так. Вкажіть вихідне місце призначення, ім'я файлу та вуаля ... ваш файл геотифу перетворюється на звичайну частину tiff та tfw. Тепер ви можете редагувати тиф у редакторі зображень, який ви обрали, і
розміщувати його

19

Listgeo утиліта , яка поставляється з libgeotiff хороша утиліта командного рядка , яка може витягти файл TWF з GeoTIFF файлів.

Наприклад, у мене є каталог GeoTIFF, і у мене встановлено libgeotiff як частина OSGeo4w. Ви можете запустити оболонку OSGeo4w і зробити це:

$ listgeo -tfw BN24_GeoTif_1-01.tif
World file written to 'BN24_GeoTif_1-01.tfw'.

Було б добре, якби ця сама утиліта також могла витягти файл PRJ.


"Було б добре, якби ця сама утиліта також могла витягти файл PRJ." -> Але це не так.
astrojuanlu

0

Насправді - якщо ви знаєте проекцію файлів, тоді ви можете переглянути вміст файлу prj на http://spatialreference.org, а потім скористатися скриптом оболонки, щоб скопіювати шаблон у кожен .prj-файл для кожного зображення.

Геореференціювання їх потрібно проводити на основі кожного зображення, оскільки файл .tfw буде різним для кожного зображення (якщо вони не мають одного місця). http://warper.geothings.net/ може бути шлях, якщо у вас немає доступу до настільних ГІС для цього.


2
За винятком того, що файли GeoTIFF часто мають в метадані вбудований як проекційний, так і світовий файл .. тому вся ця інформація відома.
Майк Т

1
у такому випадку навіщо ви виписуєте це як окремі файли?
Ян Тертон

1
Імовірно, що Джо використовує програмне забезпечення не розуміє GeoTIFF з вбудованими метаданими.
MerseyViking

так, потрібні були вилучені метадані того самого випуску, щоб бути .tfw, щоб веб-додаток gis "знав" місця кожної плитки - використовуйте власний скрипт для вилучення його (excel - макрос на той час.)
Mapperz

0

Використовуючи Geotools на Java, ви можете використовувати цей код:

// read geotiff file (using org.geotools.gce.geotiff.GeoTiffReader)
GeoTiffReader reader = new GeoTiffReader(geotiff);
// get transformation
AffineTransform transformation = reader.getMetadata().getModelTransformation();
// create org.geotools.data.WorldFileWriter (world file is created automatically!)
WorldFileWriter worldFileWriter = new WorldFileWriter(myWorldFile, transformation);

Якщо ви хочете отримати проекцію, ви можете використовувати цей код:

// get the projection string from CRS
CoordinateReferenceSystem crs = reader.getCoordinateReferenceSystem();
String projectionString = crs.toWKT();

Просто запишіть вміст у projectionStringваш проекційний файл.


0

Якщо ви хочете додатково редагувати тиф у додатку для ретушування фотографій та зберігати його геолокацію, експорт растрового шару із створенням tfw та ввімкненим зображенням - це найпростіший спосіб, IMO. Для дещо інших варіантів є спосіб через меню Raster / Conversion / Translate.

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.