/
2019-02-12-geography-in-r.Rmd
169 lines (107 loc) · 11.3 KB
/
2019-02-12-geography-in-r.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
---
title: البيانات الجغرافية و ٢٣ قرية أحسائية
author: Hussain
date: '2019-06-07'
slug: geography-in-r
tags:
- جيوغرافي
---
```{r,include=FALSE,echo=FALSE,eval=FALSE,message=FALSE,warning=FALSE}
# RUN THIS CODE to ensure the article is reproducible
if("checkpoint" %in% installed.packages()['Package']){
install.packages("checkpoint")
}else{
cat("checkpoint exists - ready to create reproducible envirnoment")}
library("checkpoint")
checkpoint("2019-06-07")
```
```{r, echo= FALSE}
knitr::opts_chunk$set(warning = FALSE, message = FALSE)
```
## مقدمة
البيانات الجغرافية دائما ما تثير فضولي واهتمامي . ويبدو ان رغم محدودية الكرة الارضية الا ان البيانات الجغرافية في تمدد واتساع مستمرين. لذلك قررت في هذه التدوينة أن استطلع بعض الافكار والنظريات الخاصة بعلم الجغرافيا وما يمكن تحليله من خلال لغة R
## عالم `الفيكتور` وعالم `الراستر`
هناك طريقتين لتمثيل البيانات الجغرافية .طريقة الـ vector و طريقة الـ raster. بالنسبة إلى الـ vectors فهذه الطريقة ترى العالم كنقاط واشكال هندسية لها حدود وأماكن معروفة على وجه الارض . عادة ما يكون حجم الملفات التي تحتفظ بمعلومات العالم "الفيكتوري" ضئيل لا يكاد يذكر.
![](/images/image001.gif){.rounded .mx-auto .d-block align="center"}
اما بالنسبة إلى الـ raster فهذه الطريقة ترى العالم كالبلاط المتطابق في الحجم وكل بلاطة تحوي في جعبتها خلايا تحتفظ فيها كل خلية بمعلومات جغرافية. لعلك لاحظت عند تصفحك Google Maps ان هناك بعض المربعات يقوم المتصفح بتحميلها لعرض صور الاقمار الصناعية.
![](/images/layers.gif){.rounded .mx-auto .d-block align="center"}
طبعا لكل طريقة مزايا فطريقة الفيكتور تستخدم بشكل واسع في مجالات علوم الاجتماعيات لرصد الحدود السياسية الدولية او لتحديد الاماكن ذات الاهمية . اما طريقة الراستر فتستخدم بشكل مكثف في العلوم البيئية والطبيعية لرصد التضاريس الجغرافية غالبا ما يكون معتمدا على تقنية التحسس عن بعد بالأقمار الإصطناعية remote sensing technologies.
## مصطلحات جغرافية مستخدمة في R :
إضافة إلى تحديد نوع البيانات الجغرافية ( vector data أو raster data), هناك معلومات اخرى مهمة تحتفظ صيغ R الجغرافية بها وهي :
- **Coordinate Reference System** : واختصاره CRs وهو ما يشكل حلقة الوصل بين البيانات الجغرافية وموقعها على سطح الأرض. الـ CRs إما ان يكون Geographic او Projected.
- **Geographic** : وهو النظام الذي يحدد هوية لكل نقطة على الأرض من خلال القيم الطولية والقيم العرضية. لكي يتمكن هذا النظام من تحديد تلك القيم رياضيا, قام العلماء بتبسيط المسئلة وافتراض ان شكل الكرة الأرضية بيضاوي بحت. طبعا هذا الإفتراض ليس دقيقا بالضبط لكنه يفي بالغرض بشكل كبير جدا.
- **Projected** وهو نظام يحاول بسط الكرة الأرضية (الثلاثية الابعاد) إلى نظام ديكارتي مسطح ثنائي الأبعاد يعتمد على قيمتي x و y. هذه العملية غير ممكنة بدون تحريف القيم الجغرافية قليلاً مما ينتج عنه بعض التشوهات. على سبيل المثال, في منظور ميركيتور Mercator Projection يظهر لنا ان جرينلاند greenland (والتي لا تتجاز مساحتها اكثر من مليونين كيلومتر مربع) مساوية لمساحة القارة الافريقية بأكملها والتي تزيد مساحتها عن ثلاثين مليون كيلومتر مربع.
![](/images/greenland-distortion.png){.rounded .mx-auto .d-block align="center"}
- **Units** : وهي وحدة القياس المستخدمة. أختلاف مصادر البيانات الجغرافية يحتم علينا معرفة وحدة القياس. فكما تعلم, هناك من يستخدم الأقدام والأميال وهناك من يستخدم الأمتار والكيلو مترات.
الجدير بالإشارة هو أن جزء من نظام CRs هو تحديد المسند الجيوديسي او Geodetic Datum وهناك انواع كثيرة من المساند منها ما يعد عالميا ومنها ما يعد محليا. لعل هذا [الفيديو](https://www.ngs.noaa.gov/corbin/class_description/NGS_Datums_vid1/) يساعد على الشرح.
## حزمة sf
حزمة sf والتي هي اختصار لـ simple feature تعد من الحزم القوية جدا في التعامل مع البيانات الجيوغرافية.
حزمة sf تتبنى طريقة الفيكتور وهي حزمة انيقة بالفعل
```{r, message=FALSE}
library("sf")
library("spData") # لتحميل خريطة العالم
library("dplyr") # للتعامل مع البيانات
library("osmdata") # لتحميل خرائط openStreetMaps
```
البيانات في حزمة sf تكون بصيغة data frames مما يجعل التعامل معها أبسط وأسهل.
كل سجل بالإمكان أن يحمل معلومات جغرافية وغير جغرافية. لكن العامود الدائم في كل تلك السجلات هو geom وهو عبارة عن قائمة تحمل المعلومات الجغرافية لكل سجل
```{r}
names(world)
```
هذه الميزة في فصل البيانات الجغرافية عن غيرها تجعل العمليات الاحصائية ممكنة على المتغيرات الغير جغرافية مثل العمر الإفتراضي لسكان الدول مثلا.
```{r}
summary(world["lifeExp"])
```
هذه الميزة تجعل صنع الخرائط الجغرافية المعلوماتية عملية سهلة جدا
```{r, message=FALSE}
# عرض جميع المتغيرات
plot(world)
plot(world["pop"]) # عرض خريطة الكثافة السكانية
```
صيغة sf كـ data frame في بيئة R يجعلها جد مرنة. لأنها تمكننا من فرز البيانات الموجودة حسب قيمة معينة اوبتجميعها حسب مستوايات اعلى. هذه الميزة توفر علينا عناء تعلم طرق جديدة للتعامل مع البيانات الجغرافية و تساهم على رفع مستوى انتاجيتنا والإستفادة اكثر من مهاراتنا الحالية في التعامل مع data frames.
```{r}
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](https://www.openstreetmap.org). الجميل في الأمر انه بالإمكان الاستفادة من هذه القاعدة البياناتية الضخمة والتعامل مع بياناتها بكل يسر بإستخدام حزمة sf. يمكن زيارة الموقع وتحميل البيانات مجانا.
```{r, message=FALSE, warning=FALSE}
# هنا نقوم ببناء الإستعلام الذي سوف نرسله لسيرفرات 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)
```
```{r}
library("leaflet")
leaflet(Alhasa_str$osm_lines) %>%
addPolylines() %>% setView(49.606208,25.403518, zoom = 14)
```
## مثال : كم قرية في محافظة الأحساء وأين تقع تلك القرى؟
لإستعراض قدرة الحزمة sf سنحاول الإجابة على سؤال بسيط قد لا يمكن الإجابة عليه بسرعة بإستخدام Google Maps. السؤال هو : ما هي القرى الموجودة في الأحساء وأين تقع؟. من الأمور الجميلة هي أن هذه المعلومة متوفرة ومفتوحة المصدر ويمكن جمعها من قاعدة البيانات المفتوحة OpenStreetMap أليس ذلك رائعاً
```{r}
# هنا نقوم ببناء الإستعلام الذي سوف نرسله لسيرفرات 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()
# نتحصل على المعلومة من هنا
Hofuf_villages <- osmdata_sf(q)
```
لنقم بعرض جميع اسماء القرى هنا
```{r}
Hofuf_villages$osm_points$name
```
لنقم بتمثيلها على الخريطة
```{r, message= FALSE}
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)
```
في الكود اعلاه قمنا بتعيين اماكن القرى على الخريطة ومحاولة إثراء هذه المعلومات بروابط من الموسوعة المفتوحة ويكيبيديا. ملاحظة: ليس كل الروابط تعمل بشكل صحيح وذلك لأنني عالجت الروابط بشكل بسيط جدا.
## ختام
الأفق عالٍ عندما يتعلق الأمر بالخرائط. لك أن تتخيل انه لو كان ممكناً إضافة الآلاف من الأبعاد لكل نقطة على الخريطة, كأن نعرف تغيرات ذلك المكان المناخية والسكانية والعمرانية والجيولوجيا ناهيك عن الأبعاد سريعة التجدد كالمناسبات والفعاليات, لسوف تتحول الخريطة إلى كنز معلوماتي لا مناص منه. ليس لدي شك أن ذلك اليوم سيأتي قريبا. فعلاً رغم قِدم الخريطة إلا انها لا تبرح في حالة تمدد ونمو.