जवाबों:
TFWs जेनरेट करने का सबसे पतला तरीका है, GDAL का उपयोग करके पायथन या जावा में एक स्क्रिप्ट लिखना, जो कोड की एक मुट्ठी भर लाइनें होगी।
पुरानी शैली का निर्माण (प्री आर्किस 9) .prj फाइलें GDAL समर्थित नहीं हैं , केवल पढ़ने ( यहाँ देखें )। नई शैली (डब्ल्यूकेटी पर आधारित) फाइलें निर्माण के लिए समर्थित हैं, लेकिन यह गारंटी नहीं है कि वे सभी मामलों को कवर करते हैं। लेकिन किसी भी तरह से, विस्थापन गतिविधि के एक सर्वोच्च मामले में, मैंने एक पायथन स्क्रिप्ट लिखी है जो आपको आवश्यकता होती है। कोई त्रुटि जाँच या कुछ भी नहीं है, लेकिन यह मेरे, 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]
दूसरे पैरामीटर को WKT- शैली prj फ़ाइलों को उत्पन्न करने के लिए prj किया जा सकता है, या केवल उत्पन्न करने के लिए कुछ और ।TFWs।
यदि आप किसी भी कारण से पाइथन स्क्रिप्ट का उपयोग नहीं कर सकते हैं, तो आप इसका उपयोग कर सकते हैं:
gdal_translate -co "TFW=YES" in.tif out.tif
लेकिन यह इमेज डेटा को भी कॉपी करेगा, जिससे आपको ओरिजिनल डिलीट करना पड़ेगा। और हां, यह या तो स्वाद की .prj फाइलें उत्पन्न नहीं करेगा। लेकिन मान लें कि आपके सभी झगड़े एक ही प्रक्षेपण में हैं, तो आप सिर्फ .prj फ़ाइल को हस्त-शिल्प कर सकते हैं और इसे सभी स्रोत चित्रों के लिए डुप्लिकेट कर सकते हैं।
generate_tfw
घुमाए गए चूहों पर ठीक से काम नहीं करता है, जो सौभाग्य से कम आम हैं। यह थोड़ा मैट्रिक्स गुणा के साथ तय किया जा सकता है।
लिबजोटिफ के साथ आने वाली लिस्टेजो यूटिलिटी एक अच्छी कमांड-लाइन यूटिलिटी है जो जियोफ्ट फाइल से TWF फाइल को निकाल सकती है।
उदाहरण के लिए, मेरे पास GeoTIFF की एक निर्देशिका है, और मेरे पास OSGeo4w के हिस्से के रूप में लिबजोटिफ स्थापित है। आप OSGeo4w शेल चला सकते हैं, और यह कर सकते हैं:
$ listgeo -tfw BN24_GeoTif_1-01.tif
World file written to 'BN24_GeoTif_1-01.tfw'.
यह अच्छा होगा यदि एक ही उपयोगिता पीआरजे फ़ाइल को भी निकाल सकती है।
वास्तव में नहीं - यदि आप फ़ाइलों के प्रक्षेपण को जानते हैं तो आप http://spatialreference.org पर prj फ़ाइल की सामग्री को देख सकते हैं और फिर प्रत्येक छवि के लिए .prj फ़ाइल में टेम्पलेट की प्रतिलिपि बनाने के लिए एक शेल स्क्रिप्ट का उपयोग कर सकते हैं।
उन्हें प्रति छवि के आधार पर जियोफेरेंसिंग करने की आवश्यकता होगी क्योंकि .tfw फ़ाइल प्रत्येक छवि के लिए अलग होगी (जब तक कि वे सभी एक ही स्थान पर न हों)। http://warper.geothings.net/ यदि आप ऐसा करने के लिए किसी डेस्कटॉप GIS तक पहुँच नहीं है, तो जाने के लिए रास्ता हो सकता है।
जावा में जियोटॉल्स का उपयोग करके आप इस कोड का उपयोग कर सकते हैं:
// 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
अपनी प्रक्षेपण फ़ाइल की सामग्री लिखें ।