Daugiau

„gdal_translate“ sukuria veidrodinius vaizdus


Turiu problemų su gdal_translate - verčiant iš XYZ failo į AAIGrid ar geotifą rastras yra atspindėtas ir „perkeliamas“ į pietus viena ašimi.

Viršutinė pridėto vaizdo dalis yra originalus failas, kai rodomas „QGis“, apatinis failas buvo išverstas į AAIGrid formatą su gdal_translate naudojant

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

Tas pats atsitinka, kai bandau išversti XYZ failą į geotifą.

Redaguoti: pridėtas failo pavyzdys. Failas atrodo taip, pirmosios 2 kolonos yra koordinatės EPSG: 3301 vietinė koordinačių sistema, o trečiasis stulpelis yra aukštis metrais

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

Išvestis iš „gdalinfo“

„gdalinfo 65714_dem_10m.xyz.grid“ tvarkyklė: AAIGrid / Arc / Info ASCII tinklelio failai: 65714_dem_10m.xyz.grid 65714_dem_10m.xyz.prj Dydis yra 500, 500 koordinačių sistema yra: PROJCS ["Estonian_Coordinate_System_AT_1_7" "Estonia_1997", SPHEROID ["GRS_1980", 6378137,298.257222101], PRIMEM ["Greenwich", 0], UNIT ["Degree", 0.017453292519943295]], PROJECTION ["Lambert_Conformal_Conic_2SP "33", PARAMETER [[Standard] , PARAMETER ["standard_parallel_2", 58], PARAMETER ["originalo platuma", 57.51755393055556], PARAMETER ["central_meridian", 24], PARAMETER ["false_easting", 500000], PARAMETER ["false_northing", 6375000], UNIT [ ", 1]] Kilmė = (715000.000000000000000,6575000.000000000000000) Pikselių dydis = (10.00000000000000000, -10.000000000000000) Kampo koordinatės: Viršutinė kairė (715000.000, 6575000.000) (27d46'16.00" E, 59d15'32.02 700 N) Žemutinė ) (27d45'58.29 "E, 59d12'50.69" N) Viršutinė dešinė (720000.000, 6575000.000) (27d51'31.03 "E, 59d15'22.83" N) Dešinysis apatinis (720000.000, 6570000.000) (27d51'12.91 "E, 59d12'41.51" N) centras (717500.000, 6572500.000) (27d48'44.56 "E, 59d14 '6.79" N) 1 juostos blokas = 500x1 tipas = Float32, ColorInterp = Neapibrėžtas

The.xyzfailas yra rūšiuojamas neįprastu būdu, X didėjantis ir Y kylantis. Daugelis GDAL tvarkyklių gali valdyti šią orientaciją, apvertusios vaizdą viduje. Taigi apverčiamos „viršutinės“ ir „apatinės“ koordinatės:

Tvarkyklė: XYZ / ASCII tinkleliai XYZ failai: test.xyz dydis yra 500, 2 koordinačių sistema yra "Kilmė = (715000.00000000000000000000, 6575000.00000000000000000) Pikselių dydis = (10.00000000000000000,10.00000000000000000) Kampo koordinatės: Viršutinė kairė (715000.000) Viršutinė dešinė (720000.000, 6575000.000) Apatinė dešinė (720000.000, 6575020.000) Centras (717500.000, 6575010.000) 1 juosta 1 blokas = 500x1 Tipas = Float32, ColorInterp = Neapibrėžtas Min = 28,452 Maks. = 31,080 „NoData“ reikšmė = 0

Jei rūšiuosite.xyzfailą X didėjant ir Y mažėjant, metaduomenys rodomi logiškai:

Tvarkyklė: XYZ / ASCII Gridded XYZ Failai: testsort.xyz Dydis yra 500, 2 koordinačių sistema yra "Kilmė = (715000.00000000000000000,6575020.00000000000000000) Pikselių dydis = (10.000000000000000, -10.00000000000000000) Kampo koordinatės: Viršutinė kairė 65720 Viršutinis dešinysis (720000.000, 6575020.000) Dešinysis apatinis (720000.000, 6575000.000) Centras (717500.000, 6575010.000) 1 juosta Blokas = 500x1 Tipas = Float32, ColorInterp = Neapibrėžtas Min = 28,452 Maks. = 31,080 NoData Vertė = 0

Deja, „AAIGrid“ formatas nėra skirtas pirmajai orientacijai, ir niekas neįgyvendino šios problemos gaudymo klaidos pranešimu ar iš vidaus nugręždamas koordinates. Dėl to AAIGrid antraštė sugeneruojama neteisingai:

ncols 500 nrows 2 xllcorner 715000.000000000000 yllcorner 6574980.00000000000000 cellsize 10.000000000000 NODATA_value 0

Šie duomenys visada yra tiesiai iš viršutinės kairės į apatinę dešinę.

Kaip tam tikrą įsilaužimą, galite naudoti „gdalwarp“, o ne „gdal_translate“, kad išsaugotumėte rastrą kaip tif, tada išverstumėte į „AAIGrid“:

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

kuris pateikia teisingą antraštę:

ncols 500 nrows 2 xllcorner 715000.00000000000000 yllcorner 6575000.00000000000000 cellsize 10.000000000000 NODATA_value 0

Galite pabandyti, ar šis sprendimas pasiteisina. Naudokite šią komandą:

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

Atidarykite TFW failą ir redaguokite 4-ąją eilutę, nurodančią šiaurės – pietų taškų dydį. Manau, kad jūs dabar turite „-10“. Pakeiskite jį į teigiamą „10“ ir išbandykite naudodami QGIS. Vaizdas gali atsidaryti teisingoje vietoje. Jei taip, galite parašyti naują „GeoTIFF“ su visomis įprastomis geotransformacijos žymomis naudodami „gdalwarp“

gdalwarp -of GTiff -s_srs epsg: 3301 -t_srs epsg: 3301 tinklelis.tif normalizuotas.tif

Turiu pasakyti, kad tai tik laukinis spėjimas, bet jis gali pasiteisinti.


Tęsiama sena tema vis dar aktualia tema.

Siūlau 2 būdus, kaip išspręsti iš QGIS eksportuotų ESRI ASC failų vertikalaus atspindėjimo problemą:

  1. Tik GUI sprendimas
  2. Komandinės eilutės sprendimas

Tik GUI problemos sprendimas

Tai reiškia:

  1. Eksportuoti kaip „GeoTiff“, tuo pačiu nustatant neigiamą „Vertikalią skiriamąją gebą“
  2. Norėdami eksportuoti kaip ASC, naudokite rastrą-> konversiją-> vertimą
  3. Nustatykite ASC eksportavimo parinktis

Eksportuoti kaip „GeoTiff“, tuo pačiu nustatant neigiamą „Vertikalią skiriamąją gebą“

Tai sukuria standartinį, galiojantį „GeoTIFF“ failą, kuriame eilučių tvarka yra apversta. Norint tai padaryti, vertikali skiriamoji geba turi būti neigiama. Tiesiog pridėkite ženklą „minusas“ prie bet kokios rezoliucijos. Nekeiskite jo absoliučios vertės. Pavyzdžiui:

"Vertikali skiriamoji geba = 1000" -> "Vertikali raiška = -1000" "Vertikali raiška = 50" -> "Vertikali raiška = -50"

jums idėja :) Patikrinkite „Pridėti išsaugotą failą į žemėlapį“, kad galėtumėte įkelti išsaugotą „GeoTIFF“ failą į dabartinį žemėlapį ir vizualiai jį apžiūrėti.

Norėdami eksportuoti kaip ASC, naudokite rastrą-> konversiją-> vertimą

ASC eksportas į QGIS yra prieinamas tik per gdal_translate (ir iš tikrųjų kitus GDAL įrankius), kurį galite pasiekti per meniu Rastras-> Konversija-> Versti.

Skydelyje Sluoksnis pasirinkite ką tik eksportuotą failą ir pasirinkite meniu komandą „Rastras-> Konversija-> Versti“:

Nustatykite ASC eksportavimo parinktis

Įsitikinkite, kad pažymėtos šios parinktys. Visų pirma, „Pridėti išsaugotą failą į žemėlapį“ importuos naujai sukurtą pakylą į dabartinį QGIS žemėlapį, kad galėtumėte vizualiai įsitikinti, jog viskas pavyko teisingai.

Spustelėkite Vykdyti; jei viskas buvo gerai, jūsų žemėlapio paskutinis ASC sluoksnis turėtų būti pateiktas tiksliai virš pradinio rastro.

Komandinės eilutės sprendimas

Žr. Mano paskelbtą GIST: https://gist.github.com/rafdouglas/9a5548b4a259ec2c7823826b65feeafd

#! / bin / bash # # ištaiso iš QGIS # eksportuotų ASC failų vertikalią veidrodžio klaidą per komandą „Rastras-> Konversija-> Versti“ (kuri savo ruožtu iškviečia gdal_translate) # # RafDouglas - 190505 # # # pavyzdžio antraštė ASC failo skyrius: # #ncols 600 #nrows 300 #xllcorner 565200.000000000000 #yllcorner 4797400.00000000000000 #cellsize 10.000000000000 #NODATA_value 0 if [-z $ 1]; tada atkartokite "Naudojimas: $ 0 input_file.asc" išeiti iš „fi“, jei [! -e $ 1]; tada echo "Naudojimas: $ 0 input_file.asc" echo "Nurodyto įvesties failo ($ 1) nėra." exit 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 ') galva -6 "$ infile" | awk '{h [$ 1] = $ 2} PABAIGA {yllcorner_proper = h ["yllcorner"] + h ["nrows"] * h ["cellsize"] spausdinti "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 "#pridėkite duomenų eilutes atvirkštine tvarka uodega -n + 7" $ infile "| tac >>" $ mytmp_file "jei [! -e $ outfile]; tada mv -n "$ mytmp_file" "$ outfile" cp -n "$ inprj" "$ outprj" echo echo "Išvesties failas: $ outfile yra paruoštas" dar cp -n "$ inprj" "$ mytmp_prj" echo echo "Waring : $ outfile jau yra. Neperrašinėdamas. " "Išvesties failas: $ mytmp_file yra paruoštas"