From cd2576b16d3abf8da56664283fe0d838bbc31ac2 Mon Sep 17 00:00:00 2001 From: Dave Conway-Jones Date: Fri, 17 Dec 2021 16:38:27 +0000 Subject: [PATCH] fixup convex hull drawing and example --- CHANGELOG.md | 1 + README.md | 1 + examples/Convex Hull around points.json | 1 + examples/Split Map With Swipe.json | 113 +----------------------- examples/Trigger reload of data.json | 2 +- package.json | 8 +- worldmap.js | 12 +-- 7 files changed, 17 insertions(+), 121 deletions(-) create mode 100644 examples/Convex Hull around points.json diff --git a/CHANGELOG.md b/CHANGELOG.md index f7da07d..3431d68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ ### Change Log for Node-RED Worldmap + - v2.23.2 - Add convex-hull example - v2.23.1 - Fix saving of custom map layer - v2.23.0 - Give logo and id so it can be overridden by toplogo command. PR #188. - v2.22.3 - Don't show empty popup for geojson object. Issue #186. Add wobble to null island. diff --git a/README.md b/README.md index dd05615..b1863a7 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ map web page for plotting "things" on. ### Updates +- v2.23.2 - Add convex-hull example - v2.23.1 - Fix saving of custom map layer - v2.23.0 - Give logo and id so it can be overridden by toplogo command. PR #188. - v2.22.3 - Don't show empty popup for geojson object. Issue #186. Add wobble to null island. diff --git a/examples/Convex Hull around points.json b/examples/Convex Hull around points.json new file mode 100644 index 0000000..c921e6d --- /dev/null +++ b/examples/Convex Hull around points.json @@ -0,0 +1 @@ +[{"id":"a0cdb588.2ba408","type":"inject","z":"fc2b85b48b73e276","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":180,"y":90,"wires":[["d7a5c615.1e6578"]],"l":false},{"id":"d7a5c615.1e6578","type":"function","z":"fc2b85b48b73e276","name":"Add Dave","func":"msg.payload = {\n name:\"Dave\",\n lat:51,\n lon:-1,\n layer:\"foo\"\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":300,"y":90,"wires":[["4b5f6be5.96c1f4","fd654fbf.7e7db"]]},{"id":"7dcb7d4e.f5faa4","type":"function","z":"fc2b85b48b73e276","name":"Add Bob","func":"msg.payload = {\n name:\"Bob\",\n lat:52,\n lon:-1,\n layer:\"foo\"\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":300,"y":135,"wires":[["4b5f6be5.96c1f4","fd654fbf.7e7db"]]},{"id":"a498ec44.fde27","type":"function","z":"fc2b85b48b73e276","name":"Add Fred","func":"msg.payload = {\n name:\"Fred\",\n lat:51,\n lon:-2,\n layer:\"foo\"\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":300,"y":180,"wires":[["4b5f6be5.96c1f4","fd654fbf.7e7db"]]},{"id":"5c92395d.d709f8","type":"function","z":"fc2b85b48b73e276","name":"Add Joe","func":"msg.payload = {\n name:\"Joe\",\n lat:52,\n lon:-2,\n layer:\"foo\",\n iconColor:\"blue\"\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":300,"y":225,"wires":[["4b5f6be5.96c1f4","fd654fbf.7e7db"]]},{"id":"1836dc1e.3ec894","type":"function","z":"fc2b85b48b73e276","name":"Add Mark","func":"msg.payload = {\n name:\"Mark\",\n lat:51.5,\n lon:-1.5,\n layer:\"foo\",\n iconColor:\"green\"\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":300,"y":270,"wires":[["4b5f6be5.96c1f4","fd654fbf.7e7db"]]},{"id":"d439a183.9d7ca","type":"function","z":"fc2b85b48b73e276","name":"Add John","func":"msg.payload = {\n name:\"John\",\n lat:50.5,\n lon:-2.5,\n layer:\"foo\",\n iconColor:\"blue\"\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":300,"y":315,"wires":[["4b5f6be5.96c1f4","fd654fbf.7e7db"]]},{"id":"43bc41e8.0385a","type":"function","z":"fc2b85b48b73e276","name":"Remove Mark","func":"msg.payload = {\n name:\"Mark\",\n layer:\"foo\",\n deleted:true\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":320,"y":570,"wires":[["fd654fbf.7e7db","4b5f6be5.96c1f4"]]},{"id":"4b5f6be5.96c1f4","type":"worldmap-hull","z":"fc2b85b48b73e276","name":"","prop":"layer","x":595,"y":255,"wires":[["fd654fbf.7e7db"]]},{"id":"fd654fbf.7e7db","type":"worldmap","z":"fc2b85b48b73e276","name":"","lat":"","lon":"","zoom":"8","layer":"OSMG","cluster":"","maxage":"","usermenu":"show","layers":"show","panit":"false","panlock":"false","zoomlock":"false","hiderightclick":"false","coords":"none","showgrid":"false","path":"/worldmap","overlist":"CO","maplist":"OSMG,OSMC,OSMH,EsriC,EsriS,EsriT","mapname":"","mapurl":"","mapopt":"","mapwms":false,"x":600,"y":360,"wires":[]},{"id":"38179d31.94a972","type":"function","z":"fc2b85b48b73e276","name":"Remove Dave","func":"msg.payload = {\n name:\"Dave\",\n layer:\"foo\",\n deleted:true\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":320,"y":390,"wires":[["4b5f6be5.96c1f4","fd654fbf.7e7db"]]},{"id":"b4ebdd.d201a42","type":"function","z":"fc2b85b48b73e276","name":"Remove Bob","func":"msg.payload = {\n name:\"Bob\",\n layer:\"foo\",\n deleted:true\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":310,"y":435,"wires":[["4b5f6be5.96c1f4","fd654fbf.7e7db"]]},{"id":"4ab765d5.d63b7c","type":"function","z":"fc2b85b48b73e276","name":"Remove Fred","func":"msg.payload = {\n name:\"Fred\",\n layer:\"foo\",\n deleted:true\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":320,"y":480,"wires":[["fd654fbf.7e7db","4b5f6be5.96c1f4"]]},{"id":"41fbcbe1.602224","type":"function","z":"fc2b85b48b73e276","name":"Remove Joe","func":"msg.payload = {\n name:\"Joe\",\n layer:\"foo\",\n deleted:true\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":310,"y":525,"wires":[["4b5f6be5.96c1f4","fd654fbf.7e7db"]]},{"id":"0f4e6585f9afbcd7","type":"inject","z":"fc2b85b48b73e276","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":180,"y":135,"wires":[["7dcb7d4e.f5faa4"]],"l":false},{"id":"6c436bd05eaaa4e3","type":"inject","z":"fc2b85b48b73e276","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":180,"y":180,"wires":[["a498ec44.fde27"]],"l":false},{"id":"e97b916faeca80c5","type":"inject","z":"fc2b85b48b73e276","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":180,"y":225,"wires":[["5c92395d.d709f8"]],"l":false},{"id":"611d3c4798865b0c","type":"inject","z":"fc2b85b48b73e276","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":180,"y":270,"wires":[["1836dc1e.3ec894"]],"l":false},{"id":"3c835edcbc03e15f","type":"inject","z":"fc2b85b48b73e276","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":180,"y":315,"wires":[["d439a183.9d7ca"]],"l":false},{"id":"029fdb18b1447049","type":"inject","z":"fc2b85b48b73e276","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":180,"y":390,"wires":[["38179d31.94a972"]],"l":false},{"id":"9d473630bf56f60d","type":"inject","z":"fc2b85b48b73e276","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":180,"y":435,"wires":[["b4ebdd.d201a42"]],"l":false},{"id":"0efe0d29dc967c6b","type":"inject","z":"fc2b85b48b73e276","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":180,"y":480,"wires":[["4ab765d5.d63b7c"]],"l":false},{"id":"c059eda796d691f4","type":"inject","z":"fc2b85b48b73e276","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":180,"y":525,"wires":[["41fbcbe1.602224"]],"l":false},{"id":"78fe9cfb7d147384","type":"inject","z":"fc2b85b48b73e276","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":180,"y":570,"wires":[["43bc41e8.0385a"]],"l":false},{"id":"26d08e189f6137c0","type":"function","z":"fc2b85b48b73e276","name":"Remove John","func":"msg.payload = {\n name:\"John\",\n layer:\"foo\",\n deleted:true\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":320,"y":615,"wires":[["fd654fbf.7e7db","4b5f6be5.96c1f4"]]},{"id":"ba88e8b9f69dc254","type":"inject","z":"fc2b85b48b73e276","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":180,"y":615,"wires":[["26d08e189f6137c0"]],"l":false}] \ No newline at end of file diff --git a/examples/Split Map With Swipe.json b/examples/Split Map With Swipe.json index 911f895..eb339dc 100644 --- a/examples/Split Map With Swipe.json +++ b/examples/Split Map With Swipe.json @@ -1,112 +1 @@ -[ - { - "id": "2e9ce367.acdb9c", - "type": "worldmap", - "z": "82738787.0e0338", - "name": "", - "lat": "", - "lon": "", - "zoom": "8", - "layer": "OSM", - "cluster": "0", - "maxage": "", - "usermenu": "show", - "layers": "show", - "panit": "false", - "path": "/worldmap", - "x": 580, - "y": 920, - "wires": [] - }, - { - "id": "8d0f8d4c.3cd21", - "type": "function", - "z": "82738787.0e0338", - "name": "remove split", - "func": "msg.payload = {command:{side:\"none\"}};\nreturn msg;", - "outputs": 1, - "noerr": 0, - "x": 390, - "y": 980, - "wires": [ - [ - "2e9ce367.acdb9c" - ] - ] - }, - { - "id": "311acf75.93ff8", - "type": "function", - "z": "82738787.0e0338", - "name": "Satellite", - "func": "msg.payload = {\n command:{\n side: \"Esri Satellite\", \n split: 66,\n showlayer: \"roads\"\n }\n};\nreturn msg;", - "outputs": 1, - "noerr": 0, - "x": 400, - "y": 920, - "wires": [ - [ - "2e9ce367.acdb9c" - ] - ] - }, - { - "id": "eaea1a90.f27b98", - "type": "worldmap in", - "z": "82738787.0e0338", - "name": "", - "path": "/worldmap", - "x": 100, - "y": 920, - "wires": [ - [ - "4540d879.244f88" - ] - ] - }, - { - "id": "4540d879.244f88", - "type": "switch", - "z": "82738787.0e0338", - "name": "", - "property": "payload.action", - "propertyType": "msg", - "rules": [ - { - "t": "eq", - "v": "connected", - "vt": "str" - } - ], - "checkall": "true", - "repair": false, - "outputs": 1, - "x": 250, - "y": 920, - "wires": [ - [ - "311acf75.93ff8" - ] - ] - }, - { - "id": "f77366dc.818138", - "type": "inject", - "z": "82738787.0e0338", - "name": "", - "topic": "", - "payload": "", - "payloadType": "str", - "repeat": "", - "crontab": "", - "once": false, - "onceDelay": 0.1, - "x": 110, - "y": 980, - "wires": [ - [ - "8d0f8d4c.3cd21" - ] - ] - } -] +[{"id":"2e9ce367.acdb9c","type":"worldmap","z":"e956b3364e3ffca6","name":"","lat":"","lon":"","zoom":"8","layer":"OSMG","cluster":"0","maxage":"","usermenu":"show","layers":"show","panit":"false","hiderightclick":"false","coords":"none","path":"/worldmap","overlist":"CO","maplist":"OSMG,OSMC,OSMH,EsriC,EsriS,EsriT,EsriO","mapname":"","mapurl":"","mapopt":"","mapwms":false,"x":570,"y":600,"wires":[]},{"id":"8d0f8d4c.3cd21","type":"function","z":"e956b3364e3ffca6","name":"remove split","func":"msg.payload = {command:{side:\"none\"}};\nreturn msg;","outputs":1,"noerr":0,"x":380,"y":660,"wires":[["2e9ce367.acdb9c"]]},{"id":"311acf75.93ff8","type":"function","z":"e956b3364e3ffca6","name":"Satellite","func":"msg.payload = {\n command:{\n side: \"Esri Satellite\", \n split: 66,\n showlayer: \"roads\"\n }\n};\nreturn msg;","outputs":1,"noerr":0,"x":390,"y":600,"wires":[["2e9ce367.acdb9c"]]},{"id":"eaea1a90.f27b98","type":"worldmap in","z":"e956b3364e3ffca6","name":"","path":"/worldmap","events":"connect","x":90,"y":600,"wires":[["4540d879.244f88"]]},{"id":"4540d879.244f88","type":"switch","z":"e956b3364e3ffca6","name":"","property":"payload.action","propertyType":"msg","rules":[{"t":"eq","v":"connected","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":240,"y":600,"wires":[["311acf75.93ff8"]]},{"id":"f77366dc.818138","type":"inject","z":"e956b3364e3ffca6","name":"","repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"str","x":100,"y":660,"wires":[["8d0f8d4c.3cd21"]]}] \ No newline at end of file diff --git a/examples/Trigger reload of data.json b/examples/Trigger reload of data.json index ee8d664..ea85b1f 100644 --- a/examples/Trigger reload of data.json +++ b/examples/Trigger reload of data.json @@ -1 +1 @@ -[{"id":"62ae3b3c.8de704","type":"worldmap in","z":"f86be7c2.1183b8","name":"","path":"/worldmap","x":140,"y":660,"wires":[["2eadb3d5.d063ec","c47cdeab.f4911","259809c4.43edf6"]]},{"id":"2eadb3d5.d063ec","type":"debug","z":"f86be7c2.1183b8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":310,"y":620,"wires":[]},{"id":"259809c4.43edf6","type":"switch","z":"f86be7c2.1183b8","name":"","property":"payload.action","propertyType":"msg","rules":[{"t":"eq","v":"connected","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":310,"y":660,"wires":[[]]},{"id":"13a00ba8.dcc8e4","type":"comment","z":"f86be7c2.1183b8","name":"Reload trigger","info":"The output from the switch will fire whenever a browser connects (or reconnects).\n\nThis can be used to retrieve stored datapoints and resend them to the map, as by default the main does not retain any sata between refreshes.\n\nThe debug node will show other properties that may be useful to trigger other actions.\n","x":150,"y":620,"wires":[]}] +[{"id":"62ae3b3c.8de704","type":"worldmap in","z":"e956b3364e3ffca6","name":"","path":"/worldmap","events":"connect","x":165,"y":630,"wires":[["2eadb3d5.d063ec","259809c4.43edf6"]]},{"id":"2eadb3d5.d063ec","type":"debug","z":"e956b3364e3ffca6","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":335,"y":590,"wires":[]},{"id":"259809c4.43edf6","type":"switch","z":"e956b3364e3ffca6","name":"","property":"payload.action","propertyType":"msg","rules":[{"t":"eq","v":"connected","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":335,"y":630,"wires":[[]]},{"id":"13a00ba8.dcc8e4","type":"comment","z":"e956b3364e3ffca6","name":"Reload trigger","info":"The output from the switch will fire whenever a browser connects (or reconnects).\n\nThis can be used to retrieve stored datapoints and resend them to the map, as by default the main does not retain any sata between refreshes.\n\nThe debug node will show other properties that may be useful to trigger other actions.\n","x":175,"y":590,"wires":[]}] \ No newline at end of file diff --git a/package.json b/package.json index 3c45154..6f269ee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "node-red-contrib-web-worldmap", - "version": "2.23.1", + "version": "2.23.2", "description": "A Node-RED node to provide a web page of a world map for plotting things on.", "dependencies": { "@turf/bezier-spline": "~6.5.0", @@ -27,6 +27,7 @@ "world" ], "node-red": { + "version": ">=1.0.0", "nodes": { "worldmap": "worldmap.js" } @@ -38,5 +39,8 @@ }, "contributors": [ "@HiroyasuNishiyama" - ] + ], + "engines": { + "node": ">=10" + } } diff --git a/worldmap.js b/worldmap.js index c7f8655..dcf0c2a 100644 --- a/worldmap.js +++ b/worldmap.js @@ -486,16 +486,16 @@ module.exports = function(RED) { node.send(newmsg); } if (leafletHull.length === 2 && (oldl === 1 || oldl === 3)) { - newmsg.payload.deleted = true; - node.send(newmsg); - delete newmsg.payload.deleted; + var newmsg2 = RED.util.cloneMessage(newmsg); + newmsg2.payload.deleted = true; + node.send(newmsg2); newmsg.payload.line = leafletHull; node.send(newmsg); } if (leafletHull.length === 3 && oldl === 2) { - newmsg.payload.deleted = true; - node.send(newmsg); - delete newmsg.payload.deleted; + var newmsg3 = RED.util.cloneMessage(newmsg); + newmsg3.payload.deleted = true; + node.send(newmsg3); } if (leafletHull.length >= 3) { newmsg.payload.area = leafletHull;