let clear heatmap command clear heatmap...

to address Issue #170
pull/174/head
Dave Conway-Jones 3 years ago
parent 2c38c62bd9
commit 2335e7ed9a
No known key found for this signature in database
GPG Key ID: 88BA2B8A411BE9FF

@ -1,5 +1,6 @@
### Change Log for Node-RED Worldmap ### Change Log for Node-RED Worldmap
- v2.15.4 - Let clear heatmap command do what it says.
- v2.15.3 - Fix panit command to work, try to use alt units, popup alignments. - v2.15.3 - Fix panit command to work, try to use alt units, popup alignments.
- v2.15.0 - let speed be text and specify units if required (kt,kn,knots,mph,kmh,kph) default m/s. - v2.15.0 - let speed be text and specify units if required (kt,kn,knots,mph,kmh,kph) default m/s.
- v2.14.0 - Let geojson features be clickable if added as overlay. - v2.14.0 - Let geojson features be clickable if added as overlay.

@ -11,6 +11,7 @@ map web page for plotting "things" on.
### Updates ### Updates
- v2.15.4 - Let clear heatmap command do what it says.
- v2.15.3 - Fix panit command to work, try to use alt units, popup alignments. - v2.15.3 - Fix panit command to work, try to use alt units, popup alignments.
- v2.15.0 - let speed be text and specify units if required (kt,kn,knots,mph,kmh,kph) default m/s. - v2.15.0 - let speed be text and specify units if required (kt,kn,knots,mph,kmh,kph) default m/s.
- v2.14.0 - Let geojson features be clickable if added as overlay. - v2.14.0 - Let geojson features be clickable if added as overlay.

@ -1,177 +1 @@
[ [{"id":"1714967f.e691ea","type":"inject","z":"64eed394.c7935c","name":"","repeat":"","crontab":"","once":false,"onceDelay":"","topic":"","payload":"","payloadType":"str","x":180,"y":800,"wires":[["1b24ad2f.198453"]]},{"id":"1b24ad2f.198453","type":"function","z":"64eed394.c7935c","name":"","func":"// create random position\nvar lat = 51 + Math.random() * 0.2;\nvar lon = -1.45 + Math.random() * 0.2;\nmsg.payload={\n lat:lat, \n lon:lon, \n name:\"Mike\", \n icon:\"male\", \n color:\"#000\"};\nreturn msg;","outputs":1,"noerr":0,"x":360,"y":860,"wires":[["de5c4044.d4e0f","e0ec963913cbf7a9"]]},{"id":"de3a90c8.8179c","type":"ui_button","z":"64eed394.c7935c","name":"","group":"cd81d08b.eebb3","order":0,"width":0,"height":0,"passthru":false,"label":"Move Mike","tooltip":"","color":"","bgcolor":"","icon":"fa-male","payload":"","payloadType":"str","topic":"","topicType":"str","x":180,"y":860,"wires":[["1b24ad2f.198453"]]},{"id":"223f301c.54ea9","type":"comment","z":"64eed394.c7935c","name":"How to embed Map in Dashboard","info":"This example shows how to embed the Worldmap \nwithin the `node-red-dashboard`\n\nThe flow creates a dashboard button that \ngenerates a randon position, with the required \nicon, and passes that to the worldmap. The\nmap is configured to automatically pan to the\nposition of any point that arrives.\n","x":230,"y":740,"wires":[]},{"id":"de5c4044.d4e0f","type":"worldmap-tracks","z":"64eed394.c7935c","name":"","depth":"5","layer":"combined","x":500,"y":820,"wires":[["e0ec963913cbf7a9"]]},{"id":"e0ec963913cbf7a9","type":"ui_worldmap","z":"64eed394.c7935c","group":"cd81d08b.eebb3","order":4,"width":0,"height":0,"name":"","lat":"","lon":"","zoom":"","layer":"","cluster":"","maxage":"","usermenu":"hide","layers":"hide","panit":"true","panlock":"false","zoomlock":"false","hiderightclick":"true","coords":"none","showgrid":"true","allowFileDrop":"false","path":"/worldmap","x":660,"y":860,"wires":[]},{"id":"cd81d08b.eebb3","type":"ui_group","z":"64eed394.c7935c","name":"Default","tab":"b34078e6.e60df8","order":1,"disp":true,"width":"6"},{"id":"b34078e6.e60df8","type":"ui_tab","z":"64eed394.c7935c","name":"Home","icon":"dashboard"}]
{
"id": "9b2a29cc.3c53a8",
"type": "worldmap",
"z": "f59603d8.0a6a",
"name": "",
"lat": "",
"lon": "",
"zoom": "",
"layer": "OSM",
"cluster": "",
"maxage": "",
"usermenu": "hide",
"panit": "true",
"x": 750,
"y": 420,
"wires": []
},
{
"id": "1714967f.e691ea",
"type": "inject",
"z": "f59603d8.0a6a",
"name": "",
"topic": "",
"payload": "",
"payloadType": "str",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": "",
"x": 290,
"y": 360,
"wires": [
[
"1b24ad2f.198453"
]
]
},
{
"id": "1b24ad2f.198453",
"type": "function",
"z": "f59603d8.0a6a",
"name": "",
"func": "// create random position\nvar lat = 51 + Math.random() * 0.2;\nvar lon = -1.45 + Math.random() * 0.2;\nmsg.payload={\n lat:lat, \n lon:lon, \n name:\"Mike\", \n icon:\"male\", \n color:\"#000\"};\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 470,
"y": 420,
"wires": [
[
"9b2a29cc.3c53a8",
"de5c4044.d4e0f"
]
]
},
{
"id": "5af27cae.299144",
"type": "inject",
"z": "f59603d8.0a6a",
"name": "",
"topic": "",
"payload": "",
"payloadType": "str",
"repeat": "",
"crontab": "",
"once": true,
"onceDelay": "",
"x": 270,
"y": 480,
"wires": [
[
"f1be23c1.dd096"
]
]
},
{
"id": "4bab3415.afdf9c",
"type": "ui_template",
"z": "f59603d8.0a6a",
"group": "cd81d08b.eebb3",
"name": "",
"order": 0,
"width": "6",
"height": "6",
"format": "<div ng-bind-html=\"msg.payload | trusted\"></div>",
"storeOutMessages": true,
"fwdInMessages": true,
"templateScope": "local",
"x": 640,
"y": 480,
"wires": [
[]
]
},
{
"id": "f1be23c1.dd096",
"type": "template",
"z": "f59603d8.0a6a",
"name": "",
"field": "payload",
"fieldType": "msg",
"format": "handlebars",
"syntax": "mustache",
"template": "<iframe src=\"../worldmap\" height=300px ></iframe>",
"x": 470,
"y": 480,
"wires": [
[
"4bab3415.afdf9c"
]
]
},
{
"id": "de3a90c8.8179c",
"type": "ui_button",
"z": "f59603d8.0a6a",
"name": "",
"group": "cd81d08b.eebb3",
"order": 0,
"width": 0,
"height": 0,
"label": "Move Mike",
"color": "",
"icon": "fa-male",
"payload": "",
"payloadType": "str",
"topic": "",
"x": 290,
"y": 420,
"wires": [
[
"1b24ad2f.198453"
]
]
},
{
"id": "223f301c.54ea9",
"type": "comment",
"z": "f59603d8.0a6a",
"name": "How to embed Map in Dashboard",
"info": "This example shows how to embed the Worldmap \ninto a template node within the `node-red-dashboard`\n\nThe first flow creates a dashboard button that \ngenerates a randon position, with the required \nicon, and passes that to the worldmap. The\nmap is configured to automatically pan to the\nposition of any point that arrives.\n\nThe second flow initialise the dashboard template\nwith the initial map and sets it to a more square shape\nby adjusting the height.",
"x": 340,
"y": 300,
"wires": []
},
{
"id": "de5c4044.d4e0f",
"type": "worldmap-tracks",
"z": "f59603d8.0a6a",
"name": "",
"depth": "5",
"layer": "combined",
"x": 610,
"y": 380,
"wires": [
[
"9b2a29cc.3c53a8"
]
]
},
{
"id": "cd81d08b.eebb3",
"type": "ui_group",
"z": "f59603d8.0a6a",
"name": "Default",
"tab": "b34078e6.e60df8",
"disp": true,
"width": "6"
},
{
"id": "b34078e6.e60df8",
"type": "ui_tab",
"z": "f59603d8.0a6a",
"name": "Home",
"icon": "dashboard"
}
]

@ -1,6 +1,6 @@
{ {
"name": "node-red-contrib-web-worldmap", "name": "node-red-contrib-web-worldmap",
"version": "2.15.3", "version": "2.15.4",
"description": "A Node-RED node to provide a web page of a world map for plotting things on.", "description": "A Node-RED node to provide a web page of a world map for plotting things on.",
"dependencies": { "dependencies": {
"cgi": "0.3.1", "cgi": "0.3.1",

@ -385,27 +385,32 @@ function doLock(v) {
// Remove old markers // Remove old markers
function doTidyUp(l) { function doTidyUp(l) {
var d = parseInt(Date.now()/1000); if (l === "heatmap") {
for (var m in markers) { heat.setLatLngs([]);
if ((l && (l == markers[m].lay)) || typeof markers[m].ts != "undefined") { }
if ((l && (l == markers[m].lay)) || (markers[m].hasOwnProperty("ts") && (Number(markers[m].ts) < d) && (markers[m].lay !== "_drawing"))) { else {
//console.log("STALE :",m); var d = parseInt(Date.now()/1000);
if (typeof polygons[m+"_"] != "undefined") { for (var m in markers) {
layers[polygons[m+"_"].lay].removeLayer(polygons[m+"_"]); if ((l && (l == markers[m].lay)) || typeof markers[m].ts != "undefined") {
delete polygons[m+"_"]; if ((l && (l == markers[m].lay)) || (markers[m].hasOwnProperty("ts") && (Number(markers[m].ts) < d) && (markers[m].lay !== "_drawing"))) {
} //console.log("STALE :",m);
if (typeof polygons[m] != "undefined") { if (typeof polygons[m+"_"] != "undefined") {
layers[markers[m].lay].removeLayer(polygons[m]); layers[polygons[m+"_"].lay].removeLayer(polygons[m+"_"]);
delete polygons[m]; delete polygons[m+"_"];
}
if (typeof polygons[m] != "undefined") {
layers[markers[m].lay].removeLayer(polygons[m]);
delete polygons[m];
}
layers[markers[m].lay].removeLayer(markers[m]);
delete markers[m];
} }
layers[markers[m].lay].removeLayer(markers[m]);
delete markers[m];
} }
} }
} if (l) {
if (l) { if (layers[l]) { map.removeLayer(layers[l]); layercontrol.removeLayer(layers[l]); delete layers[l]; }
if (layers[l]) { map.removeLayer(layers[l]); layercontrol.removeLayer(layers[l]); delete layers[l]; } if (overlays[l]) { map.removeLayer(overlays[l]); layercontrol.removeLayer(overlays[l]); delete overlays[l]; }
if (overlays[l]) { map.removeLayer(overlays[l]); layercontrol.removeLayer(overlays[l]); delete overlays[l]; } }
} }
} }

Loading…
Cancel
Save