أكثر

ينشئ gdal_translate صورًا معكوسة


أواجه مشكلة مع gdal_translate - عند الترجمة من ملف XYZ إلى AAIGrid أو تحديد الموقع الجغرافي ، يتم عكس البيانات النقطية و "تحريكها" جنوبًا على محور واحد.

الجزء العلوي من الصورة المرفقة هو الملف الأصلي ، عند عرضه في QGis ، تمت ترجمة الملف السفلي إلى تنسيق AAIGrid باستخدام gdal_translate

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

يحدث الشيء نفسه عندما أحاول ترجمة ملف XYZ إلى Geotiff.

تحرير: عينة ملف المضافة. يبدو الملف على هذا النحو ، أول عمودين هما إحداثيات في EPSG: نظام إحداثيات محلي 3301 والعمود الثالث ارتفاع بالأمتار

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

gdalinfo 65714_dem_10m.xyz.grid برنامج التشغيل: AAIGrid / Arc / Info ASCII Grid Files: 65714_dem_10m.xyz.grid 65714_dem_10m.xyz.prj الحجم 500 ، 500 نظام الإحداثيات هو: PROJCS ["Estonian_Cof_CON_1"، DUMM_974_System_System ، "Estonia_1997"، SPHEROID ["GRS_1980"، 6378137،298.257222101]]، PRIMEM ["Greenwich"، 0]، UNIT ["Degree"، 0.017453292519943295]]، PROJECTION ["Lambert_Conformal_Conic_2SP"]، 59.3433_1 ، PARAMETER ["standard_parallel_2"، 58]، PARAMETER ["latitude_of_origin"، 57.51755393055556]، PARAMETER ["central_meridian"، 24]، PARAMETER ["false_easting"، 500000]، PARAMETER ["false_northing"، ["6375000] "، 1]] الأصل = (715000.000000000000000،6575000.000000000000000) حجم البكسل = (10.000000000000000 ، -10.000000000000000) إحداثيات الزاوية: أعلى اليسار (715000.000 ، 6575000.000) (27d46'16.00" E ، 59d15'32.02 "N) أسفل اليسار (715000.000 ، 65700.000) ) (27d45'58.29 "E ، 59d12'50.69" N) أعلى اليمين (720000.000 ، 6575000.000) (27d51'31.03 "E ، 59d15'22.83" N) أسفل اليمين (720000.000 ، 6570000.000) (27d51'12.91 "E ، 59d12'41.51" N) المركز (717500.000 ، 6572500.000) (27d48'44.56 "E ، 59d14 '6.79" N) مجموعة النطاق 1 = 500x1 النوع = Float32 ، ColorInterp = غير معرف

ال.xyzيتم فرز الملف بطريقة غير معتادة ، X تصاعدي و Y تصاعدي. يمكن لمعظم برامج تشغيل GDAL التعامل مع هذا الاتجاه عن طريق قلب الصورة داخليًا. وبالتالي يتم قلب الإحداثيين "العلوي" و "السفلي" أيضًا:

برنامج التشغيل: XYZ / ASCII Gridded XYZ Files: test.xyz الحجم 500 ، 2 نظام الإحداثيات هو "الأصل = (715000.000000000000000،6575000.000000000000000) حجم البكسل = (10.000000000000000،10.000000000000000) إحداثيات الزاوية: أعلى اليسار (715000.000 ، 6575000.000) أسفل اليسار (715000.000 ، 6575000.000) ، 6575020.000) أعلى اليمين (720000.000 ، 6575000.000) أسفل اليمين (720000.000 ، 6575020.000) مركز (717500.000 ، 6575010.000) مجموعة النطاق 1 = 500x1 النوع = Float32 ، ColorInterp = الحد الأدنى غير المحدد = 28.452 الحد الأقصى = 31.080 قيمة البيانات غير المحددة = 0

إذا قمت بفرز ملف.xyzملف بواسطة X تصاعدي و Y تنازلي ، تظهر البيانات الوصفية بطريقة منطقية:

برنامج التشغيل: XYZ / ASCII Gridded XYZ Files: testort.xyz الحجم 500 ، 2 نظام الإحداثيات هو "الأصل = (715000.000000000000000،6575020.000000000000000) حجم البكسل = (10.000000000000000، -10.000000000000000) إحداثيات الزاوية: أعلى اليسار (715000.000 ، 65720.000) السفلي 715000.000 ، 6575000.000) أعلى اليمين (720000.000 ، 6575020.000) أسفل اليمين (720000.000 ، 6575000.000) مركز (717500.000 ، 6575010.000) مجموعة النطاق 1 = 500x1 النوع = Float32 ، ColorInterp = الحد الأدنى غير المحدد = 28.452 الحد الأقصى = 31.080 قيمة البيانات غير المحددة = 0

لسوء الحظ ، لم يتم تصميم تنسيق AAIGrid للاتجاه الأول ، ولم ينفذ أي شخص هذه المشكلة من خلال رسالة خطأ أو قلب الإحداثيات داخليًا. نتيجة لذلك ، يتم إنشاء عنوان AAIGrid بشكل خاطئ:

ncols 500 nrows 2 xllcorner 715000.000000000000 yllcorner 6574980.000000000000 خلية بحجم 10.000000000000 NODATA_value 0

دائمًا ما تكون البيانات التالية خطية من أعلى اليسار إلى أسفل اليمين.

كنوع من الاختراق ، يمكنك استخدام gdalwarp بدلاً من gdal_translate لحفظ البيانات النقطية بتنسيق tif ، ثم ترجمتها إلى AAIGrid:

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

الذي يسلم الرأس الصحيح:

ncols 500 nrows 2 xllcorner 715000.000000000000 yllcorner 6575000.000000000000 حجم الخلية 10.000000000000 NODATA_value 0

يمكنك محاولة إذا حدث هذا الحل البديل للعمل. استخدم هذا الأمر:

gdal_translate-of GTiff -co الملف الشخصي = BASELINE -co TFW = نعم -a_srs EPSG: 3301 grid.xyz grid.tif

افتح ملف TFW وقم بتحرير السطر الرابع الذي يعطي حجم البكسل بين الشمال والجنوب. أعتقد أن لديك الآن كـ "-10". قم بتغييرها إلى إيجابية "10" واختبرها باستخدام QGIS. قد تفتح الصورة في المكان الصحيح. إذا كان الأمر كذلك ، فيمكنك كتابة GeoTIFF جديد مع جميع علامات التحويل الجغرافي العادية باستخدام gdalwarp

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

يجب أن أقول إن هذا مجرد تخمين جامح ولكنه قد ينجح.


استئناف موضوع قديم حول قضية لا تزال قائمة.

أقترح حلين لحل مشكلة الانعكاس العمودي لملفات ESRI ASC المصدرة من QGIS:

  1. حل بديل لواجهة المستخدم الرسومية فقط
  2. حل بديل لسطر الأوامر

حل بديل واجهة المستخدم الرسومية فقط

هذا يستتبع:

  1. تصدير بتنسيق GeoTiff ، أثناء تعيين "دقة رأسية" سلبية
  2. استخدم النقطية-> التحويل-> ترجمة للتصدير كـ ASC
  3. قم بتعيين خيارات تصدير ASC

تصدير بتنسيق GeoTiff ، أثناء تعيين "دقة رأسية" سلبية

يؤدي هذا إلى إنشاء ملف GeoTIFF قياسي وصالح ، يتم فيه قلب ترتيب الصفوف. للقيام بذلك ، يجب أن تكون "الدقة الرأسية" سلبية. ما عليك سوى إضافة علامة "ناقص" لأي حل موجود. لا تغير قيمته المطلقة. على سبيل المثال:

"الدقة الرأسية = 1000" -> "الدقة الرأسية = -1000" "الدقة الرأسية = 50" -> "الدقة الرأسية = -50"

تحصل على الفكرة :) تحقق من "إضافة ملف محفوظ للتعيين" لتحميل ملف GeoTIFF المحفوظ في خريطتك الحالية ، وفحصه بصريًا.

استخدم النقطية-> التحويل-> ترجمة للتصدير كـ ASC

يتوفر تصدير ASC في QGIS فقط trhough gdal_translate (وأدوات GDAL الأخرى ، في الواقع) ، والتي يمكنك الوصول إليها عبر القائمة النقطية-> التحويل-> الترجمة.

حدد في لوحة الطبقة الملف الذي قمت بتصديره للتو ، واختر أمر القائمة "نقطي-> تحويل-> ترجمة":

قم بتعيين خيارات تصدير ASC

تأكد من فحص هذه الخيارات. على وجه الخصوص ، ستقوم "إضافة ملف محفوظ إلى الخريطة" باستيراد التصاعدي الذي تم إنشاؤه حديثًا إلى خريطة QGIS الحالية بحيث يمكنك التأكد بصريًا من عمل كل شيء بشكل صحيح.

انقر فوق تشغيل؛ إذا كان كل شيء على ما يرام ، فيجب أن تحتوي خريطتك على طبقة ASC النهائية معروضة تمامًا فوق البيانات النقطية الأصلية.

سطر الأوامر الحل

راجع GIST التي نشرتها: https://gist.github.com/rafdouglas/9a5548b4a259ec2c7823826b65feeafd

#! / bin / bash # # يصحح خطأ المرآة الرأسية لملفات ASC المصدرة من QGIS # من خلال الأمر "Raster-> Conversion-> Translate" # (والذي بدوره يستدعي gdal_translate) # # RafDouglas - 190505 # # # مثال header قسم من ملف ASC: # #ncols 600 #nrows 300 #xllcorner 565200.000000000000 #yllcorner 4797400.000000000000 #cellsize 10.000000000000 #NODATA_value 0 if [-z $ 1]؛ ثم صدى "Usage: $ 0 input_file.asc" خروج fi إذا [! -e $ 1] ؛ ثم صدى "Usage: $ 0 input_file.asc" echo "ملف الإدخال المحدد ($ 1) غير موجود." 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 ') head -6 "$ infile" | awk '{h [$ 1] = $ 2} END {yllcorner_proper = h ["yllcorner"] + h ["nrows"] * h ["cellize"] طباعة "ncols" h ["ncols "] طباعة" nrows "h [" nrows "] طباعة" xllcorner "h [" xllcorner "] #print" yllcorner "h [" yllcorner "] طباعة" yllcorner "yllcorner_proper print" cellize "h [" cellize "] print" NODATA_value "h [" NODATA_value "]} '>" $ mytmp_file "# إضافة صفوف البيانات بترتيب معكوس tail -n + 7" $ infile "| tac >>" $ mytmp_file "إذا [! -e $ outfile] ؛ ثم mv -n "$ mytmp_file" "$ outfile" cp -n "$ inprj" "$ outprj" echo echo "ملف الإخراج: $ outfile جاهز" else cp -n "$ inprj" "$ mytmp_prj" echo echo "Waring : الملف $ outfile موجود بالفعل. لا يتم الكتابة فوقه. " echo "ملف الإخراج: $ mytmp_file جاهز" fi echo


شاهد الفيديو: Pragmatic GDAL (شهر اكتوبر 2021).