Címke: geocode

1 szavazat
10k megtekintés

R-ben szeretnék települési poligonokat tartalmazó térképet:
olyat, amilyen itt is van:

enter image description here
Forrás:KSH

Ha ggplot2-t használok, akkor elég, ha a települési poligonok koordinátái és valami településazonosító van hozzá (lat, long, id). Ha van shapefile, akkor persze egyszerű, de települési szintű teljes shapefile nincs az országról.

Az openstreetmap alapján elvileg le lehet kérni ilyen adatokat, de sajnos nem minden településre.

Van egy kis program, amivel elég sokadatot ki lehet nyerni:

# települések neve egy vektorba
stl <- osm_telep[,1]

# függvény a koordináták összegyűjtéséhez =====================

osm_poly <- function(settlement_q){

  # web lekérdezéshez állandó részek: 
  nmt1 <- "http://nominatim.openstreetmap.org/search?q="
  nmt2 <-"&format=xml&polygon=1&limit=1&countrycodes=hu"
  # kereső kifejezés:
  search_string <- paste0(nmt1, settlement_q, nmt2, collapse = "")  

  require(XML2R)
  # Település koordinátái és egyebek
  dt <- XML2R(search_string)
  # poligonok
  pp <- dt[[2]][6]
  # tisztogatás
  pp2 <- substr(x = pp, start = 2, stop = nchar(pp)-1)
  # poligon koordináták kinyerése
  pp3 <- unlist(regmatches(x = pp2, gregexpr("[[:digit:]]+.[[:digit:]]+", pp2)))
  # koordináták rendezése
  long <- as.numeric(pp3[seq(from = 1,to = length(pp3), by = 2)])
  lat <- as.numeric(pp3[seq(from = 2,to = length(pp3), by = 2)])

  # települési adat
  dt_k <- data.frame(long=long, lat=lat, NEV=settlement_q)

  if (i==1) {
    map <<- dt_k
  } else{
    map <<-rbind(map, dt_k)  
  }
  return(map)
}

# ============== fg. vége =============================

# végrehajtás
for (i in 1:length(stl)){
  osm_poly(settlement_q = stl[i])
}

Hogyan lehetne a hiányzó adatokat letölteni? Úgy tűnik, a poligonok ott vannak valami adatbázisban, hiszen láthatóak, csak mintha rossz helyen keresném. A cél az lenne, hogy az ország összes települési poligonjának koordinátái egy állományban legyenek, és egyszerű legyen olyasmit rajzolni, mint a fenti képen.
pl.: Balatoncsicsó

  • H.Gergely kérdezte 7 év ago
  • utolsó aktivitás 7 év ago
1 találat mutatása