2015-09-27 2 views
0

Вопросг - добавить несколько маркеров rMaps

Как добавить несколько маркеров с помощью rMaps?

данных

coords <- structure(list(stop_id = 19841:19843, stop_name = c("Flagstaff Railway Station (Melbourne City)", 
"Melbourne Central Railway Station (Melbourne City)", "Parliament Railway Station (Melbourne City)" 
), stop_lat = c(-37.8119813073807, -37.8099387667386, -37.8110540555305 
), stop_lon = c(144.955653760429, 144.962593535096, 144.972910916416 
)), .Names = c("stop_id", "stop_name", "stop_lat", "stop_lon" 
), sorted = "stop_id", row.names = 17:19, class = c("data.table", 
"data.frame")) 

Примеры

Использование library(rMaps) я могу создать карту и добавить один маркер, в соответствии с примерами на GitHub странице Ramnath в:

library(rMaps) 

l <- Leaflet$new() 
l$setView(c(-37.8602828, 145.079616), zoom=11) 
l$tileLayer(provider = "Acetate.terrain") 

## add one marker: 
l$marker(LatLng = c(-37.81198,144.9557)) 

Но я не могу понять, как добавить несколько маркеров из coords кадр данных, без записи строки l$marker для каждого из них.

Я пытался использовать GeoJSON, но я новичок в этом, так что пока еще не обнял его и должен что-то делать неправильно.

# library(rgdal) 
# coords.sp <- SpatialPointsDataFrame(coords[,.(stop_lon, stop_lat)], coords[,.(stop_id, stop_name)]) 
# writeOGR(obj=coords.sp, dsn='coords.geojson', layer='OGRGeoJSON', driver='GeoJSON') 

# gj <- readOGR("./coords.geojson", layer="OGRGeoJSON") 
# l$geoJson(gj) 
# l$geoJson("./coords.geojson") 

Я рад использовать JSON/GeoJSON, если это путь.

Желаемая выход

Я хотел бы, результат будет таким же, как если бы я использовал library(leaflet), чтобы показать несколько маркеров

library(leaflet) 
leaflet() %>% 
    addProviderTiles("Acetate.terrain") %>% 
    setView(lat = -37.8602828, lng = 145.079616, zoom=11) %>% 
    addMarkers(data=coords, lat=~stop_lat, lng=~stop_lon) 

marker_example

GeoJSON

Здесь это GeoJSON код, который производится из команды writeOGR, и я подтверждено его at GeoJSONLint

{ 
"type": "FeatureCollection", 

"features": [ 
{ "type": "Feature", "id": 1, "properties": { "stop_id": 19841, "stop_name": "Flagstaff Railway Station (Melbourne City)" }, "geometry": { "type": "Point", "coordinates": [ 144.955653760428987, -37.811981307380698 ] } }, 
{ "type": "Feature", "id": 2, "properties": { "stop_id": 19842, "stop_name": "Melbourne Central Railway Station (Melbourne City)" }, "geometry": { "type": "Point", "coordinates": [ 144.962593535096005, -37.809938766738597 ] } }, 
{ "type": "Feature", "id": 3, "properties": { "stop_id": 19843, "stop_name": "Parliament Railway Station (Melbourne City)" }, "geometry": { "type": "Point", "coordinates": [ 144.972910916415998, -37.811054055530498 ] } } 
]} 
+0

Hm насчет петли в венах 'применить (unname (координаты [с ("stop_lat", "stop_lon")]), 1, л $ маркера)'? – lukeA

+0

@ lukeA, хорошая идея, но на данный момент она помещает маркеры в * слегка * неправильное место (но очень близко); Я посмотрю. – tospig

ответ

0

я могу использовать library(geojsonio) правильно прочитать файл GeoJSON, а затем использовать l$geoJson загрузить маркеры на карте

## create spatial object and save as GeoJSON 
# library(rgdal) 
coords.sp <- SpatialPointsDataFrame(coords[,.(stop_lon, stop_lat)], coords[,.(stop_id, stop_name)]) 
writeOGR(obj=coords.sp, dsn='coords.geojson', layer='OGRGeoJSON', driver='GeoJSON') 

l <- Leaflet$new() 
l$setView(c(-37.8602828, 145.079616), zoom=11) 
l$tileLayer(provider = "Acetate.terrain") 

## Read the GeoJSON data 
library(geojsonio) 
gj <- geojson_read("./coords.geojson") 
l$geoJson(gj) 

markers plotted with geoJson

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

  • Нет связанных вопросов^_^