GeoTIFF dosyaları klasörü için TFW ve PRJ dosyaları oluşturuluyor mu? [kapalı]


16

GeoTIFF biçiminde çok sayıda dosya içeren bir klasör var.

Bu görüntülerin her biri için hem PRJ hem de TFW dosyaları oluşturmak gerekir.

Bunu yapmanın bir yolu var mı?


hangi yazılımı kullanarak? Sizin için neler mevcut?
jbchurchill

Yanıtlar:


16

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.


2
generate_tfwNeyse 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.
Mike T

Hey adamım, aracı kullanmaya çalışıyorum ama nasıl yapacağımı bilmiyorum, tam olarak. Nasıl kullanılacağını daha ayrıntılı bir şekilde açıklayabilir misiniz? Sadece klasörlerde ve alt klasörlerde TIF'ler için tfw oluşturmak gerekiyor. Alt klasörlerde çalışamazsa, bu iyi. Birkaç kez çalıştırabilirim. Teşekkürler
raphael

QGIS "Raster" menüsünde "Dönüştürme" yi ve ardından "Çevir - Formatı dönüştür" ü seçin. Pencere görünür - üst satırda geotiff'nizi seçin ve Gelişmiş parametreler altında komut eklemek için + işaretine basın. Ad'ın altına tfw kelimesini, Değer'in altına evet girin. Çıktı hedefini, dosyanın adını ve voila ... belirtin geotiff dosyanız düz tiff ve tfw parçasına dönüştürülür. Artık tiff'i istediğiniz görüntü düzenleyicide düzenleyebilir ve x veya y eksenindeki piksel sayısını değiştirmediğiniz sürece coğrafi konumlandırmasını
sağlayabilirsiniz

19

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.


"Aynı yardımcı program PRJ dosyasını da ayıklayabilirse iyi olur." -> Ama değil.
astrojuanlu

0

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.


2
GeoTIFF dosyalarının meta verilere gömülü bir projeksiyon ve dünya dosyası olması dışında tüm bu bilgiler bilinir.
Mike T

1
bu durumda neden ayrı dosyalar olarak yazasınız?
Ian Turton

1
Muhtemelen Joe'nun kullandığı yazılım, gömülü meta verilere sahip GeoTIFF'leri anlamıyor.
MerseyViking

evet aynı sorunu meta veri her gis web uygulaması 'bilmek' gis web uygulaması için .tfw olması için ayıklamak vardı - ayıklamak için kendi komut dosyası kullanın (excel - makro zaman.)
Mapperz

0

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 projectionStringprojeksiyon dosyanıza yazın.


0

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.

resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.