Con datos de la Secretaría de Energía (SENER) se mapeará una capa de información en formato KML (del acrónimo en inglés Keyhole Markup Language). Los datos corresponden a las zonas en proceso de electrificación.
El código para extraer las coordenadas geográficas, la altitud así como el identificador (ID), es un aporte de Fabio Veronesi (https://www.r-bloggers.com/extract-coordinates-and-other-data-from-kml-in-r/), ligeras modificaciones fueron efectuadas. No obstante como veremos, los datos de la SENER sólo contienen latitud y longitud, la forma de hacerlo es la siguiente.
re <- "<coordinates> *([^<]+?) *<\\/coordinates>"
coords <- grep(re,kml.text)
re2 <- "src_id:"
SCR.ID <- grep(re2,kml.text)
re3 <- "<tr><td><b>Name:</b><td>"
Name <- grep(re3,kml.text)
kml.coordinates <- matrix(0,length(coords),4,dimnames=list(c(),c("ID","LON","LAT","ELEV")))
kml.names <- matrix(0,length(coords),1)
for(i in 1:length(coords)){
sub.coords <- coords[i]
temp1 <- gsub("<coordinates>"," ",kml.text[sub.coords])
temp2 <- gsub("</coordinates>"," ",temp1)
coordinates <- as.numeric(unlist(strsplit(temp2,",")))
sub.ID <- SCR.ID[i]
ID <- as.numeric(gsub("<tr><td><b>src_id:</b><td>"," ",kml.text[sub.ID]))
sub.Name <- Name[i]
NAME <- gsub(paste("<tr><td><b>Name:</b><td>"),"",kml.text[sub.Name])
kml.coordinates[i,] <- matrix(c(ID,coordinates),ncol=4)
kml.names[i,] <- matrix(c(NAME),ncol=1)
}
Con esta parte del código extraemos la información del archivo KML.
> head(kml.coordinates)
ID LON LAT ELEV
[1,] NA -92.13972 17.18167 0
[2,] NA -91.99667 17.18222 0
[3,] NA -91.20667 16.37694 0
[4,] NA -91.74639 17.03611 0
[5,] NA -92.11972 17.09611 0
[6,] NA -92.80972 17.40472 0
kml.coordinates <- kml.coordinates[,2:3]
El siguiente paso será plotear estas coordenadas, el código empleado es el siguiente:
library(RgoogleMaps)
z0 <- 5 # zoom
y0 <- 21.525818 # Latitud zero
x0 <- -100.522399 # longitud zero
N <- length(kml.coordinates)
color <- c() # Inicializo vector
color[1:N] <- 'gray20'
PuebMap <- GetMap(center= c(y0,x0), zoom=z0,
GRAYSCALE = F, size=c(640,640),
destfile = file.path(tempdir(),"sener.png"),
maptype = 'terrain', SCALE = 2,)
PlotOnStaticMap(PuebMap)
{PlotOnStaticMap(PuebMap, lat = kml.coordinates[,2],
lon = kml.coordinates[,1], cex=1, pch=19,
destfile = "sener.png",
col= color ,
add=TRUE)};
Esto produce el siguiente mapa:
No hay comentarios.:
Publicar un comentario