不能与R的传单包循环以产生多个地图

时间:2016-04-11 16:46:41

标签: r leaflet

这里的新品和R也相对较新,所以请原谅apriori,让我知道我在这篇文章中做错了什么,以避免将来讨厌别人:

我正在尝试创建一个小册子地图的序列(1971年9月到1972年4月)。最后,我想让它们变得闪亮并让用户播放/暂停动画(闪亮的循环动画滑块)。

没有while和for循环为我工作。在运行代码后检查#define NUM_COLS 4 #define NUM_ROWS 3 int main() { unsigned char colNum; int simple_array[NUM_COLS]; int (* ptrToArray)[NUM_COLS]; //int[4] *ptrToArray??? ptrToArray = &simple_array; for(colNum=0;colNum<NUM_COLS;colNum++) { *(ptrToArray)[colNum] =colNum; } for(colNum=0;colNum<NUM_COLS;colNum++) { printf("%d\t",*(ptrToArray)[colNum]); } return 0; } 时,增量已经起作用,传单不起作用。没有循环,我的&#34;动态传单失败&#34; (见下面的代码部分)工作并打开了一张地图。

是否无法按顺序创建传单?

i

1 个答案:

答案 0 :(得分:12)

去年@afterportfolio的帖子的更新版本。我需要添加timelineControl函数才能使其正常工作。我还需要调用leaflet元素的getMap()函数来获取绑定到map对象的函数。

library(htmlwidgets)
library(htmltools)
library(leaflet)
library(geojsonio)

#Build data.frame with 10 obs + 3 cols
power <- data.frame(
    "Latitude" = c(33.515556, 38.060556, 47.903056, 49.71, 49.041667, 31.934167, 54.140586, 54.140586, 48.494444, 48.494444),
    "Longitude" = c(129.837222, -77.789444, 7.563056, 8.415278, 9.175, -82.343889, 13.664422, 13.664422, 17.681944, 17.681944),
    "start" = do.call(
        "as.Date",
        list(
            x = c("15-Sep-1971", "1-Dec-1971", "1-Feb-1972", "1-Feb-1972", "1-Feb-1972", "1-Feb-1972", "1-Apr-1972", "1-Apr-1972", "24-Apr-1972", "24-Apr-1972"),
            format = "%d-%b-%Y"
        )
    )
)

# set start same as end
#  adjust however you would like
power$end <- power$start + 30


# use geojsonio to convert our data.frame
#  to GeoJSON which timeline expects
power_geo <- geojson_json(power,lat="Latitude",lon="Longitude", pretty = T)

# create a leaflet map on which we will build
leaf <- leaflet() %>%
    addTiles()

# add leaflet-timeline as a dependency
#  to get the js and css
leaf$dependencies[[length(leaf$dependencies)+1]] <- htmlDependency(
    name = "leaflet-timeline",
    version = "1.0.0",
    src = c("href" = "http://skeate.github.io/Leaflet.timeline/"),
    script = "javascripts/leaflet.timeline.js",
    stylesheet = "stylesheets/leaflet.timeline.css"
)

# use the new onRender in htmlwidgets to run
#  this code once our leaflet map is rendered
#  I did not spend time perfecting the leaflet-timeline
#  options
leaf %>%
    setView(44.0665,23.74667,2) %>%
    onRender(sprintf(
        '
        function(el,x){
        var power_data = %s;

        var timelineControl = L.timelineSliderControl({
          formatOutput: function(date) {
            return new Date(date).toString();
          }
        });

        var timeline = L.timeline(power_data, {
        pointToLayer: function(data, latlng){
        var hue_min = 120;
        var hue_max = 0;
        var hue = hue_min;
        return L.circleMarker(latlng, {
        radius: 10,
        color: "hsl("+hue+", 100%%, 50%%)",
        fillColor: "hsl("+hue+", 100%%, 50%%)"
        });
        },
        steps: 1000,
        duration: 10000,
        showTicks: true
        });
        timelineControl.addTo(HTMLWidgets.find(".leaflet").getMap());
        timelineControl.addTimelines(timeline);
        timeline.addTo(HTMLWidgets.find(".leaflet").getMap());
        }
        ',
        power_geo
    ))