tr.geologyidea.com
Daha

Gdal_translate, yansıtılan görüntüler oluşturur

Gdal_translate, yansıtılan görüntüler oluşturur


We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.


Gdal_translate ile ilgili bir sorunum var - bir XYZ dosyasından AAIGrid'e veya geotiff'e çeviri yaparken raster yansıtılıyor ve bir eksende güneye "hareket ediyor".

Ekli görüntünün üst kısmı orijinal dosyadır, QGis'te görüntülendiğinde, alt dosya gdal_translate kullanılarak AAIGrid formatına çevrilmiştir.

gdal_translate - AAIGrid -a_srs EPSG:3301 grid.xyz grid.grd

XYZ dosyasını Geotiff'e çevirmeye çalıştığımda da aynısı oluyor.

edit: dosya örneği eklendi. Dosya şuna benziyor, ilk 2 sütun EPSG:3301 yerel koordinat sistemindeki koordinatlar ve üçüncü sütun metre cinsinden yükseklik

719935 6575005 30.709999 719945 6575005 31.08 719955 6575005 30.805 719965 6575005 30.772499 719975 6575005 30.2775 719985 6575005 30.1175 719995 6575005 30.012501 715005 6575015 28.525 715015 6575015 28.715 715025 6575015 28.834999 715035 6575015 28.6875 715045 6575015 28.452499 715055 6575015 29.147499

gdalinfo'dan çıktı

gdalinfo 65714_dem_10m.xyz.grid Sürücü: AAIGrid/Arc/Info ASCII Izgara Dosyaları: 65714_dem_10m.xyz.grid 65714_dem_10m.xyz.prj Boyut 500, 500 Koordinat Sistemi: PROJCS["Estonian_Coordinate_System_of_GEOGCS97", GCS "Estonya_1997", SFEROID["GRS_1980",6378137.298.257222101]], PRIMEM["Greenwich",0], BİRİM["Derece",0.017453292519943295]], PROJEKSİYON["Lambert_Conformal_Konic_332SP"_1, PARAMETER["Greenwich",0], PROJEKSİYON["Lambert_Conformal_Konic_332SP"_1, PARAMETER["33]34" , PARAMETRE["standart_paralel_2",58], PARAMETRE["köken_enlem",57.51755393055556], PARAMETRE["central_meridian",24], PARAMETRE["yanlış_doğu",500000], PARAMETRE["yanlış_kuzey", ÜNİTE[6375000], PARAMETRE["central_meridian",24] ",1]] Orijin = (715000000000000000000,6575000.000000000000000) Piksel Boyutu = (10.0000000000000000,-10.0000000000000000) Köşe Koordinatları: Sol Üst ( 715000.000, 6575000.000) ( 27d46'16.00"E, 59d15'32.02"K) Sol Alt ( 715000.000, 6570000.000) ) ( 27d45'58.29"E, 59d12'50.69"K) Sağ Üst ( 720000.000, 6575000.000) ( 27d51'31.03"E, 59d15'22.83"K) Sağ Alt ( 720000.000, 6570000.000) ( 27d51'12.91"E, 59d12'41.51"K) Merkez ( 717500.000, 6572500.000) ( 27d48'44.56"E, 59d14' 6.79"K) Bant 1 Blok=500x1 Tip=Float32, ColorInterp= Tanımsız

.xyzdosya alışılmadık bir şekilde sıralanır, X artan ve Y artan. Çoğu GDAL sürücüsü, görüntüyü dahili olarak çevirerek bu yönlendirmeyi halledebilir. Böylece "üst" ve "alt" koordinatlar da çevrilir:

Sürücü: XYZ/ASCII Gridded XYZ Dosyaları: test.xyz Boyut 500, 2 Koordinat Sistemi "Origin = (715000000000000000000,6575000.000000000000000) Piksel Boyutu = (10.0000000000000000,10.0000000000000000) Köşe Koordinatları: Sol Üst ( 715000.000, 6575000.000) Sol Alt ( 715000.000000000000000,6575000.000000000000000) , 6575020.000) Sağ Üst ( 720000.000, 6575000.000) Sağ Alt ( 720000.000, 6575020.000) Merkez ( 717500.000, 6575010.000) Bant 1 Blok=500x1 Tip=Float32, ColorInterp=Tanımsız Min=28.452 Max=31.080 NoData Value=0

sıralama yaparsanız.xyzdosya X artan ve Y azalan ile, meta veriler mantıklı bir şekilde görünür:

Sürücü: XYZ/ASCII Gridded XYZ Dosyaları: testort.xyz Boyut 500, 2 Koordinat Sistemi "Origin = (715000000000000000000,6575020.000000000000000) Piksel Boyutu = (10.000000000000000,-10.0000000000000000) Köşe Koordinatları: Sol Üst ( 715000.000, 6575020.000) Sol Alt ( 715000.000, 6575000.000) Sağ Üst ( 720000.000, 6575020.000) Sağ Alt ( 720000.000, 6575000.000) Merkez ( 717500.000, 6575010.000) Bant 1 Blok=500x1 Tip=Float32, ColorInterp=Tanımsız Min=28.452 Max=31.080 Veri Yok Değeri=0

Ne yazık ki, AAIGrid formatı ilk oryantasyon için tasarlanmamıştır ve hiç kimse bu sorunu bir hata mesajıyla veya dahili olarak koordinatları ters çevirerek yakalamak için uygulama yapmadı. Sonuç olarak, AAIGrid başlığı yanlış oluşturulur:

ncols 500 nrows 2 xllcorner 715000.000000000000 yıl köşesi 6574980.0000000000000 hücre boyutu 10.000000000000 NODATA_value 0

Aşağıdaki veriler her zaman sol üstten sağ alta doğru doğrusaldır.

Bir tür hack olarak, rasterinizi tif olarak kaydetmek için gdal_translate yerine gdalwarp kullanabilir ve ardından AAIGrid'e çevirebilirsiniz:

gdalwarp test.xyz 3301.tif gdalinfo 3301.tif gdal_translate - AAIGRID 3301.tif 3301.asc

hangi doğru başlığı sunar:

ncols 500 satır 2 xllköşe 715000.000000000000 yıl köşesi 6575000.000000000000 hücre boyutu 10.000000000000 NODATA_value 0

Bu geçici çözüm işe yararsa deneyebilirsiniz. Bu komutu kullanın:

gdal_translate -of GTiff -co PROFILE=TEMEL -co TFW=EVET -a_srs EPSG:3301 grid.xyz grid.tif

TFW dosyasını açın ve Kuzey-Güney piksel boyutunu veren 4. satırı düzenleyin. Şimdi "-10" olarak sahip olduğunuza inanıyorum. Pozitif "10" olarak değiştirin ve QGIS ile test edin. Görüntü doğru bir yere açılabilir. Varsa, gdalwarp ile tüm normal coğrafi dönüşüm etiketleriyle yeni bir GeoTIFF yazabilirsiniz.

gdalwarp -of GTiff -s_srs epsg:3301 -t_srs epsg:3301 grid.tif normalized.tif

Bunun sadece çılgınca bir tahmin olduğunu söylemeliyim ama işe yarayabilir.


Hala güncel bir konuda eski bir konuyu sürdürmek.

QGIS'ten dışa aktarılan ESRI ASC dosyalarının dikey yansıtma sorununu çözmek için 2 geçici çözüm öneriyorum:

  1. Yalnızca GUI'ye yönelik bir geçici çözüm
  2. Bir komut satırı geçici çözümü

Yalnızca GUI geçici çözümü

Bu şunları içerir:

  1. Negatif bir "Dikey Çözünürlük" ayarlarken GeoTiff olarak dışa aktarın
  2. ASC olarak dışa aktarmak için Raster->Dönüştürme->Çeviri'yi kullanın
  3. ASC dışa aktarma seçeneklerini ayarlayın

Negatif bir "Dikey Çözünürlük" ayarlarken GeoTiff olarak dışa aktarın

Bu, satır sırasının ters çevrildiği standart, geçerli bir GeoTIFF dosyası oluşturur. Bunun için "Dikey Çözünürlük"ün negatif olması gerekir. Çözünürlük ne olursa olsun, sadece bir "eksi" işareti ekleyin. Mutlak değerini değiştirmeyin. Örneğin:

"Dikey Çözünürlük = 1000" -> "Dikey Çözünürlük = -1000" "Dikey Çözünürlük = 50" -> "Dikey Çözünürlük = -50"

fikri anladınız :) Kaydedilmiş GeoTIFF dosyasını mevcut haritanıza yüklemek için "Haritaya kaydedilmiş dosya ekle"yi işaretleyin ve görsel olarak inceleyin.

ASC olarak dışa aktarmak için Raster->Dönüştürme->Çeviri'yi kullanın

QGIS'deki ASC dışa aktarma işlemi yalnızca Raster->Conversion->Translate menüsünden erişebileceğiniz gdal_translate (ve aslında diğer GDAL araçları) aracılığıyla kullanılabilir.

Katman panelinde yeni dışa aktardığınız dosyayı seçin ve "Raster->Dönüşüm->Çevir" menü komutunu seçin:

ASC dışa aktarma seçeneklerini ayarlayın

Bu seçeneklerin işaretli olduğundan emin olun. Özellikle, "Haritaya kaydedilmiş dosyayı ekle", yeni oluşturulan artanı mevcut QGIS haritanıza aktarır, böylece görsel olarak her şeyin doğru bir şekilde çalıştığından emin olabilirsiniz.

Çalıştıra tıkla; her şey yolundaysa, haritanızın son ASC katmanı tam olarak orijinal raster üzerinde işlenmiş olmalıdır.

Komut satırı geçici çözümü

Yayınladığım GIST'e bakın: https://Gist.github.com/rafdouglas/9a5548b4a259ec2c7823826b65feeafd

#!/bin/bash # # "Raster->Conversion->Translate" komutu # aracılığıyla QGIS'ten dışa aktarılan ASC dosyalarının dikey ayna hatasını düzeltir (sırasıyla gdal_translate'i çağırır) # # RafDouglas - 190505 # # # örnek başlık ASC dosyasının bölümü: # #ncols 600 #nrows 300 #xllcorner 565200.000000000000 #yllcorner 4797400.000000000000 #cellsize 10.000000000000 #NODATA_value 0 if [ -z $1 ]; ardından yankı "Kullanım: $0 input_file.asc" if [ ! -e $1 ]; sonra echo "Kullanım: $0 input_file.asc" echo "Belirtilen girdi dosyası ($1) mevcut değil." çıkış fi mypid=$$ mytmp_file="temp_""$mypid"'.asc' mytmp_prj="temp_""$mypid"'.prj' infile=$1 inprj=$(echo $infile|sed 's/.asc/ .prj/g') outfile=$(echo $infile|sed 's/.asc/_proper.asc/g') outprj=$(echo $infile|sed 's/.asc/_proper.prj/g') head -6 "$infile"|awk '{h[$1]=$2}END{ yllcorner_proper=h["yllcorner"]+h["nrows"]*h["cellsize"] print "ncols " h["ncols "] print "nrows " h["nrows"] print "xllcorner " h["xllcorner"] #print "yllcorner " h["yllcorner"] print "yllcorner " yllcorner_proper print "cellsize " h["cellsize"] print " NODATA_value " h["NODATA_value"] }' > "$mytmp_file" #veri satırlarını ters sırada ekleyin tail -n+7 "$infile"|tac >> "$mytmp_file" if [ ! -e $dosyası ]; sonra mv -n "$mytmp_file" "$outfile" cp -n "$inprj" "$outprj" echo echo "Çıktı dosyası: $outfile hazır" else cp -n "$inprj" "$mytmp_prj" echo echo "Waring : $outfile zaten mevcut. Üzerine yazılmıyor." echo "Çıktı dosyası: $mytmp_file hazır" fi echo

Videoyu izle: GDAL Tutorial #2: Converting, Resampling, Reprojecting, Clipping


Yorumlar:

  1. Carson

    Özür dilerim, hiçbir şeye yardım edemem. Bence doğru kararı bulacaksınız.

  2. Ainslie

    Hızlı cevap)))

  3. Hrothrehr

    Kesinlikle. Yukarıda anlatılanlara katılıyorum. Bu konu üzerinden iletişim kurabiliriz.

  4. Claudios

    Evet, kulağa cazip geliyor

  5. Bram

    Yukarıdakilerin hepsi doğrudur.

  6. Daleel

    Evet ... bundan çok uzaktayız ...

  7. Macduff

    Dikkat çekici, bu oldukça değerli mesaj

  8. Gwern

    Gerçi düşünmek lazım



Bir mesaj yaz