Відповіді:
Найкрутіший спосіб генерування 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 файл і копіювати його для всіх вихідних зображень.
generate_tfw
він не працює належним чином на обертових растрах, які, на щастя, є менш поширеними. Це можна виправити за допомогою множення матричного множення.
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 на http://spatialreference.org, а потім скористатися скриптом оболонки, щоб скопіювати шаблон у кожен .prj-файл для кожного зображення.
Геореференціювання їх потрібно проводити на основі кожного зображення, оскільки файл .tfw буде різним для кожного зображення (якщо вони не мають одного місця). http://warper.geothings.net/ може бути шлях, якщо у вас немає доступу до настільних ГІС для цього.
Використовуючи 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
ваш проекційний файл.
Якщо ви хочете додатково редагувати тиф у додатку для ретушування фотографій та зберігати його геолокацію, експорт растрового шару із створенням tfw та ввімкненим зображенням - це найпростіший спосіб, IMO. Для дещо інших варіантів є спосіб через меню Raster / Conversion / Translate.