أكثر

يؤدي تحرير DBF لملف الشكل إلى نتائج مختلفة تمامًا في R و QGIS ، لكن جداول السمات متطابقة


أواجه مشكلة غريبة نوعًا ما آمل أن يتمكن شخص ما من إلقاء بعض الضوء عليها. أقوم بالفعل بإنشاء خريطتي في R ، لكنني أستخدم QGIS كأداة للتحقق من عملية التعيين (R newb هنا). لذلك دعونا نتعمق فيه.

أحاول رسم الأنهار في منطقة اهتمامي (تنزانيا) ، لكن مصدر الشكل (diva-gis.org) يتضمن أطنانًا من خطوط المياه غير الضرورية. من أجل قابلية التكرار ، سأقوم بتضمين جميع ملفات DBF وملفات الأشكال المعدلة. هنا ملف DBF الأصلي وهنا ملف الأشكال الأصلي. تبدو هكذا.

كما ترى في DBF ، فإن العديد من الأنهار غير معروفة / غير مسماة ومدرجة على أنها "UNK" وهي ليست مفيدة جدًا بالنسبة لي. في QGIS ، يمكنني ببساطة فتح جدول السمات والفرز حسب الاسم وإزالة جميع قيم UNK. بدلاً من ذلك ، يمكنني تصفية هذه القيم من خلال تعبير SQL:

"NAM"! = "UNK"

كلاهما يعطي نفس النتائج. هنا هو DBF المحرر بواسطة QGIS وهنا ملف الشكل QGIS المحرر. هذا ما تبدو عليه الخريطة:

ثم تصبح الأمور غريبة. مرة أخرى ، أقوم بالفعل بإنشاء هذه الخريطة في R. باستخدام بيانات المصدر الأصلية ، أقوم بتحرير DBF باستخدام الحزمة "الأجنبية" ، والكتابة فوق DBF ، ثم الخريطة باستخدام ggplot. أحصل على نتيجة مختلفة تمامًا عن تلك التي في الصورة أعلاه. إليك مقتطف صغير من رمز المثال (ليس للخريطة الكاملة ، ولكن هذا هو الشكل الذي سيبدو عليه هذا الجزء من رمز الخريطة):

مكتبة (rgdal) مكتبة (أجنبية) (ggplot2) # اضبط دليل العمل المناسب setwd ("D: / Mapping-R / Returns-Practice") #read dbf ، تعبير sql لإزالة جميع قيم UNK في خطوط المياه NAM - read.dbf ("original-waterlines.dbf") water.lines <- water.lines [water.lines $ NAM! = "UNK"،] #overwrite dbf write.dbf (water.lines، "TZA_water_lines_dcw.dbf" ) #read shapefile ، تقوية لإنشاء إطار بيانات قابل للقراءة water.lines.shp <- readOGR (dsn = "D: / Mapping-R / Returns-Practice"، layer = "original-waterlines") water.lines.shp <- fortify (water.lines.shp) #plot ggplot () + geom_polygon (data = water.lines.shp، aes (long، lat، group = group)، color = "slategray4")

تبدو نتيجة هذا الرمز كما يلي:

نوع ممتد وغير تقليدي ، لكن من الواضح أنه لا يتبع نفس نمط الخط مثل الصورة المحررة بواسطة QGIS. هذا كان يقودني للجنون لقد مررت بالفعل وتحققت من سمات R مقابل سمات QGIS وقد تطابقت تمامًا ، لكن نتيجة الصورة مختلفة تمامًا. بعد التلاعب بها أكثر ، أدركت أن الكود الخاص بي هو المسؤول وهذا هو المكان الذي أخطأت فيه. ولكن بعد ذلك فتحت DBF الأصلي وأزلت جميع قيم UNK يدويًا وأعدتها مرة أخرى في QGIS. هنا هو DBF الناتج وهنا ملف الشكل المقابل ، والذي يتطابق مع صورة / قطعة R ويبدو كما يلي:

ما يعطي؟! جداول السمات متطابقة ولكن الصور مختلفة. أشعر أنه يجب أن يكون هناك شيء واضح حقًا أني افتقده ، لكني كنت ألعب بهذا الأمر لساعات حرفيًا ولا أستطيع اكتشافه.


إليك كيف أفعل ذلك في R.

مكتبة (rgdal) # قراءة في ملف الأشكال tz.wl <- readOGR ("."، "TZA_water_lines_dcw") # الآن حدد tz.wl.selection <- tz.wl [tz.wl $ NAM! = 'UNK'،] # يمكنك كتابة ذلك والمقارنة مع ملف Qgis الخاص بك: writeOGR (tz.wl.selection، "."، "TZA_water_lines_selection"، driver = "ESRI Shapefile")

لا تعبث مع Shapefile DBFs!

يتم إفساد الاتصال بين الأشكال الهندسية والسمات بسهولة ، خاصة إذا بدأت في إزالة أو إعادة ترتيب الإدخالات في DBF. هذا لن ينجح ابدا.

استخدم تنسيق ملف مختلفًا أو استخدم مكتبة تدعم ملفات الأشكال ككل وليس فقط DBF.


شاهد الفيديو: كورس QGIS 3. التعامل مع جدول البيانات الوصفية Attribute Table (شهر اكتوبر 2021).