LocalidataContent unavailable! (broken link)https://es.dbpedia.org/wiki/images/out.png es una empresa española que, entre otras cosas, proporciona un APIContent unavailable! (broken link)https://es.dbpedia.org/wiki/images/out.png para acceder a sus datos semánticos. Podemos pedir información de locales comerciales, información de geometrías de barrios y distritos, y mucho más.
Para usar este API debes usar una api_key que obtienes cuando te registras.
Con este código R podemos obtener de Localidata los segmentos del contorno del barrio de Justicia (Madrid) y, siguiendo el primer ejemplo, pintar los puntos donde esDBpedia tiene datos.
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
library(httr)
library(jsonlite)
library(ggmap)
library(SPARQL)
#Ejemplo que no necesita paginación
#Info sobre el barrio de Justicia (código 280796014)
res <- GET("http://datos.localidata.com",
path = "recurso/territorio/Barrio/280796014.geojson",
query = list(
api_key = "TU_API_KEY",
`_view` = "coordenadas" #Escapa las variable que empiezan con _
)
)
json <- fromJSON(rawToChar(res$content)) #Así saco el json enviado por el servidor
#Tengo 1 polylinea que define el contorno del barrio en
#json$features$geometry$coordinates[[1]][[1]][[1]][[N]]
#N coordenadas. Hay 359 segmentos.
v_lat <- numeric(length(json$features$geometry$coordinates[[1]][[1]][[1]]))
v_lon <- numeric(length(json$features$geometry$coordinates[[1]][[1]][[1]]))
for (i in 1:length(v_lat)){
v_lon[i] <- json$features$geometry$coordinates[[1]][[1]][[1]][[i]][1]
v_lat[i] <- json$features$geometry$coordinates[[1]][[1]][[1]][[i]][2]
}
dfpoli <- data.frame(lat=v_lat, lon=v_lon) #Las long NO hay que cambiarlas de signo
#Mapa con polígono del barrio
map.center <- geocode("Chueca, Madrid, Spain")
map <- get_map(c(lon=map.center$lon, lat=map.center$lat),
source="google", zoom=15)
plot <- ggmap(map) +
geom_polygon(aes(lon, lat), data = dfpoli, colour = NA, fill = "red", alpha = .3)
#Añado al mapa los datos de esDBpedia
endpoint <- "http://es.dbpedia.org/sparql"
query <-
"SELECT * WHERE {
?uri geo:lat ?lat .
?uri geo:long ?lon .
?uri rdf:type ?thetype .
FILTER ( (?lat> 40.418 && ?lat < 40.430) &&
(?lon> -3.704 && ?lon <-3.690)
&& regex(?thetype,'^http://schema.org')
)
}
"
reslist <- SPARQL(endpoint,query)
df <- reslist$results
df$thetype <- factor(df$thetype)
plot + geom_point(data=df,
aes(x=lon, y=lat, colour=thetype, position="dodge"),
size=6, alpha=0.8
)
Este es el resultado
Content unavailable! (broken link)https://es.dbpedia.org/wiki/attach/Ejemplo%20de%20integraci%C3%B3n%20de%20esDBpedia%20con%20API%20de%20localidata/justicia.png |