GeoTIFF फ़ाइलों के फ़ोल्डर के लिए TFW और PRJ फाइलें बनाना? [बन्द है]


16

मेरे पास एक फ़ोल्डर है जिसमें बड़ी संख्या में जियोटीफ़ प्रारूप में फाइलें हैं।

मुझे इन छवियों में से प्रत्येक के लिए PRJ और TFW दोनों फाइलें उत्पन्न करने की आवश्यकता है।

क्या ऐसा करने का कोई तरीका है?


क्या सॉफ्टवेयर का उपयोग कर? आपके लिए क्या उपलब्ध है?
jbchurchill

जवाबों:


16

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 फ़ाइल को हस्त-शिल्प कर सकते हैं और इसे सभी स्रोत चित्रों के लिए डुप्लिकेट कर सकते हैं।


2
ध्यान दें कि generate_tfwघुमाए गए चूहों पर ठीक से काम नहीं करता है, जो सौभाग्य से कम आम हैं। यह थोड़ा मैट्रिक्स गुणा के साथ तय किया जा सकता है।
माइक टी।

अरे यार, मैं उपकरण का उपयोग करने की कोशिश कर रहा हूं, लेकिन मुझे नहीं पता कि कैसे करना है, अतिशयोक्ति। क्या आप कृपया इसका अधिक विस्तृत विवरण बना सकते हैं कि इसका उपयोग कैसे किया जाए? मुझे बस TIFs के लिए tfw उत्पन्न करने की आवश्यकता है, फ़ोल्डर्स और सबफ़ोल्डर में। यदि यह सबफ़ोल्डर्स पर नहीं चल सकता है, तो ठीक है। मैं इसे कई बार चला सकता हूं। धन्यवाद
राफेल

QGIS खुले मेनू "रेखापुंज" में, "रूपांतरण" चुनें, फिर "अनुवाद - रूपांतरण प्रारूप" चुनें। विंडो दिखाई - ऊपरी पंक्ति में अपना जियोटीफ़ चुनें और उन्नत मापदंडों के तहत कमांड जोड़ने के लिए हिट + साइन करें। नाम के तहत शब्द tfw दर्ज करें, मूल्य के तहत हाँ दर्ज करें। आउटपुट गंतव्य, फ़ाइल और वॉयला का नाम निर्दिष्ट करें ... आपकी जियोटीफ़ फ़ाइल को सादे टिफ और tfw भाग में बदल दिया जाता है। अब आप अपनी पसंद के छवि संपादक में टिफ़ को संपादित कर सकते हैं और जब तक आप x या y अक्ष में पिक्सेल की संख्या नहीं बदलते हैं, तब तक इसे अलग कर दिया है
user29347

19

लिबजोटिफ के साथ आने वाली लिस्टेजो यूटिलिटी एक अच्छी कमांड-लाइन यूटिलिटी है जो जियोफ्ट फाइल से TWF फाइल को निकाल सकती है।

उदाहरण के लिए, मेरे पास GeoTIFF की एक निर्देशिका है, और मेरे पास OSGeo4w के हिस्से के रूप में लिबजोटिफ स्थापित है। आप OSGeo4w शेल चला सकते हैं, और यह कर सकते हैं:

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

यह अच्छा होगा यदि एक ही उपयोगिता पीआरजे फ़ाइल को भी निकाल सकती है।


"यह अच्छा होगा यदि एक ही उपयोगिता पीआरजे फ़ाइल को भी निकाल सकती है।" -> लेकिन यह नहीं है।
एस्ट्रोजुनलू

0

वास्तव में नहीं - यदि आप फ़ाइलों के प्रक्षेपण को जानते हैं तो आप http://spatialreference.org पर prj फ़ाइल की सामग्री को देख सकते हैं और फिर प्रत्येक छवि के लिए .prj फ़ाइल में टेम्पलेट की प्रतिलिपि बनाने के लिए एक शेल स्क्रिप्ट का उपयोग कर सकते हैं।

उन्हें प्रति छवि के आधार पर जियोफेरेंसिंग करने की आवश्यकता होगी क्योंकि .tfw फ़ाइल प्रत्येक छवि के लिए अलग होगी (जब तक कि वे सभी एक ही स्थान पर न हों)। http://warper.geothings.net/ यदि आप ऐसा करने के लिए किसी डेस्कटॉप GIS तक पहुँच नहीं है, तो जाने के लिए रास्ता हो सकता है।


2
सिवाय इसके कि जियो टीआईएफएफ फाइलों में अक्सर मेटाडेटा में एक प्रोजेक्शन और दुनिया की दोनों फाइलें निहित होती हैं .. इसलिए यह सारी जानकारी ज्ञात है।
माइक टी

1
किस मामले में आप इसे अलग फाइल के रूप में क्यों लिखेंगे?
इयान Turton

1
संभवत: सॉफ्टवेयर जो प्रयोग कर रहा है वह जियोफाई को एम्बेडेड मेटाडेटा के साथ नहीं समझता है।
MerseyViking

करने के लिए इसे निकाले खुद स्क्रिप्ट उपयोग - हाँ एक ही मुद्दा मेटाडाटा प्रत्येक टाइल के स्थानों को 'पता' के लिए जीआईएस वेब ऐप्लिकेशन के लिए .tfw होने के लिए निकाले जरूरत थी (एक्सेल -। समय में मैक्रो)
Mapperz

0

जावा में जियोटॉल्स का उपयोग करके आप इस कोड का उपयोग कर सकते हैं:

// 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। थोड़ा अलग विकल्पों के लिए मेनू रास्टर / रूपांतरण / अनुवाद के माध्यम से एक रास्ता है।

यहाँ छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.