2016-11-09 39 views
0

我最近发现我的兴趣在R.映射巴士路线与宣传单中的R

与叶包密谋当我试图这样做纽约公交线路shape file of NYC bus routes (zip file)的这种形状文件,部分航线不显示在地图上。我可以告诉他们错过了,因为我覆盖了公交车站的数据,有些没有与路线对齐。

当我在形状文件中读取时,我注意到创建的空间线数据框具有嵌套列表,我认为传单未映射。

我需要做什么,让传单读取这些缺失路线的坐标?下面是我用缺少的路线产生地图代码:

bus <- readOGR(dsn = path.expand("bus_route_shapefile"), layer = "bus_route_shapefile") 
bus.pj <- spTransform(bus, CRS("+proj=longlat +datum=WGS84")) 
bus.st <- readOGR(dsn = path.expand("bus_stop_shapefile"), layer = "bus_stop_shapefile") 
bus.st.pj <- spTransform(bus.st, CRS("+proj=longlat +datum=WGS84")) 

bus_map <- leaflet() %>% 
    setView(lng = -73.932667, lat = 40.717266, zoom = 11) %>% 
    addPolylines(data = bus.pj, color = "black", opacity = 1) %>% 
    addCircles([email protected],~stop_lon, ~stop_lat, color = "red") %>% 
    addTiles() 
bus_map 

回答

1

这将是更容易帮助你,如果你提供的不仅bus_routes也bus_stop (zip file)。您可以通过将bus.pj转换为新的SpatialLinesxxx obj来解决此问题,其中每个类Lines只有一个类Line。下面的代码使得SLDF因为未知而没有[email protected]$trip_heads

library(dplyr); library(sp); library(leaflet) 

    ## resolve [email protected] into list(Line.objs) (Don't worry about warnings) 
Line_list <- lapply([email protected], getLinesLinesSlot) %>% unlist() 

     ## If you want just Lines infromation, finish with this line. 
    SL <- sapply(1:length(Line_list), function(x) Lines(Line_list[[x]], ID = x)) %>% 
     SpatialLines() 

    ## make new ids (originalID_nth) 
ori_id <- getSLLinesIDSlots(bus.pj)       # get original ids 
LinLS <- sapply([email protected], function(x) length([email protected])) # how many Line.obj does each Lines.obj has 
new_id <- sapply(1:length(LinLS), function(x) paste0(x, "_", seq.int(LinLS[[x]]))) %>% 
    unlist() 

    ## make a new data.frame (only route_id) 
df <- data.frame(route_id = rep([email protected]$route_id, times = LinLS)) 
rownames(df) <- new_id 

    ## integrate Line.objs, ids and a data.frame into SpatialLinesDataFrame.obj 
SLDF <- mapply(function(x, y) Lines(x, ID = y), x = Line_list, y = new_id) %>% 
    SpatialLines() %>% SpatialLinesDataFrame(data = df) 


leaflet() %>% 
    setView(lng = -73.932667, lat = 40.717266, zoom = 11) %>% 
    addPolylines(data = SLDF, color = "black", opacity = 1, weight = 1) %>% 
    addCircles([email protected],~stop_lon, ~stop_lat, color = "red", weight = 0.3) 

enter image description here