diff --git a/src/core/operations/ShowOnMap.mjs b/src/core/operations/ShowOnMap.mjs
new file mode 100644
index 00000000..4a362fec
--- /dev/null
+++ b/src/core/operations/ShowOnMap.mjs
@@ -0,0 +1,113 @@
+/**
+ * @author j433866 [j433866@gmail.com]
+ * @copyright Crown Copyright 2019
+ * @license Apache-2.0
+ */
+
+import Operation from "../Operation";
+import {FORMATS, convertCoordinates} from "../lib/ConvertCoordinates";
+import OperationError from "../errors/OperationError";
+
+/**
+ * Show on map operation
+ */
+class ShowOnMap extends Operation {
+
+ /**
+ * ShowOnMap constructor
+ */
+ constructor() {
+ super();
+
+ this.name = "Show on map";
+ this.module = "Hashing";
+ this.description = "Displays co-ordinates on a slippy map.
Co-ordinates will be converted to decimal degrees before being shown on the map.
Supported formats:
- Degrees Minutes Seconds (DMS)
- Degrees Decimal Minutes (DDM)
- Decimal Degrees (DD)
- Geohash
- Military Grid Reference System (MGRS)
- Ordnance Survey National Grid (OSNG)
- Universal Transverse Mercator (UTM)
This operation will not work offline.";
+ this.infoURL = "";
+ this.inputType = "string";
+ this.outputType = "string";
+ this.presentType = "html";
+ this.args = [
+ {
+ name: "Zoom Level",
+ type: "number",
+ value: 13
+ },
+ {
+ name: "Input Format",
+ type: "option",
+ value: ["Auto"].concat(FORMATS)
+ },
+ {
+ name: "Input Delimiter",
+ type: "option",
+ value: [
+ "Auto",
+ "Direction Preceding",
+ "Direction Following",
+ "\\n",
+ "Comma",
+ "Semi-colon",
+ "Colon"
+ ]
+ }
+ ];
+ }
+
+ /**
+ * @param {string} input
+ * @param {Object[]} args
+ * @returns {string}
+ */
+ run(input, args) {
+ if (input.replace(/\s+/g, "") !== "") {
+ const inFormat = args[1],
+ inDelim = args[2];
+ let latLong;
+ try {
+ latLong = convertCoordinates(input, inFormat, inDelim, "Decimal Degrees", "Comma", "None", 5);
+ } catch (error) {
+ throw new OperationError(error);
+ }
+ latLong = latLong.replace(/[,]$/, "");
+ latLong = latLong.replace(/°/g, "");
+ return latLong;
+ }
+ return input;
+ }
+
+ /**
+ * @param {string} data
+ * @param {Object[]} args
+ * @returns {string}
+ */
+ async present(data, args) {
+ if (data.replace(/\s+/g, "") === "") {
+ data = "0, 0";
+ }
+ const zoomLevel = args[0];
+ const tileUrl = "https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png",
+ tileAttribution = "Wikimedia maps | © OpenStreetMap contributors",
+ leafletUrl = "https://unpkg.com/leaflet@1.5.0/dist/leaflet.js",
+ leafletCssUrl = "https://unpkg.com/leaflet@1.5.0/dist/leaflet.css";
+ return `
+
+
+`;
+ }
+}
+
+export default ShowOnMap;