diff --git a/CHANGELOG.md b/CHANGELOG.md index aaaa9f0..a4fcf37 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ ### Change Log for Node-RED Worldmap + - v2.11.0 - Add option to smooth tracks using bezier curves. - v2.10.0 - Save latest position to browser for refresh if in iframe/dashboard. Allow fractional Zoom levels. - v2.9.0 - Let weblinks be an array of links. Add more info to readme about Mapservers. - v2.8.9 - Only load cgi module if we have a local mapserv file diff --git a/README.md b/README.md index c70ad4c..d3d8175 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ map web page for plotting "things" on. ### Updates +- v2.11.0 - Add option to smooth tracks using bezier curves. - v2.10.0 - Save latest position to browser for refresh if in iframe/dashboard. Allow fractional Zoom levels. - v2.9.0 - Let weblinks be an array of links. Add more info to readme about Mapservers. - v2.8.9 - Only load cgi module if we have a local mapserv file. diff --git a/package.json b/package.json index 0fba19b..76eee79 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,13 @@ { "name": "node-red-contrib-web-worldmap", - "version": "2.10.0", + "version": "2.11.0", "description": "A Node-RED node to provide a web page of a world map for plotting things on.", "dependencies": { "cgi": "0.3.1", "compression": "^1.7.4", "express": "^4.16.4", - "sockjs": "~0.3.21" + "sockjs": "~0.3.21", + "@turf/bezier-spline": "*" }, "bundledDependencies": [ "cgi", diff --git a/worldmap.html b/worldmap.html index c42ce49..2084d7c 100644 --- a/worldmap.html +++ b/worldmap.html @@ -528,6 +528,11 @@ then by default ⌘⇧m - ctrl-shift-m will load the m +
+ + + +
@@ -553,7 +558,8 @@ then by default ⌘⇧m - ctrl-shift-m will load the m defaults: { name: {value:""}, depth: {value:20}, - layer: {value:"combined"} + layer: {value:"combined"}, + smooth: {value:false} }, inputs:1, outputs:1, diff --git a/worldmap.js b/worldmap.js index 845b35d..7c6e0a8 100644 --- a/worldmap.js +++ b/worldmap.js @@ -273,7 +273,9 @@ module.exports = function(RED) { this.depth = parseInt(Number(n.depth) || 20); this.pointsarray = {}; this.layer = n.layer || "combined"; // separate, single + this.smooth = n.smooth || false; var node = this; + var bezierSpline = require("@turf/bezier-spline").default; var doTrack = function(msg) { if (msg.hasOwnProperty("payload") && msg.payload.hasOwnProperty("name")) { @@ -335,7 +337,13 @@ module.exports = function(RED) { } } if (line.length > 1) { // only send track if two points or more - newmsg.payload.line = line; + if (node.smooth) { + var curved = bezierSpline({"type":"Feature", "properties":{}, "geometry":{"type":"LineString", "coordinates":line }}); + newmsg.payload.line = curved.geometry.coordinates; + } + else { + newmsg.payload.line = line; + } newmsg.payload.name = msg.payload.name + "_"; if (node.layer === "separate") { newmsg.payload.layer = msg.payload.layer + " tracks";