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
+
⌘⇧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";