Το πακέτο της R που αναπτύχθηκε περιέχει μία σειρά εργαλείων με σκοπό την υλοποίηση δασυμετρικών χαρτών με την μέθοδο του επιμερισμού των δεδομένων στον κανονικό ETRS-LAEA κάναβο. Πληροφορίες για τον γεωγραφικό κανάβο μπορούν να βρεθούν INSPIRE Specification on Geographical Grid Systems
Το πακέτο δεν φιλοξενείται στο CRAN (θα χρειαστεί πολλή δουλειά ακόμη για αυτό) αλλά στο προσωπικό αποθετήριο του σπουδαστή στο github. Για να εγκατασταθεί το DasyMapR
θα πρέπει καταρχήν να εγκατασταθεί το πακέτο devtools
και στην συνέχεια με την χρήση της συνάρτησης install_github()
να γίνει η εγκατάσταση του πακέτου
install.packages("devtools")
library(devtools)
install_github("etsakl/DasyMapR", build_vignettes = TRUE)
library(DasyMapR)
Το πακέτο αποτελείται αποτελείται από από S4 - Classes
από τις μεθόδους τους methods
, την τεκμηρίωσή τους files.Rd
και τα δεδομένα data
που θα χρησιμοποιηθούν σε αυτό το κείμενο με την τεκμηρίωσή τους και το ίδιο το κείμενο ως vignette
που επίσης συνοδεύει το πακέτο.
library(DasyMapR)
library(knitr)
DasyMapR.contains <- sort(ls("package:DasyMapR"))
kable(as.data.frame(DasyMapR.contains))
ActuallVal2Density
candidates_addresses
candidates_addresses_el_cor
CheckEtrsResolution
CheckEtrsValidity
CLC2000.ARGOLIDA.RES
CLC2000_CODES
CLC2000_GEO_CODES
clc_v2_code_11x_el
CORINE2000_CODES
CreateEtrsVectorGrid
DASY_GPD
dasymapPlot
EAP.application.loc
EAP.application.NUTS
EAP.application.pre_err
EAP_NUTS_V9
ETRS
etrsAncillarySurface
EtrsAncillarySurface
etrsAncillarySurface.default
etrsCellCenter
EtrsCellCodes
etrsCells
EtrsCells
EtrsCheckCodeColumns
etrsDasymetric2Ancillary
etrsDasymetric2Raster
etrsDasymetric2Source
EtrsDasymetricSurface
etrsGrid
etrsGrid2Spdf
etrsGrid.default
etrsMaxArea
etrsPoint2Grid
etrsPoints
EtrsPoints
etrsPropValue
etrsPropWeightedValue
etrsReverseCellCode
etrsSourceSurface
EtrsSourceSurface
etrsSurface
EtrsSurface
etrsSurface2Spdf
etrsSurface.default
etrsSurfacePar
EtrsTableCodes
EtrsTransform
GeoPc_GR_Places_etrs_k
GeoPc_GR_Places_etrs_k_el
GeoPc_GR_Places_etrs_k_en
GEOSTAT_grid_EU_POP_2006_1k_V1_1_1 GEOSTAT_grid_POP_1K_2011_V2_0_el
joinMaxAreaSurfaceDataFrames
mosaic_100m_sealing_el
nama_10r_3gdp
nama_10r_3popgdp
NUTS_2013_01M_EL
NUTS3_OCMG
NUTSV9_LEAC
NUTSV9_LEAC_GR_1km_grided
oikismoi
oikismoi_ETRS
oria_ota_etrs
pc_el_NUTS2010
pc_el_NUTS2013
pc_regions
pntsattr2surface
raster2Ancillary
wgsTransform
Περισσότερες πληροφορίες για το πακέτο θα μπορούσε να βρει κάποιος στα file του πακέτου help("DasyMapR")
ή στο github
Το πακέτο συνοδεύεται από κάποια δεδομένα κατά κανόνα ανοικτά δημόσια δεδομένα που η προσπάθεια για να συμβάλλουμε στην αξιοποίηση τους έγινε και η αφορμή για ανάπτυξη του συγκεκριμένου πακέτου που σκοπεύει να συμβάλει στην οπτικοποίηση και ανάλυσή τους. Προφανώς για λόγους οικονομίας χρόνου μεταφόρτωσης και αποθηκευτικού χώρου τα δεδομένα αυτά είναι υποσύνολα των δεδομένων που προσφέρονται από τους οργανισμούς που τα διαθέτουν. Τεκμηρίωση και πληροφορίες υπάρχουν στα help files του πακέτου help(“DasyMapR”)` ή στο github
# Αν τρέξει ο κώδικας παρουσιάζονται τα διαθέσιμα δεδομένα
DasyMapR.data <- data(package = "DasyMapR")
print(DasyMapR.data)
Θα φορτώσουμε τα δεδομένα που μεταμορφώθηκαν από το GeoData.open.gov και θα επιλέξουμε τους νομούς της περιφέρειας Πελοποννήσου για τους δασυμετρικούς μας υπολογισμούς.
# Φόρτωσε τα δεδομένα
data("NUTS3_OCMG")
# Δίάλεξε κάποια
pp <- c("Ν. ΑΡΓΟΛΙΔΟΣ", "Ν. ΚΟΡΙΝΘΙΑΣ", "Ν. ΑΡΚΑΔΙΑΣ",
"Ν. ΜΕΣΣΗΝΙΑΣ", "Ν. ΛΑΚΩΝΙΑΣ")
Π.ΠΕΛΟΠΟΝΝΗΣΟΥ <- NUTS3_OCMG[which(!is.na(match(NUTS3_OCMG[["NAME"]],
pp))), ]
par(mar = c(0.1, 0.1, 0.1, 0.1))
# και σχεδίασε τα
plot(NUTS3_OCMG)
plot(Π.ΠΕΛΟΠΟΝΝΗΣΟΥ, border = 2, lwd = 2, add = T)
plot(Π.ΠΕΛΟΠΟΝΝΗΣΟΥ, border = 2, lwd = 2)
ας δούμε και τα περιγραφικά δεδομένα των νομών που περιέχει το αρχείο.
# Τα περιγράφικά σε πίνακα
kable(head(Π.ΠΕΛΟΠΟΝΝΗΣΟΥ@data[, 3:10]))
NAME | POP91 | EKTASH | PYKNOTHTA | pl2001 | Plwomen01 | Plman01 | metaboli | |
---|---|---|---|---|---|---|---|---|
13 | Ν. ΜΕΣΣΗΝΙΑΣ | 166964 | 2995.27 | 55.7426 | 166566 | 82556 | 84010 | -0.0023838 |
16 | Ν. ΛΑΚΩΝΙΑΣ | 95696 | 3631.73 | 26.3500 | 92811 | 45310 | 47501 | -0.0301476 |
23 | Ν. ΑΡΓΟΛΙΔΟΣ | 97636 | 2157.00 | 45.2647 | 102392 | 50308 | 52084 | 0.0487115 |
25 | Ν. ΑΡΚΑΔΙΑΣ | 105309 | 4423.48 | 23.8068 | 91326 | 43826 | 47500 | -0.1327810 |
41 | Ν. ΚΟΡΙΝΘΙΑΣ | 141823 | 2297.75 | 61.7226 | 144527 | 71771 | 72756 | 0.0190660 |
Η Νομοί έχουν ένα ποιοτικό χαρακτηριστικό αυτό της “Ονομασίας” Π.ΠΕΛΟΠΟΝΝΗΣΟΥ[["ΝΑΜΕ"]]
που τους προσδίδει την ιδιότητα του Νομού (περιοχή διοικητικής διαίρεσης). Θα ήταν χρήσιμο αυτή η ιδιότητα να αποδοθεί στα κελιά του κανάβου αφού με βάση αυτή την ιδιότητα στη συνέχεια θα μπορούσαν να του π.χ. αποδοθούν και άλλα χαρακτηριστικά που έχουν ως επιφάνεια απαρίθμησης, αυτή ακριβώς την ιδιότητα δηλαδή του νόμου. Το κελί σε αυτήν την περίπτωση των κατηγορικών δεδομένων παίρνει την τιμή της επιφάνειας που καταλαμβάνει το μεγαλύτερο μέρος του κελιού. Η μέθοδος etrsSurface
που δέχεται ορίσματα την επιφάνεια input.surface
την μέθοδο Max.Area
και το μέγεθος του κελιού cell.size
. Θα πρέπει να αναφερθεί εδώ ότι η επιφάνεια NUTS3_OCMG
είναι σε σύστημα συντεταγμένων ΕΓΣΑ87(GGRS’87 (EPSG:2100)) όμως τα αποτελέσματα δηλαδή η τελικά υπολογιζόμενη etrsSurface θα έχει πλέον σύστημα αναφοράς το ETRS-LAEA καλώντας κατά τους υπολογισμούς την DasyMapR::etsrTransform()
του πακέτου και στέλνει μήνυμα warning
ενημερώνοντας για την μετατροπή.
library(DasyMapR)
# Καλεί την EtrsTransForm
srf.grd.max <- etrsSurface(input.surface = Π.ΠΕΛΟΠΟΝΝΗΣΟΥ, over.method.type = "MaxArea",
cell.size = 10000)
plot(Π.ΠΕΛΟΠΟΝΝΗΣΟΥ)
plot(srf.grd.max)
Το αντικείμενο που δημιουργήθηκε δηλαδή srf.grd.max
είναι αντικείμενο κλάσης EtrsSurface
και τα περιγραφικά δεδομένα στο slot
(@data
) είναι σε μορφή πίνακα :
kable(head(srf.grd.max@data))
CELLCODE | EASTOFORIGIN | NORTHOFORIGIN | FEATURE | |
---|---|---|---|---|
10kmE543N158 | 10kmE543N158 | 5430000 | 1580000 | 16 |
10kmE543N159 | 10kmE543N159 | 5430000 | 1590000 | 16 |
10kmE549N159 | 10kmE549N159 | 5490000 | 1590000 | 16 |
10kmE538N160 | 10kmE538N160 | 5380000 | 1600000 | 13 |
10kmE543N160 | 10kmE543N160 | 5430000 | 1600000 | 16 |
10kmE548N160 | 10kmE548N160 | 5480000 | 1600000 | 16 |
Όπως φαίνεται στο πίνακα τα στοιχεία που περιέχονται είναι ο κωδικός $CELLCODE
του κελιού οι συντεταγμένες του κάτω άκρου του κελιού $EASTOFORIGIN,$NORTHOFORIGIN"
και ο αριθμός αναγνώρισης της επιφάνειας $FEATURE
από την οποία έχει πάρει την ιδιότητα το κελί. Ο κωδικός του κελιού που επαναλαμβάνεται στην αρχή είναι η ιδιότητα row.names()
του data.frame
@data
και χρησιμεύει ως αναγνωριστικό σύνδεσης με το γεωμετρικό μέρος του αντικείμενου. (@polygons
). Περισσότερες πληροφορίες για την δομή του αντικειμένου EtrsSurface
αλλά και του SpatialPolygonsDataFrame
παρέχονται στο κυρίως κείμενο και στα help files.
Θα ήταν χρήσιμο να συμπεριλάβει κάποιος ιδιότητες από τα περιγραφικά δεδομένα της επιφάνειας πηγής στο πίνακα δεδομένων των κελιών. H μέθοδος DasyMapR::joinMaxAreaSurfaceDataFrame
μπορεί να κληθεί και να συνενώσει τα χαρακτηριστικά που δεν έχουν συμπεριληφθεί αρχικά ως ιδιότητες της νέας επιφάνειας (του κανάβου).
srf.grd.max.full <- joinMaxAreaSurfaceDataFrames(the.surface = NUTS3_OCMG, the.EtrsSurface = srf.grd.max)
kable(head(srf.grd.max.full@data[, c(7:12)]))
NAME | POP91 | EKTASH | PYKNOTHTA | pl2001 | Plwomen01 | |
---|---|---|---|---|---|---|
10kmE538N162 | Ν. ΜΕΣΣΗΝΙΑΣ | 166964 | 2995.27 | 55.7426 | 166566 | 82556 |
10kmE538N160 | Ν. ΜΕΣΣΗΝΙΑΣ | 166964 | 2995.27 | 55.7426 | 166566 | 82556 |
10kmE538N163 | Ν. ΜΕΣΣΗΝΙΑΣ | 166964 | 2995.27 | 55.7426 | 166566 | 82556 |
10kmE539N163 | Ν. ΜΕΣΣΗΝΙΑΣ | 166964 | 2995.27 | 55.7426 | 166566 | 82556 |
10kmE536N162 | Ν. ΜΕΣΣΗΝΙΑΣ | 166964 | 2995.27 | 55.7426 | 166566 | 82556 |
10kmE537N162 | Ν. ΜΕΣΣΗΝΙΑΣ | 166964 | 2995.27 | 55.7426 | 166566 | 82556 |
Κάτι που πρέπει να επισημανθεί εδώ είναι ότι ο χρήστης πρέπει πάντα να έχει υπόψη του τι δεδομένα έχει και τι αναγωγές πρέπει να κάνει για να έχει ορθά αποτελέσματα. Για παράδειγμα στον τελευταίο πίνακα στο κελί ως τιμές του πληθυσμού εμφανίζονται οι $POP91
ή $pl2001
. Αυτό είναι λάθος διότι η τιμές αυτές αναφέρονται στις αρχικές επιφάνειες απαριθμήσεις δηλαδή στους νομούς. Ακόμη και η τιμή της πυκνότητας ανά κελί είναι εσφαλμένη αφού δεν έχουν γίνει κατάλληλες αναγωγές.
Ο χρόνος που χρειάζεται για να γίνουν οι υπολογισμοί μπορούν να μειωθεί με την χρήση της μεθόδου DasyMapR::etrsSurfacePar()
όπου γίνεται χρήση περισσοτέρων πόρων του συστήματος (επεξεργαστών και πυρήνων) με την χρήση των πακέτων foreach
και doParaller
της R. Περισσότερες πληροφορίες για αυτό μπορούν να βρεθούν στο κυρίως κείμενο.
Για την καλύτερη παρακολούθηση του παραδείγματος και κάνοντας χρίση των ίδιων δεδομένων που αντλήσαμε από το GeoData.open.gov θα κρατήσουμε μόνο τις στήλες που είναι χρήσιμες για το τρέχον παράδειγμά.
# Θα κρατήσουμε μόνο τον πλυθισμό του 2001
Π.ΠΕΛΟΠΟΝΝΗΣΟΥ.2001 <- Π.ΠΕΛΟΠΟΝΝΗΣΟΥ[, c(3, 7)]
kable(Π.ΠΕΛΟΠΟΝΝΗΣΟΥ.2001@data)
NAME | pl2001 | |
---|---|---|
13 | Ν. ΜΕΣΣΗΝΙΑΣ | 166566 |
16 | Ν. ΛΑΚΩΝΙΑΣ | 92811 |
23 | Ν. ΑΡΓΟΛΙΔΟΣ | 102392 |
25 | Ν. ΑΡΚΑΔΙΑΣ | 91326 |
41 | Ν. ΚΟΡΙΝΘΙΑΣ | 144527 |
Η τιμή στόχος που θέλουμε να επιμερίσουμε στον κάναβο είναι αυτή του πληθυσμού. Αν επιμερίσουμε αυτή την τιμή του χαρακτηριστικού pl$2001
θα αποδώσουμε στο κελί λανθασμένη τιμή (όπως προαναφέρθηκε) . Θα πρέπει να μετατραπεί από απόλυτη τιμή σε πυκνότητα πληθυσμού. Στο πακέτο έχει αναπτυχθεί η μέθοδος ():DasyMapR::ActullVal2Density()
που θα κάνει την μετατροπή
Π.ΠΕΛΟΠΟΝΝΗΣΟΥ.2001 <- ActuallVal2Density(input.surface = Π.ΠΕΛΟΠΟΝΝΗΣΟΥ.2001,
surface.value.col = 2, area.unit = 1e+06)
kable(Π.ΠΕΛΟΠΟΝΝΗΣΟΥ.2001@data)
NAME | pl2001 | AREA | VALUE | |
---|---|---|---|---|
13 | Ν. ΜΕΣΣΗΝΙΑΣ | 166566 | 2995.265 | 55.6098 |
16 | Ν. ΛΑΚΩΝΙΑΣ | 92811 | 3631.734 | 25.5556 |
23 | Ν. ΑΡΓΟΛΙΔΟΣ | 102392 | 2157.004 | 47.4696 |
25 | Ν. ΑΡΚΑΔΙΑΣ | 91326 | 4423.483 | 20.6457 |
41 | Ν. ΚΟΡΙΝΘΙΑΣ | 144527 | 2297.754 | 62.8993 |
Η τιμή $VALUE
πλέον αναφέρεται σε κατοίκους/km2 και εκφράζει πυκνότητα. Το @data$VALUE
(slot) πλέον περιέχει και την τιμή του εμβαδού σε km2.
Θα επιμερίσουμε την τιμή με την χρήση της μεθόδου etrsSourceSurface()
για την τιμή (VALUE
) της πυκνότητας Η μέθοδος που είναι καταλληλότερη για τον υπολογισμό της τιμής του κελιού μετά την προβολή της επιφάνειας θα είναι αυτή του αναλογικού υπολογισμού σε σχέση με την επιφάνεια \(CELLVALUE = (V~i~ ∗ Share~i~)\) όπου Vi, η τιμή της επιφάνειας και Sharei, το μερίδιο της επιφάνειας i μέσα στο κελί
srf.grd.prop <- etrsSourceSurface(input.surface = Π.ΠΕΛΟΠΟΝΝΗΣΟΥ.2001,
over.method.type = "PropCal", surface.value.col = 4, cell.size = 10000)
par(mar = c(0.1, 0.1, 0.1, 0.1))
plot(Π.ΠΕΛΟΠΟΝΝΗΣΟΥ)
plot(srf.grd.prop)
Το αντικείμενο που δημιουργήθηκε είναι αντικείμενο της κλάσης EtrsSourceSurface
και ο πίνακας που είναι συσχετισμένος με την επιφάνεια περιεχέι τα χαρακτηριστικά
kable(head(srf.grd.prop@data))
CELLCODE | EASTOFORIGIN | NORTHOFORIGIN | CELLVALUE | |
---|---|---|---|---|
10kmE543N157 | 10kmE543N157 | 5430000 | 1570000 | 0.7308902 |
10kmE544N157 | 10kmE544N157 | 5440000 | 1570000 | 5.8726769 |
10kmE543N158 | 10kmE543N158 | 5430000 | 1580000 | 18.1751427 |
10kmE544N158 | 10kmE544N158 | 5440000 | 1580000 | 10.2094622 |
10kmE548N158 | 10kmE548N158 | 5480000 | 1580000 | 3.1382277 |
10kmE549N158 | 10kmE549N158 | 5490000 | 1580000 | 3.0538942 |
Λεπτομέρειες για τον υπολογισμό της $CELLVALUE
μπορεί κάποιος να βρει αν φορτώσει το προσωρινό αρχείο με όνομα “.surface.detailed.table.rds” που αποθηκεύετε στο working directory. Για το παράδειγμα της συγκεκριμένης εργασίας φορτώνουμε το εν λόγω αρχείο (.rds) και εμφανίζουμε ορισμένες γραμμές του.Σε αυτές εμφανίζονται οι τιμές για τμήμα του κελιού πριν την άθροιση και τον τελικό υπολογισμό (για αυτό και εμφανίζονται row.names(srf.grd.prop@data)
με την προσθήκη αριθμού ώστε να είναι μοναδικός ο κωδικός αριθμός ID
.
wd <- getwd()
setwd(wd)
surface.detailed.table <- readRDS(".surface.detailed.table.rds")
kable(head(surface.detailed.table, 5))
Row.names | CELLCODE | FEATURE | AREA | CELLSHARE | SURVALUE | CELLVALUE | SUMsΗAREi*Vi |
---|---|---|---|---|---|---|---|
10kmE535N162 | 10kmE535N162 | 13 | 4397492.7219 | 0.044 | 55.6098 | 2.4468312 | 2.4468312 |
10kmE535N163 | 10kmE535N163 | 13 | 56497430.9614 | 0.565 | 55.6098 | 31.419537 | 31.4195370 |
10kmE535N164 | 10kmE535N164 | 13 | 70146605.3695 | 0.7015 | 55.6098 | 39.0102747 | 39.0102747 |
10kmE535N165 | 10kmE535N165 | 13 | 12837374.7196 | 0.1284 | 55.6098 | 7.14029832 | 7.1402983 |
10kmE535N166 | 10kmE535N166 | 13 | 1388355.6794 | 0.0139 | 55.6098 | 0.77297622 | 0.7729762 |
Για πολλά δεδομένα προτείνεται να γίνει χρήση των προσφερόμενων parallel computing
μεθόδων
Ίσως να μην έχει γίνει κατανοητό πως οι διαφορετικές μέθοδοι επηρεάζουν την γεωγραφική απεικόνιση της επιφάνειας πηγής για αυτό στο επόμενο σχήμα απεικονίζονται οι δύο περιπτώσεις εφαρμογής των δύο μεθόδων.
# Η κλήση της EtrsTrasnform για αλλαγη του CRS
Π.ΠΕΛΟΠΟΝΝΗΣΟΥ.ETRS <- EtrsTransform(Π.ΠΕΛΟΠΟΝΝΗΣΟΥ)
par(mar = c(0.1, 0.1, 0.1, 0.1))
plot(Π.ΠΕΛΟΠΟΝΝΗΣΟΥ.ETRS, border = 2, lwd = 2)
plot(srf.grd.max, col = rgb(0, 1, 0, 0.1), add = TRUE)
plot(Π.ΠΕΛΟΠΟΝΝΗΣΟΥ.ETRS, border = 2, lwd = 2)
plot(srf.grd.prop, col = rgb(0, 1, 0, 0.1), add = TRUE)
Στην πρώτη περίπτωση η επιφάνεια μπορεί να μην καλύπτεται ή υπερκαλύπτεται ενώ στην δεύτερη πάντα υπερκαλύπτεται. Είναι διακριτό ότι η μέθοδος που επιλέγεται είναι σημαντική για την απόκρυψη ή μη πληροφορίας και την παραγωγή σφαλμάτων (στην πρώτη εικόνα τμήματα ξηράς εξαιρούνται από την ανάλυση μας στην δεύτερη τμήματα της λογίζονται πλέον ως ξηρά). Περισσότερα σχετικά με τα σφάλματα της μεθόδου μπορεί να αναζητηθούν εδω Για να είναι “ρεαλιστικότερο” το παράδειγμα μας θα αλλάξουμε επίπεδο αναφοράς και από το επίπεδο της περιφέρειας θα περάσουμε στο επίπεδο της περιφερειακής ενότητας (νομού ή NUTS3) και της ανάλυσης από τον κάναβο του 10km στον κάναβο 1km. Επιλέγεται εδώ ο νόμος Αργολίδας
par(mar = c(0.1, 0.1, 0.1, 0.1))
ΑΡΓΟΛΙΔΑ <- NUTS3_OCMG[which(!is.na(match(NUTS3_OCMG[["NAME"]], "Ν. ΑΡΓΟΛΙΔΟΣ"))),
]
plot(Π.ΠΕΛΟΠΟΝΝΗΣΟΥ)
plot(ΑΡΓΟΛΙΔΑ, add = TRUE, lwd = 2, border = 2)
# Εδώ καλείται η EtrsTransform απευθείας
ΑΡΓΟΛΙΔΑ.ETRS <- EtrsTransform(ΑΡΓΟΛΙΔΑ)
# Με την κλήση της etrsSourceSurface παράγεται η επιφανεια πηγή
source.surface <- etrsSourceSurface(input.surface = Π.ΠΕΛΟΠΟΝΝΗΣΟΥ.2001[3,
], over.method.type = "PropCal", surface.value.col = 4, cell.size = 1000)
plot(source.surface, col = rgb(0, 1, 0, 0.01), lwd = 0.5, border = "lightgrey")
plot(ΑΡΓΟΛΙΔΑ.ETRS, add = TRUE, lwd = 2, border = 2)
Θα γίνει χρήση των δεδομένων CORINE 2000 δηλαδή των δεδομένων κάλυψη γης για την Ελλάδα και το έτος 2000, όπως διατίθενται από Ευρωπαϊκή Υπηρεσία Περιβάλλοντος . Τα δεδομένα αυτά μπορούν να μεταμορφωθούν από τον ισότοπο της ΕΕΑ και επιλέχθηκαν ως κατάλληλα από την άποψη της χρονικής κατανομής σε σχέση με το φαινόμενο (πληθυσμό 2001) που θέλουμε να ανακατανείμουμε. Για την προετοιμασία της επιφάνειας επίσης θα γίνει η χρήση της etrsAncillarySurface
. Εδώ κρίνεται σκόπιμο να γίνουν ορισμένες επισημάνσεις στο χρήστη του πακέτου. Παρόλο που οι τρεις μέθοδοι δημιουργίας των επιφανειών etrsSurface
, etsrSourceSurface
, etrsAncillarySurface
επί της ουσίας κάνουν ακριβώς τους ίδιους υπολογισμούς, και οι κλάσεις περιέχουν τα ίδια @slots
και θα μπορούσε ο χρήστης να αποφασίζει για την “ορθή” χρήση τους η επιλογή αυτή έγινε για να καθοδηγήσει τον χρήστη για το πώς θα πρέπει να ενεργήσει. Θα γίνουμε πιο συγκεκριμένη στην πορεία ολοκλήρωσης του τρέχοντος παραδείγματος.
Εδώ ο χρήστης θα πρέπει να κάνει τις επιλογές που στηρίζονται στην εμπιρεία του η/και την γνώση του για το θέμα (Ως εκ τούτου η μέθοδος συχνά αναφέρεται ως Intelligent Dasymetric Maping. Ας δούμε τις κατηγορίες καλύψεων που περιέχονται στην Corine DB:
data("CLC2000_CODES")
kable(head(CLC2000_CODES))
Code_00 | DESCRIPTION |
---|---|
111 | Συνεχής αστική οικοδόμηση |
112 | Διακεκομμένη αστική οικοδόμηση |
121 | Βιομηχανικές ή εμπορικές ζώνες |
122 | Οδικά σιδηροδρομικά δίκτυα και γειτνιάζουσα γη |
123 | Ζώνες λιμένων |
124 | Αεροδρόμια |
… |
Είναι προφανές ότι για το παράδειγμα, ενδιαφέρουν μόνο οι δύο κατηγορίες 111 και 112 που σχετίζονται με την κατοικία. Αυτές θα μεταφορτώνουν από την ΕΕΑ αφού διατίθενται για μεταφόρτωση σε αρχεία .shp κατα τις προαναφερόμενες κατηγόρίες.
Με τον παρακάτω κώδικα θα μπορούσε κάποιος να δημιουργησει αν dataset με κάλυψη για όποια κατηγορία ή έτος απαιτείται για την ανάλυσή του. Παρατίθεται εδώ για να αποτελέσει οδηγό σε ενδεχομένη προετοιμασία άλλων δεδομένων από τον χρήστη.
# Τα δύο .shp files περιέχονται στο folder corine
system.file("extdata", "clc00_v2_code_111", package = "DasyMapR")
system.file("extdata", "clc00_v2_code_112", package = "DasyMapR")
# Με βάση τα όρια της περιοχής ...
bb <- bbox(ΑΡΓΟΛΙΔΑ.ETRS)
# διμιουργησε νέα .shp files που περιέχουν όσα δεδομένα χρειάζομαι
ogr2ogr(".", "clc_cliped", spat = c(bb[, 1], bb[, 2]))
dsn <- setwd("clc_cliped/")
# φόρτωσε τα ως SpatialPolygonsDataFrames
CLC2000_POLY_ARGOLIDA111 <- readOGR(".", "clc00_v2_code_111")
CLC2000_POLY_ARGOLIDA112 <- readOGR(".", "clc00_v2_code_112")
# και ένωσε τα
CLC2000.ARGOLIDA.RES <- rbind.SpatialPolygonsDataFrame(CLC2000_POLY_ARGOLIDA111,
CLC2000_POLY_ARGOLIDA112, makeUniqueIDs = T)
# τέλος σώστα στο δίσκο ως dataset
setwd(system.file("data", package = "DasyMapR"))
# Αφαιρέθηκαν 2 πολύγωνα με πρόβλημα στην γεωμετρία
CLC2000.ARGOLIDA.RES <- CLC2000.ARGOLIDA.RES[-which(row.names(CLC2000.ARGOLIDA.RES) ==
8), ]
CLC2000.ARGOLIDA.RES <- CLC2000.ARGOLIDA.RES[-which(row.names(CLC2000.ARGOLIDA.RES) %in%
"01"), ]
devtools::use_data(CLC2000.ARGOLIDA.RES, overwrite = T)
Στο πακέτο DasyMapR
υπάρχουν ήδη τα δεδομένα αυτά στο φάκελο .\data
ως datasets
που το συνοδεύουν.
# Φορτώνουμε τα δεδομένα
data("CLC2000.ARGOLIDA.RES")
# Τι Περιέχει το σετ;
kable(head(CLC2000.ARGOLIDA.RES@data, 3))
code_00 | |
---|---|
0 | 111 |
1 | 112 |
2 | 112 |
Και σε πιο άνθρωπο-φιλική μορφή
ΠΕΡΙΟΧΕΣ.ΚΑΤΟΙΚΙΑΣ <- merge(x = CLC2000.ARGOLIDA.RES, y = CLC2000_CODES,
by.x = "code_00", by.y = "Code_00")
kable(head(ΠΕΡΙΟΧΕΣ.ΚΑΤΟΙΚΙΑΣ@data, 3))
code_00 | DESCRIPTION |
---|---|
111 | Συνεχής αστική οικοδόμηση |
112 | Διακεκομμένη αστική οικοδόμηση |
112 | Διακεκομμένη αστική οικοδόμηση |
Θα θεωρήσουμε ότι ο λόγος της πυκνότητας \(111 : 112 = 3 : 1\). δηλαδή ότι στις περιοχές με πυκνό αστικό ιστό ζουν 3 φορές περισσότερου άνθρωποι ανά μονάδα επιφανείας από ότι στις αραιά δομημένες περιοχές.
par(mar = c(0.1, 0.1, 0.1, 0.1))
ReDens111 <- round(3/4, 2)
ReDens112 <- round(1/4, 2)
ΠΕΡΙΟΧΕΣ.ΚΑΤΟΙΚΙΑΣ@data[which(ΠΕΡΙΟΧΕΣ.ΚΑΤΟΙΚΙΑΣ@data[,
"code_00"] == 111), "ReDens"] <- ReDens111
ΠΕΡΙΟΧΕΣ.ΚΑΤΟΙΚΙΑΣ@data[which(ΠΕΡΙΟΧΕΣ.ΚΑΤΟΙΚΙΑΣ@data[,
"code_00"] == 112), "ReDens"] <- ReDens112
kable(head(ΠΕΡΙΟΧΕΣ.ΚΑΤΟΙΚΙΑΣ@data))
code_00 | DESCRIPTION | ReDens |
---|---|---|
111 | Συνεχής αστική οικοδόμηση | 0.75 |
112 | Διακεκομμένη αστική οικοδόμηση | 0.25 |
112 | Διακεκομμένη αστική οικοδόμηση | 0.25 |
112 | Διακεκομμένη αστική οικοδόμηση | 0.25 |
112 | Διακεκομμένη αστική οικοδόμηση | 0.25 |
112 | Διακεκομμένη αστική οικοδόμηση | 0.25 |
plot(ΑΡΓΟΛΙΔΑ.ETRS, lwd = 2, border = 2)
plot(ΠΕΡΙΟΧΕΣ.ΚΑΤΟΙΚΙΑΣ, col = "purple", add = TRUE)
data("NUTSV9_LEAC")
plot(NUTSV9_LEAC, add = TRUE, border = "lightgrey")
Καλώντας την etrsAncillarySurface
θα υπολογίσουμε την “σχετική πυκνότητα” του κάθε κελιού πλέον με βάση τις παραδοχές που έγιναν: Όλος ο πλυθησμός της Αργολίδας το έτος 2001 κατοικουσε σις περιοχές με συνεχή και διακεκκομενη αστική δόμηση και με σχετική πυκνότητα μάλιστα 1:3. Θα μπορούσαμε να συμπεριλάβουμε και άλλες περιοχές και να του αποδώσουμε κάποιο ποσοστό. (π.χ αγροτικές περιοχές 5 %)
par(mar = c(0.1, 0.1, 0.1, 0.1))
data("NUTSV9_LEAC")
the.ancillary.surface.bf <- etrsAncillarySurface(input.surface = ΠΕΡΙΟΧΕΣ.ΚΑΤΟΙΚΙΑΣ,
over.method.type = "PropCal", surface.value.col = 3, cell.size = 1000, binary = FALSE)
plot(the.ancillary.surface.bf, col = "purple")
plot(ΑΡΓΟΛΙΔΑ.ETRS, add = TRUE, lwd = 2, border = 2)
plot(NUTSV9_LEAC, add = TRUE, border = "lightgrey")
kable(head(the.ancillary.surface.bf@data))
CELLCODE | EASTOFORIGIN | NORTHOFORIGIN | WCELLWEIGHT | |
---|---|---|---|---|
1kmE5453N1679 | 1kmE5453N1679 | 5453000 | 1679000 | 0.002125 |
1kmE5454N1679 | 1kmE5454N1679 | 5454000 | 1679000 | 0.011550 |
1kmE5455N1679 | 1kmE5455N1679 | 5455000 | 1679000 | 0.006825 |
1kmE5453N1680 | 1kmE5453N1680 | 5453000 | 1680000 | 0.061250 |
1kmE5454N1680 | 1kmE5454N1680 | 5454000 | 1680000 | 0.073950 |
1kmE5455N1680 | 1kmE5455N1680 | 5455000 | 1680000 | 0.130800 |
surface.detailed.table.bf <- readRDS(".surface.detailed.table.rds")
Θα επαναλάβουμε του ίδιους υπολογισμούς θέτοντας την παράμετρο binary = TRUE
η οποία δίνει διαφοροποιημένα αποτελέσματα. Για να έχουμε αποτελέσματα θα πρέπει να θέσουμε την σχετική πυκνότητα σε 1. Στην ουσία λειτουργεί σαν την εφαρμογή της MaxArea στον υπολογισμό της βοηθητικής επιφάνειας. Πρακτικά σε φυσικούς όρους σημαίνει αν ένα κελί έχει την ιδιότητα να φιλοξενεί πληθυσμό με τιμή μεγαλύτερη από 50% Στην απεικόνιση που ακολουθεί μόνο τα κελιά με μοβ χρώμα έχουν τιμή για την $WCELLWEGHT
par(mar = c(0.1, 0.1, 0.1, 0.1))
ΠΕΡΙΟΧΕΣ.ΚΑΤΟΙΚΙΑΣ@data[which(ΠΕΡΙΟΧΕΣ.ΚΑΤΟΙΚΙΑΣ@data[,
"code_00"] == c(111, 112)), "ReDens"] <- 1
the.ancillary.surface.bt <- etrsAncillarySurface(input.surface = ΠΕΡΙΟΧΕΣ.ΚΑΤΟΙΚΙΑΣ,
over.method.type = "PropCal", surface.value.col = 3, cell.size = 1000, binary = TRUE)
plot(the.ancillary.surface.bt, col = "purple4")
plot(the.ancillary.surface.bt[which(the.ancillary.surface.bt[["WCELLWEIGHT"]] ==
0), ], col = "lightgrey", add = T)
plot(ΑΡΓΟΛΙΔΑ.ETRS, add = TRUE, lwd = 2, border = 2)
plot(NUTSV9_LEAC, add = TRUE, border = "lightgrey")
kable(head(the.ancillary.surface.bt@data))
CELLCODE | EASTOFORIGIN | NORTHOFORIGIN | WCELLWEIGHT | |
---|---|---|---|---|
1kmE5453N1679 | 1kmE5453N1679 | 5453000 | 1679000 | 0 |
1kmE5454N1679 | 1kmE5454N1679 | 5454000 | 1679000 | 0 |
1kmE5455N1679 | 1kmE5455N1679 | 5455000 | 1679000 | 0 |
1kmE5453N1680 | 1kmE5453N1680 | 5453000 | 1680000 | 0 |
1kmE5454N1680 | 1kmE5454N1680 | 5454000 | 1680000 | 0 |
1kmE5455N1680 | 1kmE5455N1680 | 5455000 | 1680000 | 0 |
surface.detailed.table.bt <- readRDS(".surface.detailed.table.rds")
Ας δούμε και τα αποτελέσματά του πίνακα καθώς και του προσωρινού αρχείου για τον έλεγχο τον υπολογισμών
wd <- getwd()
setwd(wd)
kable(head(surface.detailed.table.bf))
Row.names | CELLCODE | FEATURE | AREA | CELLSHARE | SURVALUE | CELLVALUE | SUMsΗAREi*Vi |
---|---|---|---|---|---|---|---|
1kmE5413N1703 | 1kmE5413N1703 | 25 | 308220.7152 | 0.3082 | 0.25 | 0.07705 | 0.07705 |
1kmE5413N1721 | 1kmE5413N1721 | 50 | 20.2178 | 0 | 0.25 | 0 | 0.00000 |
1kmE5414N1703 | 1kmE5414N1703 | 25 | 200020.0517 | 0.2 | 0.25 | 0.05 | 0.05000 |
1kmE5414N1720 | 1kmE5414N1720 | 50 | 18780.6291 | 0.0188 | 0.25 | 0.0047 | 0.00470 |
1kmE5414N1721 | 1kmE5414N1721 | 50 | 456643.8894 | 0.4566 | 0.25 | 0.11415 | 0.11415 |
1kmE5415N1710 | 1kmE5415N1710 | 34 | 215448.6451 | 0.2154 | 0.25 | 0.05385 | 0.05385 |
Είναι κατανοητό ότι και εδώ τα ζητήματα της κλίμακας του φαινομένου (κάλυψη) και της ανάλυσης (μέγεθος κελιού 1km) είναι σημαντικό να λαμβάνονται υπόψη από τον χρήστη για την παραγωγή αποτελεσμάτων αξιοποιήσιμων και “ρεαλιστικών” ώστε να διατηρείται η πληροφορία και να μην παράγεται νέα αλλά ψευδής. Για την συνέχεια του παραδείγματος θα επιλέξουμε την κατανομή που προέκυψε από την εφαρμογή της etrsAncillarySurface(...,"PropCAl",...)
δηλαδή την the.ancillary.surface.bf
H μέθοδος για την εφαρμογή των δασυμετρικών υπολογισμών που θα κλιθεί είναι etsrDasymetricSurface
και δέχεται ως ορίσματα μία επιφάνεια πηγή κλάσης EtrsSourceSurface
την βοηθητική επιφάνεια κλάσης EtrsAncillarySurface
και μία μεταβλητή logical actuall.value
όπου εάν δοθεί η τιμή TRUE θα εφαρμοστεί η ActuallVal2Density()
που η χρήση της εξηγήθηκε παραπάνω
par(mar = c(0.1, 0.1, 0.1, 0.1))
dasymetric.surface <- EtrsDasymetricSurface(input.surface.grided = source.surface,
ancillary.grided = the.ancillary.surface.bf, actuall.value = FALSE)
## ~~~ ETRS validity ~~~
plot(dasymetric.surface)
plot(ΑΡΓΟΛΙΔΑ.ETRS, add = T, border = "red", lwd = 2)
kable(head(dasymetric.surface@data))
CELLCODE | EASTOFORIGIN | NORTHOFORIGIN | CELLVALUE | WCELLWEIGHT | DASYCELL | |
---|---|---|---|---|---|---|
94 | 1kmE5488N1683 | 5488000 | 1683000 | 26.65893 | 0.047100 | 739.05977 |
100 | 1kmE5489N1683 | 5489000 | 1683000 | 21.69835 | 0.006700 | 85.56922 |
106 | 1kmE5490N1683 | 5490000 | 1683000 | 47.46960 | 0.013925 | 389.06912 |
95 | 1kmE5488N1684 | 5488000 | 1684000 | 47.46960 | 0.042250 | 1180.47901 |
101 | 1kmE5489N1684 | 5489000 | 1684000 | 47.46960 | 0.070725 | 1976.07995 |
107 | 1kmE5490N1684 | 5490000 | 1684000 | 47.46960 | 0.015050 | 420.50199 |
Το παράδειγμα που χρησιμοποιήθηκε όπως υπονοήθηκε δεν είναι αρκετά ακριβές αφού δεν χορηγήσαμε επαρκή στοιχεία τόσο για την κατανομή του πληθυσμού όσο και λόγω της μικρής κλίμακας των δεδομένων της κάλυψης. Θα μπορούσαμε να χρησιμοποιήσουμε δεδομένα από τις UMZ200
Ειδικά για το πληθυσμό προσφέρονται δεδομένα για το πληθυσμό στον ETRS-LAEA κάναβο για τα έτη 2006 2011 που έχουν προκύψει από την εφαρμογή πιο περίπλοκων αλγορίθμων μπορούν να στο ESPOn.
data("GEOSTAT_grid_EU_POP_2006_1k_V1_1_1")
kable(head(GEOSTAT_grid_EU_POP_2006_1k_V1_1_1))
GRD_ID | POP_TOT | YEAR | METHD_CL | CNTR_CODE | DATA_SRC |
---|---|---|---|---|---|
1kmN5142E2862 | 2 | 2006 | D | IS | AIT |
1kmN5141E2862 | 13 | 2006 | D | IS | AIT |
1kmN5141E2864 | 211 | 2006 | D | IS | AIT |
1kmN5140E2862 | 1 | 2006 | D | IS | AIT |
1kmN5139E2876 | 33 | 2006 | D | IS | AIT |
1kmN5138E2849 | 1 | 2006 | D | IS | AIT |
GR_POP_2006 <- GEOSTAT_grid_EU_POP_2006_1k_V1_1_1[which(GEOSTAT_grid_EU_POP_2006_1k_V1_1_1[,
"CNTR_CODE"] %in% "EL"), ]
Μία πιο προσεκτική ματιά σε αυτά τα δεδομένα δείχνει δεν ακολουθούν την προτεινόμενη κωδικοποίηση των κελιών της INSPIRE Specification on Geographical Grid Systems Για να τέτοια προβλήματα αναπτύχθηκε η μέθοδος etrsReverseCellCode
.
GR_POP_2006 <- as.data.frame(GR_POP_2006)
GR_POP_2006 <- etrsReverseCellCode(df = GR_POP_2006, cell.code.col = 1)
kable(head(GR_POP_2006))
GRD_ID | POP_TOT | YEAR | METHD_CL | CNTR_CODE | DATA_SRC | CELLCODE | |
---|---|---|---|---|---|---|---|
1kmE5663N2213 | 1kmN2213E5663 | 304 | 2006 | D | EL | AIT | 1kmE5663N2213 |
1kmE5671N2213 | 1kmN2213E5671 | 155 | 2006 | D | EL | AIT | 1kmE5671N2213 |
1kmE5666N2212 | 1kmN2212E5666 | 578 | 2006 | D | EL | AIT | 1kmE5666N2212 |
1kmE5685N2212 | 1kmN2212E5685 | 89 | 2006 | D | EL | AIT | 1kmE5685N2212 |
1kmE5687N2211 | 1kmN2211E5687 | 4 | 2006 | D | EL | AIT | 1kmE5687N2211 |
1kmE5686N2210 | 1kmN2210E5686 | 611 | 2006 | D | EL | AIT | 1kmE5686N2210 |
Και για να απεικονισθούν τα δεδομένα μας στη μορφή του κανάβου μπορούμε να καλέσουμε την EtrsGrid
και στην συνέχεια θα συγχωνεύσουμε τα πολύγωνα με τις εγγραφές στο data frame με του κωδικούς των κελλιών (row.names,"ID"
(),ID).
par(mar = c(0.1, 0.1, 0.1, 0.1))
GR251 <- NUTSV9_LEAC[which(!is.na(match(NUTSV9_LEAC[["N3CD"]], "GR251"))), ]
GR251 <- EtrsTransform(GR251)
GR251.grd <- etrsGrid(GR251, cell.size = 1000)
GR251.grd <- merge(GR251.grd, GR_POP_2006, by = 0, all = F)
plot(GR251.grd)
plot(ΑΡΓΟΛΙΔΑ.ETRS, add = TRUE, border = 2, lwd = 3)
Όπως αναφέρθηκε τα διοικητικά όρια συχνά αλλάζουν τέτοιο παράδειγμα είναι η περίπτωση του Ευρωπαϊκού χώρου όπου το ιστορικό των αλλαγων συχνά δυσκολεύει την χρήση και σύγκριση των διαθέσιμων δεδομένων. Τα γεωγραφικά όρια μπορούν να μεταμορφωθούν από το της EUROSTAT Ας δούμε κατ’ αρχήν τις αλλαγές των ορίων στην υπό μελέτη περιοχή την Αργολίδα :
Φορτώνουμε τα δεδομένα και τα :
par(mar = c(0.1, 0.1, 0.1, 0.1))
# Όρια NUTS 2006
GR25 <- NUTSV9_LEAC[which(!is.na(match(NUTSV9_LEAC[["N2CD"]], "GR25"))), ]
kable(head(GR25@data))
NUTS3ID | NUFTTP | N0CD | N1CD | N2CD | N3CD | N0NME | N0NM | N1NM | N2NM | N3NM | N2_3CD | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
1312 | 1413 | M | GR | GR2 | GR25 | GR253 | GR GREECE | GR ELLADA | GR2 KENTRIKI ELLADA | GR25 Peloponnisos | GR253 Korinthia | GR25 |
1319 | 1422 | M | GR | GR2 | GR25 | GR252 | GR GREECE | GR ELLADA | GR2 KENTRIKI ELLADA | GR25 Peloponnisos | GR252 Arkadia | GR25 |
1327 | 1438 | M | GR | GR2 | GR25 | GR251 | GR GREECE | GR ELLADA | GR2 KENTRIKI ELLADA | GR25 Peloponnisos | GR251 Argolida | GR25 |
1329 | 1442 | M | GR | GR2 | GR25 | GR254 | GR GREECE | GR ELLADA | GR2 KENTRIKI ELLADA | GR25 Peloponnisos | GR254 Lakonia | GR25 |
1334 | 1451 | M | GR | GR2 | GR25 | GR255 | GR GREECE | GR ELLADA | GR2 KENTRIKI ELLADA | GR25 Peloponnisos | GR255 Messinia | GR25 |
# Νέα όρια NUTS 2013
data("NUTS_2013_01M_EL")
kable(head(NUTS_2013_01M_EL@data))
NUTS_ID | STAT_LEVL_ | SHAPE_AREA | SHAPE_LEN | |
---|---|---|---|---|
667 | EL522 | 3 | 0.3924027 | 4.937318 |
668 | EL523 | 3 | 0.2700854 | 3.152490 |
669 | EL524 | 3 | 0.2679729 | 3.318840 |
670 | EL525 | 3 | 0.1616531 | 2.621749 |
671 | EL631 | 3 | 0.5604019 | 6.666641 |
672 | EL632 | 3 | 0.3360470 | 3.150293 |
NUTS_2013_01M_65 <- EtrsTransform(NUTS_2013_01M_EL[grep("^EL65", NUTS_2013_01M_EL[["NUTS_ID"]]),
])
plot(NUTS_2013_01M_65)
plot(GR25)
Για όποιον ενδιαφέρεται για δεδομένα κοινωνικό-οικονομικά, περιβαλλοντικά κ.λ.π. ήδη γνωρίζει ότι μια σημαντική πηγή στοιχείων είναι EurostatDatabase Με την χρήση του package eurostat
μπορούμε να συνεχίσουμε την ανάλυση μας και να απεικονίσουμε κοινωνικό - οικονομικά δεδομένα στον κάναβο. Π.Χ. μπορούμε να κατεβάσουμε δεδομένα για το ακαθάριστο εθνικό προϊόν ανά κάτοικο και να τα προβάλουμε στο κελί επιμερίζοντας τα με βάση τον αριθμό κατοίκων ανά κελί από τα προηγούμενα βήματα.
Ας αναζητήσουμε κάποια στοιχεία από την Eurostat. Θα κάνουμε την αναζήτηση με βάση τo γεωγραφικό επίπεδο αναφοράς (NUTS3)
info <- search_eurostat("NUTS 3")
kable(info[c(23:30), c(1, 2)])
title | code | |
---|---|---|
215 | Private households by composition, age group of children and NUTS 3 regions | cens_01rhagchi |
217 | Dwellings by type of housing, building and NUTS 3 regions | cens_01rdhh |
218 | Persons by type of building and NUTS 3 regions | cens_01rdbuild |
222 | Average annual population to calculate regional GDP data (thousand persons) by NUTS 3 regions | nama_10r_3popgdp |
223 | Gross domestic product (GDP) at current market prices by NUTS 3 regions | nama_10r_3gdp |
226 | Gross value added at basic prices by NUTS 3 regions | nama_10r_3gva |
229 | Employment (thousand persons) by NUTS 3 regions | nama_10r_3empers |
238 | Gross domestic product (GDP) at current market prices by NUTS 3 regions | nama_r_e3gdp |
επιλέγονται δεδομένα για το ακαθάριστο εθνικό προϊόν του 2001 (Gross domestic product (GDP) at current market prices by NUTS 3 regions) και εiδικότερα για την περιοχή ενδιαφέροντος. H Επόμενη γραμμή χρειάζεται σύνδεση και δεν θα τρέξει αν δεν υπάρχει οπότε στο παράδειγμά μας
# nama_10r_3gdp <- get_eurostat(id = 'nama_10r_3gdp' ,filters =
# list(time=2006),time_format = 'num')
Τα δεδομένα αυτά έχουν ήδη και περιέχονται στο πακέτο. Έτσι ι τα φορτώνονται από το /data με την χρήση data()
data("nama_10r_3gdp")
dat <- nama_10r_3gdp
α περιορίσουμε την εργασία εδώ για λόγους οικονομίας στον νομό Αργολίδας (και “αναγκαστικά” και Αργολίδας)
GDP651_2006 <- dat[grep("^EL651", dat$geo), ]
kable(label_eurostat(GDP651_2006))
unit | geo | time | values | |
---|---|---|---|---|
723 | Euro per inhabitant | Argolida, Arkadia | 2001 | 12800 |
2553 | Euro per inhabitant in percentage of the EU average | Argolida, Arkadia | 2001 | 63 |
4383 | Million euro | Argolida, Arkadia | 2001 | 2426 |
6213 | Million PPS (purchasing power standard) | Argolida, Arkadia | 2001 | 3103 |
8043 | Purchasing Power Standard per inhabitant | Argolida, Arkadia | 2001 | 16300 |
9873 | Purchasing Power Standards per inhabitant in percentage of the EU average | Argolida, Arkadia | 2001 | 80 |
Για να γίνει γεωναφορά των δεδομένων αυτών θα χρησιμοποιήσουμε τα όρια όπως αυτά παρέχονται EUROSTAT.
par(mar = c(0.1, 0.1, 0.1, 0.1))
NUTS_2013_01M_651 <- EtrsTransform(NUTS_2013_01M_EL[grep("^EL651", NUTS_2013_01M_EL[["NUTS_ID"]]),
])
kable(NUTS_2013_01M_651@data)
NUTS_ID | STAT_LEVL_ | SHAPE_AREA | SHAPE_LEN | |
---|---|---|---|---|
673 | EL651 | 3 | 0.670281 | 7.572672 |
Αρχικά γίνεται η γεωαναφορά των στοιχείων
NUTS_2013_01M_651 <- merge(NUTS_2013_01M_651, GDP651_2006[1, ], by.x = "NUTS_ID",
by.y = "geo", all = FALSE)
H χρήση της merge
ενδεχομένως να προκαλέσει αλλαγή στα rownames
του dataframe
οπότε έστω και προληπτικά τα διορθώνουμε
row.names(NUTS_2013_01M_651@data) <- sapply(slot(NUTS_2013_01M_651, "polygons"),
function(x) slot(x, "ID"))
plot(NUTS_2013_01M_651)
kable(NUTS_2013_01M_651@data)
NUTS_ID | STAT_LEVL_ | SHAPE_AREA | SHAPE_LEN | unit | time | values | |
---|---|---|---|---|---|---|---|
673 | EL651 | 3 | 0.670281 | 7.572672 | EUR_HAB | 2001 | 12800 |
Στην σ | υνέχεια θα | χρησιμοποιήσ | ουμε την `etr | sSourceSurfa | ce` για να | προβάλ | λουμε στον καναβο το “φαινόμενο” της κατανομής του κατά κεφαλήν ακαθάριστου εθνικού προϊόντος |
par(mar = c(0.1, 0.1, 0.1, 0.1))
NUTS_2013_01M_651_GDP <- etrsSourceSurface(input.surface = NUTS_2013_01M_651,
over.method.type = "PropCal", surface.value.col = 7, cell.size = 1000)
plot(NUTS_2013_01M_651_GDP)
kable(head(NUTS_2013_01M_651_GDP@data))
CELLCODE | EASTOFORIGIN | NORTHOFORIGIN | CELLVALUE | |
---|---|---|---|---|
1kmE5468N1643 | 1kmE5468N1643 | 5468000 | 1643000 | 7.68 |
1kmE5469N1643 | 1kmE5469N1643 | 5469000 | 1643000 | 24.32 |
1kmE5463N1644 | 1kmE5463N1644 | 5463000 | 1644000 | 2.56 |
1kmE5464N1644 | 1kmE5464N1644 | 5464000 | 1644000 | 3031.04 |
1kmE5465N1644 | 1kmE5465N1644 | 5465000 | 1644000 | 5710.08 |
1kmE5466N1644 | 1kmE5466N1644 | 5466000 | 1644000 | 6620.16 |
Η προηγούμενη επιφάνεια dasymetric.surface
που υπολογίστηκε ως Δασυμετρική επιφάνεια τώρα θα μετατραπεί σε βοηθητική επιφάνεια και θα χρησιμοποιεί για την κατανομή της τιμής της GDP. Σε αυτήν απεικονιζόταν ο αριθμός των κατοίκων ανά κελί που είχε την ιδιότητα του συνεχούς ή αστικού ιστού
kable(head(dasymetric.surface@data))
POP_2001_ancillary <- etrsDasymetric2Ancillary(dasymetric.surface)
row.names(POP_2001_ancillary@data) <- sapply(slot(POP_2001_ancillary, "polygons"),
function(x) slot(x, "ID"))
Τέλος με την κλίση της etrsPropWeightedValue
θα υπολογιστεί η τιμή του ακαθάριστου προϊόντος σε κάθε κελί
par(mar = c(0.1, 0.1, 0.1, 0.1))
DASY_GPD <- etrsPropWeightedValue(input.surface.grided = NUTS_2013_01M_651_GDP,
ancillary.grided = POP_2001_ancillary)
## ~~~ ETRS validity ~~~
plot(DASY_GPD)
plot(ΑΡΓΟΛΙΔΑ.ETRS, add = T, border = 2, lwd = 2)
kable(head(DASY_GPD))
CELLCODE | EASTOFORIGIN | NORTHOFORIGIN | CELLVALUE | WCELLWEIGHT | DASYCELL | |
---|---|---|---|---|---|---|
93 | 1kmE5488N1683 | 5488000 | 1683000 | 7016.96 | 739.05977 | 5185952.8 |
99 | 1kmE5489N1683 | 5489000 | 1683000 | 2048.00 | 85.56922 | 175245.8 |
105 | 1kmE5490N1683 | 5490000 | 1683000 | 12800.00 | 389.06912 | 4980084.7 |
94 | 1kmE5488N1684 | 5488000 | 1684000 | 12277.76 | 1180.47901 | 14493637.9 |
100 | 1kmE5489N1684 | 5489000 | 1684000 | 12029.44 | 1976.07995 | 23771135.2 |
106 | 1kmE5490N1684 | 5490000 | 1684000 | 12800.00 | 420.50199 | 5382425.5 |
Τέλος η μετατροπή των αποτελέσματα σε raster θα έκανε τα ευκολότερα διαθέσιμα για χρήση. Θα χρησιμοποιήσουμε την etrsDasymetric2Raster
που εξαρτάται απο το πακέτο raster
για να επιτύχουμε το ζητούμενο αποτέλεσμα
par(mar = c(0.1, 0.1, 0.1, 0.1))
DASY_GPD_RASTER <- etrsDasymetric2Raster(dasymetric.surface = DASY_GPD)
rw.colors <- grey.colors
image(DASY_GPD_RASTER, col = rw.colors(5))
plot(ΑΡΓΟΛΙΔΑ.ETRS, add = T, border = 2, lwd = 2)