From 24243e5b667156458378e611bd19d599ef52fa12 Mon Sep 17 00:00:00 2001 From: JOE XMG Date: Fri, 22 Jul 2022 10:08:56 +0200 Subject: [PATCH] update change --- public/application/img/sensor.png | Bin 0 -> 17916 bytes public/application/index.html | 90 ++-- public/application/js/cesium_00_Main.js | 3 +- .../application/js/cesium_mouse_handling.js | 219 +++++++++ public/application/js/drawchart.js | 81 +++ public/application/js/pipelo_sta.js | 465 ++++++++++++++++++ public/application/js/staconnector.js | 188 +++++++ public/application/js/staconnector.xlsx | Bin 0 -> 13187 bytes 8 files changed, 1007 insertions(+), 39 deletions(-) create mode 100644 public/application/img/sensor.png create mode 100644 public/application/js/cesium_mouse_handling.js create mode 100644 public/application/js/drawchart.js create mode 100644 public/application/js/pipelo_sta.js create mode 100644 public/application/js/staconnector.js create mode 100644 public/application/js/staconnector.xlsx diff --git a/public/application/img/sensor.png b/public/application/img/sensor.png new file mode 100644 index 0000000000000000000000000000000000000000..1fd7e9ce5977bb8ae9a722b4f3afa3ade3857e84 GIT binary patch literal 17916 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 Z9R8X2^NB7lA!ctbOEVkO3S<1W{{eY$3JL%K literal 0 HcmV?d00001 diff --git a/public/application/index.html b/public/application/index.html index c764e52..764905b 100644 --- a/public/application/index.html +++ b/public/application/index.html @@ -39,7 +39,25 @@ Back to main page
+
Utility Network
+
+ + +
+
+ + +
+
Building
- - -
- - + +

-
- Found technical issue? Please contact Joe -
- -
-
- -
-
- EnSyS-LE @HFT Stuttgart, 2020 - 2022.
- Impressum - Datenschutz -
-
- -
+
+ Found technical issue? Please contact Joe +
+ +
+
+ +
+
+ IQG4iCity @HFT Stuttgart, 2021 - 2022.
+ Impressum + Datenschutz +
+ +
+ +
+ + @@ -106,9 +116,13 @@ - + + + + + diff --git a/public/application/js/cesium_00_Main.js b/public/application/js/cesium_00_Main.js index f76a03a..366d081 100644 --- a/public/application/js/cesium_00_Main.js +++ b/public/application/js/cesium_00_Main.js @@ -413,4 +413,5 @@ $("#util_nw_point").change(function () { utility_Point_Entities[i].label.show = false; } } -}); \ No newline at end of file +}); + diff --git a/public/application/js/cesium_mouse_handling.js b/public/application/js/cesium_mouse_handling.js new file mode 100644 index 0000000..83d0fbc --- /dev/null +++ b/public/application/js/cesium_mouse_handling.js @@ -0,0 +1,219 @@ +const highlighted = { + feature: undefined, + originalColor: new Cesium.Color(), +}; + +// HTML overlay for showing feature name on mouseover +const nameOverlay = document.createElement("div"); +viewer.container.appendChild(nameOverlay); +nameOverlay.className = "backdrop"; +nameOverlay.style.display = "none"; +nameOverlay.style.position = "absolute"; +nameOverlay.style.bottom = "0"; +nameOverlay.style.left = "0"; +nameOverlay.style["pointer-events"] = "none"; +nameOverlay.style.padding = "4px"; +nameOverlay.style.backgroundColor = "#f0f6fb"; +// nameOverlay.style.Color = "white!important"; + +// Information about the currently selected feature +const selected = { + feature: undefined, + originalColor: new Cesium.Color(), +}; + +// An entity object which will hold info about the currently selected feature for infobox display +const selectedEntity = new Cesium.Entity(); + +// Get default left click handler for when a feature is not picked on left click +const clickHandler = viewer.screenSpaceEventHandler.getInputAction( + Cesium.ScreenSpaceEventType.LEFT_CLICK +); + +// Color a feature yellow on hover. +// viewer.screenSpaceEventHandler.setInputAction(function onMouseMove( +// movement +// ) { +// // If a feature was previously highlighted, undo the highlight +// if (Cesium.defined(highlighted.feature)) { +// highlighted.feature.color = highlighted.originalColor; +// highlighted.feature = undefined; +// } +// // Pick a new feature +// const pickedFeature = viewer.scene.pick(movement.endPosition); +// if (!Cesium.defined(pickedFeature)) { +// nameOverlay.style.display = "none"; +// return; +// } +// // A feature was picked, so show it's overlay content +// nameOverlay.style.display = "block"; +// nameOverlay.style.bottom = `${viewer.canvas.clientHeight - movement.endPosition.y}px`; +// nameOverlay.style.left = `${movement.endPosition.x}px`; +// let building_gml_id = pickedFeature.getProperty("gml_id"); +// let building_gml_parent_id = pickedFeature.getProperty("gml_parent_id"); +// nameOverlay.innerHTML = ` +// 3D Building Model
+// GML ID: ${building_gml_id}
+// GML Parent ID: ${building_gml_parent_id} +// `; +// // Highlight the feature if it's not already selected. +// if (pickedFeature !== selected.feature) { +// highlighted.feature = pickedFeature; +// Cesium.Color.clone( +// pickedFeature.color, +// highlighted.originalColor +// ); +// pickedFeature.color = Cesium.Color.YELLOW; +// } +// }, +// Cesium.ScreenSpaceEventType.MOUSE_MOVE); + +// Color a feature on selection and show metadata in the InfoBox. +viewer.screenSpaceEventHandler.setInputAction(function onLeftClick( + movement + ) { + // If a feature was previously selected, undo the highlight + if (Cesium.defined(selected.feature)) { + selected.feature.color = selected.originalColor; + selected.feature = undefined; + $("#attribute-table-area").html("") // refresh the attribute table area + $("#chart_intro").hide() // hide chart title + + } + // Pick a new feature + const pickedFeature = viewer.scene.pick(movement.position); + if (!Cesium.defined(pickedFeature)) { + clickHandler(movement); + return; + } + // Select the feature if it's not already selected + if (selected.feature === pickedFeature) { + return; + } + selected.feature = pickedFeature; + last_picked_3DTiles = pickedFeature; + + //check if it is [3D Tile building] else [Pipe]. + if (!pickedFeature.id) { + var all_selected_property_names = last_picked_3DTiles.getPropertyNames(); + + // Save the selected feature's original color + if (pickedFeature === highlighted.feature) { + Cesium.Color.clone( + highlighted.originalColor, + selected.originalColor + ); + highlighted.feature = undefined; + } else { + Cesium.Color.clone(pickedFeature.color, selected.originalColor); + } + // Highlight newly selected feature + pickedFeature.color = Cesium.Color.LIME; + // Set feature infobox description + const featureName = pickedFeature.getProperty("name"); + selectedEntity.name = featureName; + attribute_text = `` + for (let index = 0; index < all_selected_property_names.length; index++) { + const property_name = all_selected_property_names[index]; + if (pickedFeature.getProperty(property_name) !== null) { + attribute_text += `${property_name}${pickedFeature.getProperty(property_name)}` + } + } + table_attribute_html = ` +
Attribute Table
+ + + ${attribute_text} + +
+ ` + $("#attribute-table-area").html(table_attribute_html) + } else { + + // This case, if users click on the PIPE station + + + // console.log("This is PIPE") + // This case is true when the click feature is PIPE! + var pipe_id = pickedFeature.id.name + var current_pipe_STA_URL = `http://193.196.138.56/iqg4icity_sensor/v1.1/MultiDatastreams(${pipe_sta_map[pipe_id]})/Observations?$orderby=phenomenonTime%20desc` + $("#attribute-table-area").html(` + PIPE: ${pipe_id}
+ STA Multistream ID: ${pipe_sta_map[pipe_id]}
+ STA URL: ${current_pipe_STA_URL} + `) + get_STA_Observation_Value(current_pipe_STA_URL, function (sta_result) { + if (sta_result) { + console.log("STA result return successfully...") + console.log("Drawing Chart...") + var sta_result_time_iso = [] + var sta_result_observation_total_energy = [] + var sta_result_observation_power = [] + var sta_result_observation_vorlauf = [] + var sta_result_observation_ruecklauf = [] + for (let index = 0; index < sta_result.length; index++) { + // example + // [ + // { + // "@iot.id": 451441, + // "phenomenonTime": "2022-07-21T14:30:00.000Z", + // "result": [ + // 129347, Total energy kWh + // 4.6, Power kW + // 73.3, Vorlauf - degree Celsius + // 68.4 Ruecklauf - degree Celsius + // ], + // "resultTime": null, + // "@iot.selfLink": "http://193.196.138.56/iqg4icity_sensor/v1.1/Observations(451441)", + // "FeatureOfInterest@iot.navigationLink": "http://193.196.138.56/iqg4icity_sensor/v1.1/Observations(451441)/FeatureOfInterest", + // "MultiDatastream@iot.navigationLink": "http://193.196.138.56/iqg4icity_sensor/v1.1/Observations(451441)/MultiDatastream", + // "Datastream@iot.navigationLink": "http://193.196.138.56/iqg4icity_sensor/v1.1/Observations(451441)/Datastream" + // }, + // ... + // ] + try { + const sta_result_value = sta_result[sta_result.length - index]; + if (sta_result_value) { + // only continue if the *sta_result_value* is defined. + sta_result_time_iso.push(sta_result_value["phenomenonTime"]) + sta_result_observation_total_energy.push(sta_result_value["result"][0]) + sta_result_observation_power.push(sta_result_value["result"][1]) + sta_result_observation_vorlauf.push(sta_result_value["result"][2]) + sta_result_observation_ruecklauf.push(sta_result_value["result"][3]) + // cleaning data to draw chart... + if (index == sta_result.length - 1) { + // last loop + + inputx = sta_result_time_iso + inputy_vor_vs_rueck = [{ + name: "Vorlauf [degree Celsius]", + data: sta_result_observation_vorlauf + }, + { + name: "Ruecklauf [degree Celsius]", + data: sta_result_observation_ruecklauf + } + ] + $("#chart_intro").show() + drawChart(inputx, inputy_vor_vs_rueck, "line", "#chart_area") + + } + } + + } catch (error) { + console.log(`this loop has STA result: ${sta_result[sta_result.length - index]}`) + console.error(error) + } + + } + + + + } else { + console.log("No STA result...") + } + }); + + } + }, + Cesium.ScreenSpaceEventType.LEFT_CLICK); \ No newline at end of file diff --git a/public/application/js/drawchart.js b/public/application/js/drawchart.js new file mode 100644 index 0000000..bc34bfb --- /dev/null +++ b/public/application/js/drawchart.js @@ -0,0 +1,81 @@ +// chart_type = line, bar +var drawChart = function (data_inputx, data_inputy, chart_type, chart_id) { + if (typeof chart == "object") { + chart.destroy(); + } + var xaxis_type = 'datetime' + var x_tooltip_format = 'dd MMM yy HH:mm' + var options = { + series: data_inputy, + chart: { + type: chart_type, + height: 350, + // foreColor: '#ccc', + foreColor: '#000', + }, + // theme: { + // mode: 'dark', + // }, + background: '#141619', + dataLabels: { + enabled: false, + }, + stroke: { + // curve: 'smooth', + width: 1.5 + }, + responsive: [{ + breakpoint: 480, + options: { + legend: { + position: 'bottom', + // offsetX: -10, + offsetY: 0 + } + } + }], + tooltip: { + theme: 'dark', + // format: 'dd.MM.yy HH:mm', + // datetimeFormatter: { + // year: 'yyyy', + // month: 'MMM yy', + // day: 'dd.MM.yy', + // hour: 'HH:mm dd.MM' + // } + x: { + show: true, + format: x_tooltip_format, + // formatter: undefined, + }, + }, + // grid: { + // borderColor: "#535A6C", + // xaxis: { + // lines: { + // show: true + // } + // } + // }, + xaxis: { + categories: data_inputx, + labels: { + // style: { + // fontSize: '15px', + // fontWeight: 800, + // }, + datetimeFormatter: { + year: 'yyyy', + month: 'MM.yy', + day: "dd.MM.yy", + hour: 'dd.MM.yy HH:mm' + } + }, + type: xaxis_type, + } + }; + + chart = new ApexCharts(document.querySelector(chart_id), options); + chart.render(); + +} \ No newline at end of file diff --git a/public/application/js/pipelo_sta.js b/public/application/js/pipelo_sta.js new file mode 100644 index 0000000..e5cca70 --- /dev/null +++ b/public/application/js/pipelo_sta.js @@ -0,0 +1,465 @@ +var pipe_lo = [ + { + "devEUI": "94193A01010005C5", + "address": "Zollhüttengasse 9", + "lat": "49.109733", + "long": "9.733305" + }, + { + "devEUI": "94193A01010005C6", + "address": "Lange Str. 8", + "lat": "49.11223828741425", + "long": "9.732123180270873" + }, + { + "devEUI": "94193A01010005C7", + "address": "Glockengasse 3", + "lat": "49.111454", + "long": "9.733045" + }, + { + "devEUI": "94193A01010005C8", + "address": "Weilertor 14", + "lat": "49.11464640910398", + "long": "9.732766015328936" + }, + { + "devEUI": "94193A01010005C9", + "address": "Bahnhofstr. 6 (1)", + "lat": "49.110157", + "long": "9.734005" + }, + { + "devEUI": "94193A01010005CE", + "address": "Im Weiler 1", + "lat": "49.113261", + "long": "9.732631" + }, + { + "devEUI": "94193A01010005CF", + "address": "Lange Str. 46", + "lat": "49.110256", + "long": "9.732367" + }, + { + "devEUI": "94193A01010005D0", + "address": "Lange Str. 53", + "lat": "49.109968", + "long": "9.732556" + }, + { + "devEUI": "94193A01010005D1", + "address": "Bahnhofstr. 18", + "lat": "49.109125", + "long": "9.733989" + }, + { + "devEUI": "94193A01010005D2", + "address": "Lange Str. 33/1", + "lat": "49.110770825444256", + "long": "9.732588104997308" + }, + { + "devEUI": "94193A01010005D3", + "address": "Lange Str. 55", + "lat": "49.1097670588301", + "long": "9.7326409543048" + }, + { + "devEUI": "94193A01010005D4", + "address": "", + "lat": "49.11063843049948", + "long": "9.735850095748901" + }, + { + "devEUI": "94193A01010005D5", + "address": "Bahnhofstr. 25", + "lat": "49.109054", + "long": "9.735130" + }, + { + "devEUI": "94193A01010005D6", + "address": "Bahnhofstr. 17", + "lat": "49.109744", + "long": "9.734629" + }, + { + "devEUI": "94193A01010005D8", + "address": "Heimbacher Gasse 2", + "lat": "49.113037", + "long": "9.732630" + }, + { + "devEUI": "94193A01010005D9", + "address": "Im Lindach 9", + "lat": "49.108809", + "long": "9.735979" + }, + { + "devEUI": "94193A01010005DB", + "address": "Im Lindach 1", + "lat": "49.110038", + "long": "9.734933" + }, + { + "devEUI": "94193A01010005DD", + "address": "Heimbacher Gasse 6", + "lat": "49.112780", + "long": "9.732079" + }, + { + "devEUI": "94193A01010006C0", + "address": "Bahnhofstr. 21", + "lat": "49.109279", + "long": "9.734970" + }, + { + "devEUI": "94193A01010006C4", + "address": "Lange Str. 29 (1)", + "lat": "49.111098", + "long": "9.732556" + }, + { + "devEUI": "94193A010100073A", + "address": "Hirschgraben 11-13", + "lat": "49.111321", + "long": "9.731331" + }, + { + "devEUI": "94193A010100073D", + "address": "Lange Str. 29 (2)", + "lat": "49.111098", + "long": "9.732653" + }, + { + "devEUI": "94193A0101000745", + "address": " Netzstation Weilerwiese Schiene 2", + "lat": "49.11638970127192", + "long": "9.733147184723265" + }, + { + "devEUI": "94193A0101000746", + "address": "Bahnhofstr. 15", + "lat": "49.110003", + "long": "9.734461" + }, + { + "devEUI": "94193A0101000747", + "address": "Lange Str. 38 (Kirche)", + "lat": "49.11087122198257", + "long": "9.731906956093749" + }, + { + "devEUI": "94193A010100074A", + "address": "Bahnhofstr. 19", + "lat": "49.109518", + "long": "9.734868" + }, + { + "devEUI": "94193A010100074B", + "address": "Lange Str. 48", + "lat": "49.110136", + "long": "9.732347" + }, + { + "devEUI": "94193A010100074D", + "address": " ", + "lat": "49.111594", + "long": "9.734530" + }, + { + "devEUI": "94193A010100074E", + "address": "Lange Str. 2", + "lat": "49.112510", + "long": "9.732079" + }, + { + "devEUI": "94193A010100074F", + "address": "Mauerstr. 6", + "lat": "49.112085", + "long": "9.732937" + }, + { + "devEUI": "94193A0101000751", + "address": "Mauerstr. 21", + "lat": "49.110589", + "long": "9.734021" + }, + { + "devEUI": "94193A0101000755", + "address": "Im Lindach 8 (1)", + "lat": "49.108996", + "long": "9.736708" + }, + { + "devEUI": "94193A0101000759", + "address": "Mauer Str. 21/1 (1)", + "lat": "49.110511", + "long": "9.733797" + }, + { + "devEUI": "94193A010100075B", + "address": "Im Lindach 8 (2)", + "lat": "49.108949", + "long": "9.736767" + }, + { + "devEUI": "94193A010100075F", + "address": "Bahnhofstr. 12", + "lat": "49.109862", + "long": "9.734294" + }, + { + "devEUI": "94193A0101000762", + "address": "Bahnhofstr. 6 (2)", + "lat": "49.110175", + "long": "9.733973" + }, + { + "devEUI": "94193A010200143B", + "address": " Wüstenrot (1)", + "lat": "49.07746426313434", + "long": "9.46300506591797" + }, + { + "devEUI": "94193A0101000764", + "address": "Wüstenrot (2)", + "lat": "49.075665114793", + "long": "9.461975097656252" + }, + { + "devEUI": "94193A0101000765", + "address": "Wüstenrot (3)", + "lat": "49.07341608772624", + "long": "9.461975097656252" + }, + { + "devEUI": "94193A0101000766", + "address": " ", + "lat": "49.111594", + "long": "9.734530" + }, + { + "devEUI": "94193A0101000767", + "address": "Lange Str. 40", + "lat": "49.110510", + "long": "9.732329" + }, + { + "devEUI": "94193A0101000768", + "address": "Netzstation Weilerwiese Schiene 1", + "lat": "49.11639178901025", + "long": "9.732831404220839" + }, + { + "devEUI": "94193A0101000769", + "address": "Wüstenrot (4)", + "lat": "49.0711669588361", + "long": "9.461631774902346" + }, + { + "devEUI": "94193A010100076A", + "address": "Mauerstr. 21/1 (2)", + "lat": "49.110501", + "long": "9.733790" + }, + { + "devEUI": "94193A01010007C5", + "address": "Zollhüttengasse 24", + "lat": "49.109613", + "long": "9.732637" + }, + { + "devEUI": "94193A01010007CA", + "address": "Heimbacher Gasse 21", + "lat": "49.112261", + "long": "9.730727" + }, + { + "devEUI": "94193A01010007CE", + "address": "Gänsberg 1", + "lat": "49.110477", + "long": "9.732133" + }, + { + "devEUI": "94193A01010007CF", + "address": "Wüstenrot (5)", + "lat": "49.068692799449586", + "long": "9.46128845214844" + }, + { + "devEUI": "94193A0101000825", + "address": "Zollhüttengasse 10", + "lat": "49.109926", + "long": "9.733291" + }, + { + "devEUI": "94193A0101000826", + "address": "Lange Str. 44", + "lat": "49.110336978502815", + "long": "9.732188679258906" + }, + { + "devEUI": "94193A0101000827", + "address": "Bahnhofstr. 28", + "lat": "49.108569", + "long": "9.734981" + }, + { + "devEUI": "94193A0101000829", + "address": "Lange Str. 23 ", + "lat": "49.111284821188725", + "long": "9.732502501907454" + }, + { + "devEUI": "94193A010100082A", + "address": "Lange Str. 47", + "lat": "49.110150", + "long": "9.732538" + }, + { + "devEUI": "94193A0101000832", + "address": " ", + "lat": "49.111594", + "long": "9.734530" + }, + { + "devEUI": "94193A01010008A5", + "address": "Testgerät Pliezhausen", + "lat": "49.10410739462646", + "long": "9.745154678821565" + }, + { + "devEUI": "94193A01010008A6", + "address": "Bahnhofstr. 20", + "lat": "49.108880", + "long": "9.733999" + }, + { + "devEUI": "94193A01010008B0", + "address": "Im Lindach 4", + "lat": "49.109789", + "long": "9.735469" + }, + { + "devEUI": "94193A01010008D6", + "address": "Heimbacher Gasse 14", + "lat": "49.112798", + "long": "9.731505" + }, + { + "devEUI": "94193A01010008FD", + "address": "Lange Str. 41", + "lat": "49.110417", + "long": "9.732562" + }, + { + "devEUI": "94193A0101000911", + "address": "Im Weiler 26", + "lat": "49.113834", + "long": "9.731827" + }, + { + "devEUI": "94193A0101000919", + "address": "Katharinenstr. 8", + "lat": "49.111807", + "long": "9.731235" + }, + { + "devEUI": "94193A010100091B", + "address": "Mauerstr. 21/1 (3)", + "lat": "49.110487", + "long": "9.733796" + }, + { + "devEUI": "94193A010100091F", + "address": "Im Weiler 6", + "lat": "49.113438", + "long": "9.732733" + }, + { + "devEUI": "94193A010100092D", + "address": "Lange Str. 4", + "lat": "49.112398", + "long": "9.732138" + }, + { + "devEUI": "94193A0101000930", + "address": "Kirchgasse 9 (1)", + "lat": "49.111041485727355", + "long": "9.732805959216694" + }, + { + "devEUI": "94193A0101000931", + "address": "Kirchgasse 9 (2)", + "lat": "49.111011", + "long": "9.732798" + }, + { + "devEUI": "94193A0101000932", + "address": "Heimbacher Gasse 5-7", + "lat": "49.112517", + "long": "9.731945" + }, + { + "devEUI": "94193A010100093A", + "address": "Lange Str. 10", + "lat": "49.112191", + "long": "9.732165" + }, + { + "devEUI": "94193A010100093F", + "address": "Katharinenstr. 12", + "lat": "49.111471", + "long": "9.731516" + }, + { + "devEUI": "94193A010100094B", + "address": "Katharinenstr. 14", + "lat": "49.111347", + "long": "9.731643" + }, + { + "devEUI": "94193A0101000957", + "address": "Wüstenrot (6)", + "lat": "49.06576863405361", + "long": "9.46128845214844" + }, + { + "devEUI": "94193A0101000A0D", + "address": "Bahnhofstr. 14", + "lat": "49.109725", + "long": "9.734180" + } +] + + +// draw Pipe Location + +var pipe_lo_entities= []; + +for (let i = 0; i < pipe_lo.length; i++) { + var name_devEUI = pipe_lo[i]["devEUI"]; + var pipe_lon = pipe_lo[i]["long"]; + var pipe_lat = pipe_lo[i]["lat"]; + + const url = Cesium.buildModuleUrl("Assets/Textures/maki/grocery.png"); + + pipe_lo_entities[i] = viewer.entities.add({ + name: name_devEUI, + position: Cesium.Cartesian3.fromDegrees(pipe_lon,pipe_lat), + description: "PIPE Station: " + name_devEUI, + billboard: { + // image: pinBuilder.fromText('Sensor', Cesium.Color.BLUE.withAlpha(0.9), 48).toDataURL(), + // MakiIcon List: https://github.com/mapbox/maki/tree/main/icons + // https://sandcastle.cesium.com/index.html?src=GeoJSON%20simplestyle.html + // image: pinBuilder.fromMakiIconId("hospital", Cesium.Color.RED, 48).toDataURL(), + image: pinBuilder.fromUrl(url, Cesium.Color.GREEN, 48).toDataURL(), + verticalOrigin: Cesium.VerticalOrigin.BOTTOM, + heightReference: "CLAMP_TO_GROUND", + show: true, + disableDepthTestDistance: 999999 + } + }); +} + diff --git a/public/application/js/staconnector.js b/public/application/js/staconnector.js new file mode 100644 index 0000000..cca0ef0 --- /dev/null +++ b/public/application/js/staconnector.js @@ -0,0 +1,188 @@ +// var STA_IQG_URL = "http://193.196.138.56/iqg4icity_sensor/v1.1/MultiDatastreams(1)/Observations?$orderby=phenomenonTime%20desc" + +function get_STA_Observation_Value(STA_URL , cb) { + var settings = { + "url": STA_URL, + "method": "GET", + }; + + $.ajax(settings).done(function (response) { + console.log(response); + try { + var result_value = response["value"] + // example + // [ + // { + // "@iot.id": 451441, + // "phenomenonTime": "2022-07-21T14:30:00.000Z", + // "result": [ + // 129347, + // 4.6, + // 73.3, + // 68.4 + // ], + // "resultTime": null, + // "@iot.selfLink": "http://193.196.138.56/iqg4icity_sensor/v1.1/Observations(451441)", + // "FeatureOfInterest@iot.navigationLink": "http://193.196.138.56/iqg4icity_sensor/v1.1/Observations(451441)/FeatureOfInterest", + // "MultiDatastream@iot.navigationLink": "http://193.196.138.56/iqg4icity_sensor/v1.1/Observations(451441)/MultiDatastream", + // "Datastream@iot.navigationLink": "http://193.196.138.56/iqg4icity_sensor/v1.1/Observations(451441)/Datastream" + // }, + // ... + // ] + cb(response["value"]) + } catch (error) { + console.error(error) + cb(null) + } + }); +} + + +var pipe_sta_map = { + "94193A01010005C5": 1, + "94193A01010005C6": 2, + "94193A01010005C7": 3, + "94193A01010005C8": 4, + "94193A01010005C9": 5, + "94193A01010005CE": 6, + "94193A01010005CF": 7, + "94193A01010005D0": 8, + "94193A01010005D1": 9, + "94193A01010005D2": 10, + "94193A01010005D3": 11, + "94193A01010005D4": 12, + "94193A01010005D5": 13, + "94193A01010005D6": 14, + "94193A01010005D8": 15, + "94193A01010005D9": 16, + "94193A01010005DB": 17, + "94193A01010005DD": 18, + "94193A01010006C0": 19, + "94193A01010006C4": 20, + "94193A010100073A": 21, + "94193A010100073D": 22, + "94193A0101000745": 23, + "94193A0101000746": 24, + "94193A0101000747": 25, + "94193A010100074A": 26, + "94193A010100074B": 27, + "94193A010100074D": 28, + "94193A010100074E": 29, + "94193A010100074F": 30, + "94193A0101000751": 31, + "94193A0101000755": 32, + "94193A0101000759": 33, + "94193A010100075B": 34, + "94193A010100075F": 35, + "94193A0101000762": 36, + "94193A010200143B": 37, + "94193A0101000764": 38, + "94193A0101000765": 39, + "94193A0101000766": 40, + "94193A0101000767": 41, + "94193A0101000768": 42, + "94193A0101000769": 43, + "94193A010100076A": 44, + "94193A01010007C5": 45, + "94193A01010007CA": 46, + "94193A01010007CE": 47, + "94193A01010007CF": 48, + "94193A0101000825": 49, + "94193A0101000826": 50, + "94193A0101000827": 51, + "94193A0101000829": 52, + "94193A010100082A": 53, + "94193A0101000832": 54, + "94193A01010008A5": 55, + "94193A01010008A6": 56, + "94193A01010008B0": 57, + "94193A01010008D6": 58, + "94193A01010008FD": 59, + "94193A0101000911": 60, + "94193A0101000919": 61, + "94193A010100091B": 62, + "94193A010100091F": 63, + "94193A010100092D": 64, + "94193A0101000930": 65, + "94193A0101000931": 66, + "94193A0101000932": 67, + "94193A010100093A": 68, + "94193A010100093F": 69, + "94193A010100094B": 70, + "94193A0101000957": 71, + "94193A0101000A0D": 72, +} +var reverse_mapping = { + 1: "94193A01010005C5", + 2: "94193A01010005C6", + 3: "94193A01010005C7", + 4: "94193A01010005C8", + 5: "94193A01010005C9", + 6: "94193A01010005CE", + 7: "94193A01010005CF", + 8: "94193A01010005D0", + 9: "94193A01010005D1", + 10: "94193A01010005D2", + 11: "94193A01010005D3", + 12: "94193A01010005D4", + 13: "94193A01010005D5", + 14: "94193A01010005D6", + 15: "94193A01010005D8", + 16: "94193A01010005D9", + 17: "94193A01010005DB", + 18: "94193A01010005DD", + 19: "94193A01010006C0", + 20: "94193A01010006C4", + 21: "94193A010100073A", + 22: "94193A010100073D", + 23: "94193A0101000745", + 24: "94193A0101000746", + 25: "94193A0101000747", + 26: "94193A010100074A", + 27: "94193A010100074B", + 28: "94193A010100074D", + 29: "94193A010100074E", + 30: "94193A010100074F", + 31: "94193A0101000751", + 32: "94193A0101000755", + 33: "94193A0101000759", + 34: "94193A010100075B", + 35: "94193A010100075F", + 36: "94193A0101000762", + 37: "94193A010200143B", + 38: "94193A0101000764", + 39: "94193A0101000765", + 40: "94193A0101000766", + 41: "94193A0101000767", + 42: "94193A0101000768", + 43: "94193A0101000769", + 44: "94193A010100076A", + 45: "94193A01010007C5", + 46: "94193A01010007CA", + 47: "94193A01010007CE", + 48: "94193A01010007CF", + 49: "94193A0101000825", + 50: "94193A0101000826", + 51: "94193A0101000827", + 52: "94193A0101000829", + 53: "94193A010100082A", + 54: "94193A0101000832", + 55: "94193A01010008A5", + 56: "94193A01010008A6", + 57: "94193A01010008B0", + 58: "94193A01010008D6", + 59: "94193A01010008FD", + 60: "94193A0101000911", + 61: "94193A0101000919", + 62: "94193A010100091B", + 63: "94193A010100091F", + 64: "94193A010100092D", + 65: "94193A0101000930", + 66: "94193A0101000931", + 67: "94193A0101000932", + 68: "94193A010100093A", + 69: "94193A010100093F", + 70: "94193A010100094B", + 71: "94193A0101000957", + 72: "94193A0101000A0D", +} \ No newline at end of file diff --git a/public/application/js/staconnector.xlsx b/public/application/js/staconnector.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..bdc2f2fef1fe1dc05a56f740f1a827bf02e14c72 GIT binary patch literal 13187 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 PH%I^@h!H$wx_$dU)A>OM literal 0 HcmV?d00001 -- GitLab