สร้างไฟล์ TFW และ PRJ สำหรับโฟลเดอร์ของไฟล์ GeoTIFF หรือไม่? [ปิด]


16

ฉันมีโฟลเดอร์ที่มีไฟล์จำนวนมากในรูปแบบ GeoTIFF

ฉันต้องสร้างทั้งไฟล์ PRJ และ TFW สำหรับแต่ละภาพเหล่านี้

มีวิธีการทำเช่นนี้?


ใช้ซอฟต์แวร์อะไร? มีอะไรให้คุณบ้าง?
jbchurchill

คำตอบ:


16

วิธีที่ง่ายที่สุดในการสร้าง TFWs คือการเขียนสคริปต์ใน Python หรือ Java โดยใช้ GDAL ซึ่งจะเป็นบรรทัดของโค้ดจำนวนหนึ่ง

การสร้างไฟล์. prj แบบเก่า (pre ArcGis 9) ไม่รองรับGDALเพียงอ่าน (ดูที่นี่ ) สนับสนุนการสร้างไฟล์สไตล์ใหม่ (ตาม WKT) แต่ไม่รับประกันว่าจะครอบคลุมทุกกรณี แต่อย่างใดในกรณีที่มีการแทนที่สูงสุดฉันได้เขียนสคริปต์ Python ที่ทำสิ่งที่คุณต้องการ ไม่มีการตรวจสอบข้อผิดพลาดหรืออะไร แต่มันใช้ได้กับไดเร็กตอรี่ของ tiffs ที่ฉันต้องส่ง, 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 หรืออะไรก็ได้ที่จะสร้าง. TFWs

หากคุณไม่สามารถใช้สคริปต์ Python ไม่ว่าด้วยเหตุผลใดคุณสามารถใช้:

gdal_translate -co "TFW=YES" in.tif out.tif

แต่นั่นจะเป็นการคัดลอกข้อมูลภาพด้วยดังนั้นคุณจะต้องลบต้นฉบับ และแน่นอนว่ามันจะไม่สร้างไฟล์. prj ที่มีทั้งรสชาติ แต่ถ้าสมมุติว่า tiff ทั้งหมดของคุณอยู่ในรูปแบบเดียวกันคุณสามารถสร้างไฟล์. prj ด้วยมือแล้วทำซ้ำมันสำหรับรูปภาพต้นฉบับทั้งหมด


2
โปรดทราบว่าgenerate_tfwไม่สามารถทำงานได้อย่างถูกต้องกับภาพแรสเตอร์แบบหมุน สิ่งนี้สามารถแก้ไขได้ด้วยการคูณเมทริกซ์
Mike T

เฮ้ชายฉันกำลังพยายามใช้เครื่องมือ แต่ฉันไม่รู้ว่าจะทำอย่างไรดี exaclty คุณช่วยอธิบายรายละเอียดวิธีใช้มันได้ไหม ฉันแค่ต้องการสร้าง tfw สำหรับ TIFs ในโฟลเดอร์และโฟลเดอร์ย่อย ถ้ามันไม่สามารถทำงานบนโฟลเดอร์ย่อยได้ ฉันวิ่งได้หลายครั้ง ขอบคุณ
ฟาเอล

ในเมนู QGIS เปิด "Raster" เลือก "การแปลง" จากนั้นเลือก "แปล - แปลงรูปแบบ" หน้าต่างจะปรากฏขึ้น - ในบรรทัดบนให้เลือกตำแหน่งพิกัดของคุณและภายใต้พารามิเตอร์ขั้นสูงกด + เครื่องหมายเพื่อเพิ่มคำสั่ง ภายใต้ชื่อป้อนคำ tfw ภายใต้ค่าให้ป้อนใช่ ระบุปลายทางเอาต์พุตชื่อไฟล์และ voila ... ไฟล์ geotiff ของคุณจะถูกแปลงเป็นส่วน tiff และ tfw ธรรมดา ตอนนี้คุณสามารถแก้ไข tiff ในโปรแกรมแก้ไขรูปภาพที่คุณเลือกได้และกำหนดตำแหน่งทางภูมิศาสตร์ตราบใดที่คุณไม่เปลี่ยนจำนวนพิกเซลในแกน x หรือ y
user29347

19

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 ได้เช่นกัน" -> แต่มันไม่
astrojuanlu

0

ไม่จริง - ถ้าคุณรู้จักการฉายภาพของไฟล์คุณสามารถค้นหาเนื้อหาของไฟล์ prj ได้ที่http://spatialreference.orgแล้วใช้เชลล์สคริปต์เพื่อคัดลอกเทมเพลตไปยังไฟล์. prj สำหรับแต่ละอิมเมจ

การอ้างอิงทางภูมิศาสตร์จะต้องดำเนินการตามภาพต่อไฟล์เนื่องจากไฟล์. tfw จะแตกต่างกันไปสำหรับแต่ละภาพ (ยกเว้นว่าจะอยู่ในที่เดียวกันทั้งหมด) http://warper.geothings.net/อาจเป็นหนทางไปหากคุณไม่สามารถเข้าถึง GIS บนเดสก์ท็อปได้


2
ยกเว้นว่าไฟล์ GeoTIFF มักจะมีทั้งไฟล์ฉายภาพและไฟล์เวิร์ลด์ฝังอยู่ในข้อมูลเมตา .. ดังนั้นข้อมูลทั้งหมดนี้จึงเป็นที่รู้จัก
Mike T

1
ทำไมคุณถึงเขียนมันเป็นไฟล์แยกต่างหาก?
Ian Turton

1
สันนิษฐานได้ว่าซอฟต์แวร์ที่โจใช้นั้นไม่เข้าใจ GeoTIFF กับข้อมูลเมตาที่ฝังอยู่
MerseyViking

ใช่มีเมตาดาต้าปัญหาเดียวกันที่ต้องการแยกเป็น. tfw สำหรับแอปพลิเคชันเว็บ gis เพื่อ 'ทราบ' ตำแหน่งที่ตั้งของไทล์แต่ละอัน - ใช้สคริปต์ของตัวเองเพื่อแตกไฟล์ (excel - มาโครในเวลานั้น)
Mapperz

0

ใช้ 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ไปยังไฟล์ภาพฉายของคุณ


0

หากใครต้องการแก้ไข tiff เพิ่มเติมในแอพตกแต่งรูปภาพและเก็บตำแหน่งทางภูมิศาสตร์ไว้การส่งออกเลเยอร์แรสเตอร์ด้วยการสร้าง tfw และการเปิดใช้งานรูปภาพ Rendered เป็นวิธีที่ง่ายที่สุด IMO สำหรับตัวเลือกที่แตกต่างกันเล็กน้อยมีวิธีผ่านเมนู Raster / Conversion / Translate

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.