Yanıtlar:
TFW'ler oluşturmanın en şık yolu, bir avuç kod satırı olan GDAL kullanarak Python veya Java'ya bir komut dosyası yazmaktır.
Eski tarz oluşturulması (ArcGIS 9 pre) .prj dosyaları desteklenmez GDAL (bkz yalnızca okuma, burada ). Yeni stil (WKT tabanlı) dosyalar oluşturma için desteklenir, ancak tüm vakaları kapsadıkları garanti edilmez. Ama her iki durumda da, yerinden edilme aktivitesinin en yüksek durumunda, ihtiyacınız olanı yapan bir Python betiği yazdım. Herhangi bir hata denetimi veya başka bir şey yok, ama elimde olan tiffs dizini için çalışıyor, 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])
Komut satırından şöyle çağırın:
python gen_tfw.py <path_to_tiff_directory> [prj]
İkinci parametre WKT tarzı prj dosyaları oluşturmak için prj veya sadece .TFW'ler oluşturmak için başka bir şey olabilir.
Herhangi bir nedenle Python komut dosyalarını kullanamıyorsanız, aşağıdakileri kullanabilirsiniz:
gdal_translate -co "TFW=YES" in.tif out.tif
Ancak bu görüntü verilerini de kopyalar, böylece orijinali silmeniz gerekir. Ve elbette, her iki lezzetten de .prj dosyaları oluşturmaz. Ancak tüm tiff'lerinizin aynı projeksiyonda olduğunu varsayarsak, sadece bir .prj dosyası oluşturabilir ve tüm kaynak görüntüler için çoğaltabilirsiniz.
generate_tfw
Neyse ki daha az yaygın olan döndürülmüş rasterlerde düzgün çalışmadığını unutmayın . Bu, biraz matris çarpımı ile düzeltilebilir.
Listgeo libgeotiff ile geliyor yarar GeoTIFF dosyalarından TWF dosyasını çıkarabilir güzel komut satırı aracıdır.
Örneğin, bir GeoTIFF dizin var ve OSGeo4w bir parçası olarak libgeotiff yüklü var. OSGeo4w kabuğunu çalıştırabilir ve bunu yapabilirsiniz:
$ listgeo -tfw BN24_GeoTif_1-01.tif
World file written to 'BN24_GeoTif_1-01.tfw'.
Aynı yardımcı program PRJ dosyasını da ayıklayabilirse iyi olur.
Gerçekten değil - dosyaların projeksiyonunu biliyorsanız, http://spatialreference.org adresindeki prj dosyasının içeriğini arayabilir ve ardından her görüntü için her bir .prj dosyasına bir şablon kopyalamak için bir kabuk komut dosyası kullanabilirsiniz.
.Tfw dosyası her bir görüntü için farklı olacağından (hepsi aynı yerde olmadıkça), her bir görüntü için farklı referanslarla bunların coğrafi referanslarının yapılması gerekir. Bunu yapmak için bir masaüstü CBS'sine erişiminiz yoksa http://warper.geothings.net/ gitmek için bir yol olabilir.
Java'da Geotools'u kullanarak şu kodu kullanabilirsiniz:
// 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);
Yansıtmayı almak istiyorsanız bu kodu kullanabilirsiniz:
// get the projection string from CRS
CoordinateReferenceSystem crs = reader.getCoordinateReferenceSystem();
String projectionString = crs.toWKT();
Sadece içeriğini projectionString
projeksiyon dosyanıza yazın.
Fotoğraf rötuş uygulamasında tiff'i daha fazla düzenleme yapmak ve coğrafi konumunu korumak istiyorsanız, raster katmanını tfw oluşturma ve Dışa aktarma resmi etkinleştirilmiş olarak dışa aktarma, IMO'nun en kolay yoludur. Biraz farklı seçenekler için Raster / Dönüştürme / Çevirme menüsünün bir yolu vardır.