البيانات الجغرافية و ٢٣ قرية أحسائية


جيوغرافي


مقدمة

البيانات الجغرافية دائما ما تثير فضولي واهتمامي . ويبدو ان رغم محدودية الكرة الارضية الا ان البيانات الجغرافية في تمدد واتساع مستمرين. لذلك قررت في هذه التدوينة أن استطلع بعض الافكار والنظريات الخاصة بعلم الجغرافيا وما يمكن تحليله من خلال لغة R

عالم الفيكتور وعالم الراستر

هناك طريقتين لتمثيل البيانات الجغرافية .طريقة الـ vector و طريقة الـ raster. بالنسبة إلى الـ vectors فهذه الطريقة ترى العالم كنقاط واشكال هندسية لها حدود وأماكن معروفة على وجه الارض . عادة ما يكون حجم الملفات التي تحتفظ بمعلومات العالم “الفيكتوري” ضئيل لا يكاد يذكر.

اما بالنسبة إلى الـ raster فهذه الطريقة ترى العالم كالبلاط المتطابق في الحجم وكل بلاطة تحوي في جعبتها خلايا تحتفظ فيها كل خلية بمعلومات جغرافية. لعلك لاحظت عند تصفحك Google Maps ان هناك بعض المربعات يقوم المتصفح بتحميلها لعرض صور الاقمار الصناعية.

طبعا لكل طريقة مزايا فطريقة الفيكتور تستخدم بشكل واسع في مجالات علوم الاجتماعيات لرصد الحدود السياسية الدولية او لتحديد الاماكن ذات الاهمية . اما طريقة الراستر فتستخدم بشكل مكثف في العلوم البيئية والطبيعية لرصد التضاريس الجغرافية غالبا ما يكون معتمدا على تقنية التحسس عن بعد بالأقمار الإصطناعية remote sensing technologies.

مصطلحات جغرافية مستخدمة في R :

إضافة إلى تحديد نوع البيانات الجغرافية ( vector data أو raster data), هناك معلومات اخرى مهمة تحتفظ صيغ R الجغرافية بها وهي :

  • Coordinate Reference System : واختصاره CRs وهو ما يشكل حلقة الوصل بين البيانات الجغرافية وموقعها على سطح الأرض. الـ CRs إما ان يكون Geographic او Projected.

    • Geographic : وهو النظام الذي يحدد هوية لكل نقطة على الأرض من خلال القيم الطولية والقيم العرضية. لكي يتمكن هذا النظام من تحديد تلك القيم رياضيا, قام العلماء بتبسيط المسئلة وافتراض ان شكل الكرة الأرضية بيضاوي بحت. طبعا هذا الإفتراض ليس دقيقا بالضبط لكنه يفي بالغرض بشكل كبير جدا.

    • Projected وهو نظام يحاول بسط الكرة الأرضية (الثلاثية الابعاد) إلى نظام ديكارتي مسطح ثنائي الأبعاد يعتمد على قيمتي x و y. هذه العملية غير ممكنة بدون تحريف القيم الجغرافية قليلاً مما ينتج عنه بعض التشوهات. على سبيل المثال, في منظور ميركيتور Mercator Projection يظهر لنا ان جرينلاند greenland (والتي لا تتجاز مساحتها اكثر من مليونين كيلومتر مربع) مساوية لمساحة القارة الافريقية بأكملها والتي تزيد مساحتها عن ثلاثين مليون كيلومتر مربع.

  • Units : وهي وحدة القياس المستخدمة. أختلاف مصادر البيانات الجغرافية يحتم علينا معرفة وحدة القياس. فكما تعلم, هناك من يستخدم الأقدام والأميال وهناك من يستخدم الأمتار والكيلو مترات.

الجدير بالإشارة هو أن جزء من نظام CRs هو تحديد المسند الجيوديسي او Geodetic Datum وهناك انواع كثيرة من المساند منها ما يعد عالميا ومنها ما يعد محليا. لعل هذا الفيديو يساعد على الشرح.

حزمة sf

حزمة sf والتي هي اختصار لـ simple feature تعد من الحزم القوية جدا في التعامل مع البيانات الجيوغرافية. حزمة sf تتبنى طريقة الفيكتور وهي حزمة انيقة بالفعل

library("sf") 
library("spData") # لتحميل خريطة العالم 
library("dplyr") # للتعامل مع البيانات
library("osmdata") # لتحميل خرائط openStreetMaps

البيانات في حزمة sf تكون بصيغة data frames مما يجعل التعامل معها أبسط وأسهل. كل سجل بالإمكان أن يحمل معلومات جغرافية وغير جغرافية. لكن العامود الدائم في كل تلك السجلات هو geom وهو عبارة عن قائمة تحمل المعلومات الجغرافية لكل سجل

names(world)
##  [1] "iso_a2"    "name_long" "continent" "region_un" "subregion" "type"     
##  [7] "area_km2"  "pop"       "lifeExp"   "gdpPercap" "geom"

هذه الميزة في فصل البيانات الجغرافية عن غيرها تجعل العمليات الاحصائية ممكنة على المتغيرات الغير جغرافية مثل العمر الإفتراضي لسكان الدول مثلا.

summary(world["lifeExp"])
##     lifeExp                 geom    
##  Min.   :50.62   MULTIPOLYGON :177  
##  1st Qu.:64.96   epsg:4326    :  0  
##  Median :72.87   +proj=long...:  0  
##  Mean   :70.85                      
##  3rd Qu.:76.78                      
##  Max.   :83.59                      
##  NA's   :10

هذه الميزة تجعل صنع الخرائط الجغرافية المعلوماتية عملية سهلة جدا

# عرض جميع المتغيرات 
plot(world)

plot(world["pop"]) # عرض خريطة الكثافة السكانية 

صيغة sf كـ data frame في بيئة R يجعلها جد مرنة. لأنها تمكننا من فرز البيانات الموجودة حسب قيمة معينة اوبتجميعها حسب مستوايات اعلى. هذه الميزة توفر علينا عناء تعلم طرق جديدة للتعامل مع البيانات الجغرافية و تساهم على رفع مستوى انتاجيتنا والإستفادة اكثر من مهاراتنا الحالية في التعامل مع data frames.

Asia<- world %>% filter(continent == "Asia") %>% st_union() 
ksa <- world %>% filter(name_long == "Saudi Arabia") 
plot(st_geometry(Asia))
plot(st_geometry(ksa), lwd = 3, col = "gray", add = TRUE)

في الكود اعلاه قمنا بدمج الدول الآسيوية على مستوى القارة لتبدو كقطعة واحدة. كذلك قمنا بفرز خريطة المملكة العربية السعودية وتلوينها باللون الرمادي.

استخدام حزمة Sf مع بيانات OpenStreetMap

يبة المجانية للمعلومات الجغرافية هي OpenStreetMap. الجميل في الأمر انه بالإمكان الاستفادة من هذه القاعدة البياناتية الضخمة والتعامل مع بياناتها بكل يسر بإستخدام حزمة sf. يمكن زيارة الموقع وتحميل البيانات مجانا.

# هنا نقوم ببناء الإستعلام الذي سوف نرسله لسيرفرات OpenStreetMap
Alhasa_str <- opq( c(48.02736 ,25.1431, 49.9356 , 25.6886)) %>% add_osm_feature(key = 'highway', value = available_tags('highway')) %>% osmdata_sf()
plot(st_geometry(Alhasa_str$osm_lines ), main = "Alhasa Streets") 
plot(st_geometry(ksa), lwd = 3, alph = .3,col = rgb(173,216,230, max = 255 ,alpha = 100), add = TRUE)

library("leaflet")
leaflet(Alhasa_str$osm_lines) %>% 
  addPolylines() %>% setView(49.606208,25.403518, zoom = 14)

مثال : كم قرية في محافظة الأحساء وأين تقع تلك القرى؟

لإستعراض قدرة الحزمة sf سنحاول الإجابة على سؤال بسيط قد لا يمكن الإجابة عليه بسرعة بإستخدام Google Maps. السؤال هو : ما هي القرى الموجودة في الأحساء وأين تقع؟. من الأمور الجميلة هي أن هذه المعلومة متوفرة ومفتوحة المصدر ويمكن جمعها من قاعدة البيانات المفتوحة OpenStreetMap أليس ذلك رائعاً

# هنا نقوم ببناء الإستعلام الذي سوف نرسله لسيرفرات OpenStreetMap 
q <- getbb("Hofuf") %>% opq() %>%  add_osm_feature("place", "village")

#fixing the api end point to point to the right one 
new_url <- "https://z.overpass-api.de/api/interpreter"
set_overpass_url(new_url)
get_overpass_url()
## [1] "https://z.overpass-api.de/api/interpreter"
# نتحصل على المعلومة من هنا
Hofuf_villages <- osmdata_sf(q)

لنقم بعرض جميع اسماء القرى هنا

Hofuf_villages$osm_points$name
##  [1] "القادسية"                    "القارة"                     
##  [3] "تويثير"                      "العمران"                    
##  [5] "الطريبيل"                    "المركز"                     
##  [7] "الرقيقة"                     "بني عوض"                    
##  [9] "الطرف"                       "الخرس"                      
## [11] "الكلابية"                    "الحليلة"                    
## [13] "البطالية"                    "الجفر"                      
## [15] "القرن"                       "الشعبة"                     
## [17] "الفضول"                      "جليجلة"                     
## [19] "الوزية"                      "المطيرفي"                   
## [21] "السبت"                       "القرين"                     
## [23] "الشهارين"                    "القرين"                     
## [25] "بني معن"                     "اسكان الحرس الوطني بالاحساء"
## [27] "الدالوة"                     "المنصورة"                   
## [29] "التهيمية"                    "قرية الشقيق"                
## [31] "قرية المنصورية"              "قرية المحمدية"              
## [33] "قرية الكلابية"               "قرية القارة"                
## [35] "قرية السيايرة"               "قرية الرميلة"               
## [37] "قرية الحوطة"                 "المبرز"                     
## [39] "الغويبة"                     "الطلاعية"

لنقم بتمثيلها على الخريطة

library("sf")
Hofuf_villages$osm_points %>% filter(name == unique(name)) %>% 
leaflet()   %>% addProviderTiles('Esri.WorldImagery') %>%
  addCircles() %>% addPopups(popup = ~paste0(name,"<br>",'<a href="https://ar.wikipedia.org/wiki/',name,'">مزيد من المعلومات</a>'),options = popupOptions(closeOnClick = FALSE, openOnClick = TRUE)) %>% setView(49.606208,25.403518, zoom = 12)

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

ختام

الأفق عالٍ عندما يتعلق الأمر بالخرائط. لك أن تتخيل انه لو كان ممكناً إضافة الآلاف من الأبعاد لكل نقطة على الخريطة, كأن نعرف تغيرات ذلك المكان المناخية والسكانية والعمرانية والجيولوجيا ناهيك عن الأبعاد سريعة التجدد كالمناسبات والفعاليات, لسوف تتحول الخريطة إلى كنز معلوماتي لا مناص منه. ليس لدي شك أن ذلك اليوم سيأتي قريبا. فعلاً رغم قِدم الخريطة إلا انها لا تبرح في حالة تمدد ونمو.


جرب بنفسك

كامل الكود تجده هنا

comments powered by Disqus