[R-sig-Geo] Adding colour to polylines in Leaflet

Kent Johnson kent3737 @ending from gm@il@com
Sat Sep 22 20:00:43 CEST 2018


Your problem is not really a leaflet problem, it is about identifying runs
in your data. This should help: https://stackoverflow.com/q/43875716/80626

Kent

On Sat, Sep 22, 2018 at 12:22 PM Dhiraj Khanna <dhirajkhanna using gmail.com>
wrote:

> @Kent Johnson <kent3737 using gmail.com> guess I jumped the gun!
>
> Your code worked like a charm as long as the colours were all in order,
> ie, none of them are repeating.
> Like I mentioned, I am working with shipping data and the Color variable
> is dependent on the ship’s speed. The code that you provided joins all the
> line segments which have the same color.
> So if red represents a speed less than 3 knots, then it will join all the
> points irrespective of the timeline wherever the color is red.
>
> What I am looking for is one continuous path where the same color might
> repeat. Here’s a reproducible example:
>
> library(leaflet)
> x <- structure(list(lat = c(51.88783, 51.8878441, 51.887825, 51.88659,  51.8866959, 51.8874931, 51.89359, 51.8941269, 51.8977051, 51.8994331,  51.90773, 51.91324, 51.91604, 51.9216652, 51.93353, 51.9419365 ),
>                      lon = c(4.28763342, 4.287635, 4.28765154, 4.29007339, 4.29562664,  4.29917, 4.30641174, 4.30561829, 4.29263353, 4.284498, 4.261132,  4.24711847, 4.241075, 4.23262, 4.21523666, 4.1927),
>                      rateOfTurn = c(0L,  0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L),
>                      sogKts = c(0, 0, 0, 2.1, 3.4, 4.6, 3.5, 3.8, 7.4, 7.9, 8.8,9.1, 9.2, 9.2, 0.3, 0.4),
>                      cog = c(15, 15, 15, 122.2, 70.4,      70, 323.2, 315.3, 289.3, 290.9, 303.8, 303.7, 308.9, 324.5, 304.9, 301.4),
>                      heading = c(163, 162, 163, 106, 71, 71, 303,      298, 289, 294, 303, 303, 310, 324, 304, 302),
>                      timestamp = c("2018-07-19T05:27:34","2018-07-19T05:39:35", "2018-07-19T05:45:34", "2018-07-19T05:57:37",
>                                    "2018-07-19T06:02:48", "2018-07-19T06:04:49", "2018-07-19T06:12:51", "2018-07-19T06:13:32",
>                                    "2018-07-19T06:19:08", "2018-07-19T06:21:41",      "2018-07-19T06:28:42", "2018-07-19T06:32:50",
>                                    "2018-07-19T06:34:37",      "2018-07-19T06:37:41", "2018-07-19T06:43:49", "2018-07-19T06:50:09"),
>                      Color = c("red", "red", "red", "red", "orange", "orange","orange", "orange", "orange", "orange", "yellow", "yellow",
>                                "yellow", "yellow", "red", "red")), row.names = 32:47, class = "data.frame")
>
> #Kent's code
>
> x$lastColor = dplyr::lag(x$Color)
> map <-  leaflet(x)
> map <- addTiles(map)
> for( Color in
>      levels(as.factor(x$Color))){
>   map <- addPolylines(map,lng=~lon,lat=~lat,data=x[x$Color==Color | x$lastColor==Color,], color=~Color) }
> map
>
> As you can see, the last two observations are again in red color. But when
> the map renders, it joins the last two observations with the first three.
>
> I am not sure what to do here? Inserting a row of NAs would help? But I am
> also using another javascript plugin (polylineDecorator) for adding
> arrows to the direction of travel and that is intolerant to NAs.
> Appreciate some help here.
>
>
> Regards
> Dhiraj Khanna
> Mob:09873263331
>
> On Sat, Sep 1, 2018 at 8:06 PM Dhiraj Khanna <dhirajkhanna using gmail.com>
> wrote:
>
>> Thank you Kent, that worked like a charm!
>> Regards
>>
>> Dhiraj Khanna
>> Mob:09873263331
>>
>>
>> On Sat, Sep 1, 2018 at 7:59 PM Kent Johnson <kent3737 using gmail.com> wrote:
>>
>>> You have to include the points where the colors change in both
>>> polylines. Here is one way:
>>>
>>> x$lastColor = dplyr::lag(x$Color)
>>> map <-  leaflet(x)
>>> map <- addTiles(map)
>>> for( Color in
>>> levels(as.factor(x$Color))){
>>>   map <- addPolylines(map,lng=~lon,lat=~lat,data=x[x$Color==Color |
>>> x$lastColor==Color,], color=~Color) }
>>> map
>>>
>>> Kent
>>>
>>> On Sat, Sep 1, 2018 at 8:56 AM, Dhiraj Khanna <dhirajkhanna using gmail.com>
>>> wrote:
>>>
>>>> @Kent they are appearing as three separate lines. I am hoping to see
>>>> them joint with no gaps. The transition from row 4 to row 5 is where the
>>>> speed has changed from 2.1 knots to 3.4 knots. I am hoping to see another
>>>> line from row 4 to row 5 in red colour. Similarly for the other disjoint
>>>> points.
>>>> Regards
>>>>
>>>> Dhiraj Khanna
>>>> Mob:09873263331
>>>>
>>>>
>>>> On Sat, Sep 1, 2018 at 6:17 PM Kent Johnson <kent3737 using gmail.com> wrote:
>>>>
>>>>> Message: 5
>>>>>> Date: Sat, 1 Sep 2018 08:28:24 +0530
>>>>>> From: Dhiraj Khanna <dhirajkhanna using gmail.com>
>>>>>> To: r-sig-geo using r-project.org
>>>>>> Subject: [R-sig-Geo] Adding colour to polylines in Leaflet
>>>>>> Message-ID:
>>>>>>         <
>>>>>> CANHhK329-Y7hPJD9gSOs24mSqGkrjC481oQspNAgVisAw2JBoQ using mail.gmail.com>
>>>>>> Content-Type: text/plain; charset="utf-8"
>>>>>>
>>>>>> I am working with shipping data where I get the dynamic parameters of
>>>>>> a
>>>>>> ship like its position, speed, heading and rate of turn. I am then
>>>>>> trying
>>>>>> to plot this on a leaflet map and trying to colour the polylines
>>>>>> based on
>>>>>> the speed, but it always shows up in the same colour. Here’s some
>>>>>> sample
>>>>>> data:
>>>>>>
>>>>>> <snip>
>>>>>> This is the code I have tried which doesn’t work:-
>>>>>>
>>>>>> map <-  leaflet(x) map <- addTiles(map) for( Color in
>>>>>> levels(as.factor(x$Color))){   map <- addPolylines(map,
>>>>>> lng=~lon,lat=~lat,data=x[x$Color==Color,], color=~Color) } map
>>>>>>
>>>>>> Regards
>>>>>> Dhiraj Khanna
>>>>>> Mob:09873263331
>>>>>
>>>>>
>>>>> What are you expecting to see? When I run your code I get a map with
>>>>> three lines, one red, one orange and one yellow.
>>>>>
>>>>> Kent
>>>>>
>>>>>
>>>

	[[alternative HTML version deleted]]



More information about the R-sig-Geo mailing list