2013-06-19 11 views
4

Я недавно узнал о leafletjs.com с сообщения R-Bloggers.com. Один такой учебник, который я хотел бы достичь, - это создать интерактивные карты хороплетов с листовкой (http://leafletjs.com/examples/choropleth.html). Я использую пакет rjson для R, чтобы создать файл data.js для чтения буклетами. Хотя у меня был успех с использованием предоставленного файла формы в виде читаемого файла JSON в листовке, я не могу повторить этот процесс при попытке объединить дополнительные свойства из фрейма данных («data.csv») в файл JSON; в этом случае я сделал rGIS для прикрепления данных о количестве банок в каждой школе, перечисленных в фрейме данных. То, что я хотел бы получить, это создать карту хороплетов в листовке, которая отображает район средней школы (как определено переменной NAME) и сумму «банок». Я считаю, что проблема заключается в том, что writeOGR экспортирует информацию как точки, а не полигона?R, GeoJSON и Листовка

{ 
    "type": "Feature", 
    "properties": { 
     "name": "Alabama", 
     "density": 94.65 
    }, 
    "geometry": ... 
    ... 
} 

    ###load R scripts from dropbox 
    dropbox.eval <- function(x, noeval=F) { 
    require(RCurl) 
    intext <- getURL(paste0("https://dl.dropboxusercontent.com/",x), ssl.verifypeer = FALSE) 
    intext <- gsub("\r","", intext) 
    if (!noeval) eval(parse(text = intext), envir= .GlobalEnv) 
    return(intext) 
    } 

    ##pull scripts from dropbox 
    dropbox.eval("s/wgb3vtd9qfc9br9/pkg.load.r")  
    dropbox.eval("s/tf4ni48hf6oh2ou/dropbox.r") 

    ##load packages 
    pkg.load(c(ggplot2,plyr,gdata,sp,maptools,rgdal,reshape2,rjson)) 

    ###setup data frames 
    dl_from_dropbox("data.csv","dx3qrcexmi9kagx") 
    data<-read.csv(file='data.csv',header=TRUE) 

    ###prepare GIS shape and data for plotting 
    dropbox.eval("s/y2jsx3dditjucxu/dlshape.r")  
    temp <- tempfile() 
    dlshape(shploc="http://files.hawaii.gov/dbedt/op/gis/data/highdist_n83.shp.zip", temp) 
    shape<- readOGR(".","highdist_n83") #HDOE high school districts 
    [email protected] 

    shape2<- spTransform(shape, CRS("+proj=longlat +datum=NAD83")) 


    data.2<-ddply(data, .(year, schoolcode, longitude, latitude,NAME,HDist,SDist), summarise, 
      total = sum(total), 
      cans= sum(cans)) 


    ###merging back shape properties and data frame 
    coordinates(data.2) <-~longitude + latitude 
    [email protected]$id <- rownames([email protected]) 

    sh.df <- as.data.frame(shape2) 

    sh.fort <- fortify(shape2 , region = "id") 

    sh.line<- join(sh.fort, sh.df , by = "id") 



    mapdf <- merge(sh.line , data.2 , by.x= "NAME", by.y="NAME" , all=TRUE) 

    mapdf <- mapdf[ order(mapdf$order) , ] 


    ###exporting merged data frame as JSON 
mapdf.sp <- mapdf 
coordinates(mapdf.sp) <- c("long", "lat") 
writeOGR(mapdf.sp, "hssra.geojson","mapdf", driver = "GeoJSON") 

Однако, похоже, что мои функции постоянно повторяются. Как я могу агрегировать информацию о функциях так, чтобы она выглядела следующим образом:

var statesData = {"type":"FeatureCollection","features":[ 
{"type":"Feature","id":"01","properties":{"name":"Alabama","density":94.65}, 
"geometry":{"type":"Polygon","coordinates":[[[-87.359296,35.00118], 
[-85.606675,34.984749],[-85.431413,34.124869],[-85.184951,32.859696], 
[-85.069935,32.580372],[-84.960397,32.421541],[-85.004212,32.322956], 
[-84.889196,32.262709],[-85.058981,32.13674],[-85.053504,32.01077],[-85.141136,31.840985], 
[-85.042551,31.539753],[-85.113751,31.27686],[-85.004212,31.003013],[-85.497137,30.997536], 
[-87.600282,30.997536],[-87.633143,30.86609],[-87.408589,30.674397],[-87.446927,30.510088], 
[-87.37025,30.427934],[-87.518128,30.280057],[-87.655051,30.247195],[-87.90699,30.411504], 
[-87.934375,30.657966],[-88.011052,30.685351],[-88.10416,30.499135],[-88.137022,30.318396], 
[-88.394438,30.367688],[-88.471115,31.895754],[-88.241084,33.796253], 
[-88.098683,34.891641],[-88.202745,34.995703],[-87.359296,35.00118]]]}}, 


{"type":"Feature","id":"02","properties":{"name":"Alaska","density":1.264}, 
"geometry":{"type":"MultiPolygon","coordinates":[[[[-131.602021,55.117982], 
[-131.569159,55.28229],[-131.355558,55.183705],[-131.38842,55.01392], 
[-131.645836,55.035827],[-131.602021,55.117982]]],[[[-131.832052,55.42469], 
[-131.645836,55.304197],[-131.749898,55.128935],[-131.832052,55.189182], 
[-131.832052,55.42469]]],[[[-132.976733,56.437924],[-132.735747,56.459832], 
[-132.631685,56.421493],[-132.664547,56.273616],[-132.878148,56.240754], 
[-133.069841,56.333862],[-132.976733,56.437924]]],[[[-133.595627,56.350293], 
+0

Благодарим за изменения. Это выглядит намного лучше и чисто. :) – user2300643

ответ

4

Я решил решить этот вопрос.

То, что я в основном делали в основном присоединиться к data.2 ДФ к файлу формы: ([email protected]<-join([email protected],data.2)

, а затем с помощью rgdal пакет writeOGR в формате JSON (используя драйвер JSON) с * .js расширения.

Я надеюсь, что это поможет другим.

Смежные вопросы