UNPKG

@flumens/bigu

Version:

British Isles GridRef Utils

1,168 lines (949 loc) 97.6 kB
/*! * * @flumens/bigu 0.4.0 * British Isles GridRef Utils * */ (function(e, a) { for(var i in a) e[i] = a[i]; }(exports, /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) /******/ return installedModules[moduleId].exports; /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ exports: {}, /******/ id: moduleId, /******/ loaded: false /******/ }; /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ // Flag the module as loaded /******/ module.loaded = true; /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ // Load entry module and return exports /******/ return __webpack_require__(0); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _factory = __webpack_require__(1); var _factory2 = _interopRequireDefault(_factory); var _CI = __webpack_require__(3); var _CI2 = _interopRequireDefault(_CI); var _GB = __webpack_require__(15); var _GB2 = _interopRequireDefault(_GB); var _IE = __webpack_require__(16); var _IE2 = _interopRequireDefault(_IE); var _CILatLng = __webpack_require__(8); var _CILatLng2 = _interopRequireDefault(_CILatLng); var _IELatLng = __webpack_require__(12); var _IELatLng2 = _interopRequireDefault(_IELatLng); var _LatLng = __webpack_require__(14); var _LatLng2 = _interopRequireDefault(_LatLng); var _MappingUtils = __webpack_require__(6); var _MappingUtils2 = _interopRequireDefault(_MappingUtils); var _NationalGridCoords = __webpack_require__(5); var _NationalGridCoords2 = _interopRequireDefault(_NationalGridCoords); var _OSCIRef = __webpack_require__(4); var _OSCIRef2 = _interopRequireDefault(_OSCIRef); var _OSGB36LatLng = __webpack_require__(9); var _OSGB36LatLng2 = _interopRequireDefault(_OSGB36LatLng); var _OSIRef = __webpack_require__(13); var _OSIRef2 = _interopRequireDefault(_OSIRef); var _OSRef = __webpack_require__(10); var _OSRef2 = _interopRequireDefault(_OSRef); var _WGS84LatLng = __webpack_require__(7); var _WGS84LatLng2 = _interopRequireDefault(_WGS84LatLng); __webpack_require__(17); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var bigu = { scriptVersions: {}, GridRefParser: _factory2.default, GridRefParserCI: _CI2.default, GridRefParserGB: _GB2.default, GridRefParserIR: _IE2.default, LatLng: _LatLng2.default, CILatLng: _CILatLng2.default, IELatLng: _IELatLng2.default, MappingUtils: _MappingUtils2.default, NationalGridCoords: _NationalGridCoords2.default, OSCIRef: _OSCIRef2.default, OSGB36LatLng: _OSGB36LatLng2.default, OSIRef: _OSIRef2.default, OSRef: _OSRef2.default, WGS84LatLng: _WGS84LatLng2.default }; bigu.scriptVersions.gridref = '001'; bigu.scriptVersions.grParser = '002'; /** * * @param {number} lat * @param {number} lng * @returns {NationalGridCoords} */ bigu.latlng_to_grid_coords = function (lat, lng) { // test if GB if (lng >= -8.74 && lat > 49.88) { // lng extreme must accomodate St Kilda var os = new bigu.WGS84LatLng(lat, lng).to_OSGB1936_latlng().to_os_coords(); if (os.x >= 0 && bigu.MappingUtils.is_gb_hectad(bigu.MappingUtils.gb_coords_to_hectad(os.x, os.y))) { return os; } } // test if Irish if (lng < -5.3 && lat > 51.34 && lng > -11 && lat < 55.73) { var osI = new bigu.WGS84LatLng(lat, lng).to_IE_latlng().to_os_coords(); if (osI.x < 0 || osI.y < 0) { return null; } else { return osI; } } else { var osCi = new bigu.WGS84LatLng(lat, lng).to_CI_latlng().to_os_coords(); if (osCi.x >= 500000 && osCi.x < 600000 && osCi.y >= 5400000 && osCi.y < 5600000) { return osCi; } } return null; //not a valid location }; if (typeof module !== 'undefined' && module.exports) { module.exports = bigu; } exports.default = bigu; /***/ }), /* 1 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _GridRefParser = __webpack_require__(2); var _GridRefParser2 = _interopRequireDefault(_GridRefParser); var _CI = __webpack_require__(3); var _CI2 = _interopRequireDefault(_CI); var _GB = __webpack_require__(15); var _GB2 = _interopRequireDefault(_GB); var _IE = __webpack_require__(16); var _IE2 = _interopRequireDefault(_IE); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * returns a GridRefParser (GB, IE or CI-specific parser) or false * crudely tries to determine the country by trying each country in turn * * @param {string} rawGridRef * @return GridRefParser|FALSE */ _GridRefParser2.default.factory = function (rawGridRef) { var parser; var cleanRef = rawGridRef.replace(/\s+/g, '').toUpperCase(); if (!cleanRef) { return false; } // if canonical ref form then be more efficient if (/^[A-Z]{1,2}\d{2}(?:[A-Z]|[NS][EW]|(?:\d{2}){0,4})?$/.test(cleanRef)) { // have simple well-formed grid ref if (/^.\d/.test(cleanRef)) { parser = new _IE2.default(); } else { if (cleanRef.charAt(0) === 'W') { parser = new _CI2.default(); } else { parser = new _GB2.default(); } } parser.parse_well_formed(cleanRef); return parser.length && !parser.error ? parser : false; } else { parser = new _GB2.default(); parser.parse(cleanRef); if (parser.length && !parser.error) { return parser; } if (cleanRef.charAt(0) === 'W') { parser = new _CI2.default(); parser.parse(cleanRef); if (parser.length && !parser.error) { return parser; } } else { parser = new _IE2.default(); parser.parse(cleanRef); if (parser.length && !parser.error) { return parser; } } } return false; }; exports.default = _GridRefParser2.default; /***/ }), /* 2 */ /***/ (function(module, exports) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); /** * @constructor */ var GridRefParser = function GridRefParser() {}; /** * x,y offsets (in metres) for tetrad letter codes * @type {Object.<string,Array.<number>>} */ GridRefParser.tetradOffsets = { E: [0, 8000], J: [2000, 8000], P: [4000, 8000], U: [6000, 8000], Z: [8000, 8000], D: [0, 6000], I: [2000, 6000], N: [4000, 6000], T: [6000, 6000], Y: [8000, 6000], C: [0, 4000], H: [2000, 4000], M: [4000, 4000], S: [6000, 4000], X: [8000, 4000], B: [0, 2000], G: [2000, 2000], L: [4000, 2000], R: [6000, 2000], W: [8000, 2000], A: [0, 0], F: [2000, 0], K: [4000, 0], Q: [6000, 0], V: [8000, 0] }; /** * x,y offsets (in metres) for quadrant codes * @var array */ GridRefParser.quadrantOffsets = { NW: [0, 5000], NE: [5000, 5000], SW: [0, 0], SE: [5000, 0] }; /** * numerical mapping of letters to numbers * 'I' is omitted * @var array */ GridRefParser.letterMapping = { A: 0, B: 1, C: 2, D: 3, E: 4, F: 5, G: 6, H: 7, J: 8, K: 9, L: 10, M: 11, N: 12, O: 13, P: 14, Q: 15, R: 16, S: 17, T: 18, U: 19, V: 20, W: 21, X: 22, Y: 23, Z: 24 }; /** * tetrad letters ordered by easting then northing (steps of 2000m) * i.e. (x*4) + y * * where x and y are integer of (10km remainder / 2) * * @var string */ GridRefParser.tetradLetters = 'ABCDEFGHIJKLMNPQRSTUVWXYZ'; /** * * @var string */ GridRefParser.prototype.preciseGridRef = ''; /** * Easting in m * @deprecated * @var real */ //GridRefParser.prototype.easting; /** * Northing in m * @deprecated * @var real */ //GridRefParser.prototype.northing; /** * length in m (0 marks an invalid value) * * @var number */ GridRefParser.prototype.length = 0; /** * @var string */ GridRefParser.prototype.hectad = ''; /** * 10km ref with tetrad suffix or '' * e.g. SD59A * @var string */ GridRefParser.prototype.tetrad = ''; /** * * @var string */ GridRefParser.prototype.tetradLetter = ''; /** * quadrant gridref(e.g. NZ34NW) * only set if gridref is defined at 5km or <=1km precision * undefined by default so need to use getter * * read using GridRefParser::get_quadrant * * @var string */ GridRefParser.prototype.quadrant = ''; /** * quadrant code suffix(e.g. NW, NE, SW, SE) * * @var string */ GridRefParser.prototype.quadrantCode = ''; /** * update tetrad using Easting/Northing values (metres) * hectad should have been set prior to call */ GridRefParser.prototype.set_tetrad = function () { this.tetradLetter = GridRefParser.tetradLetters.substr((Math.floor(this.osRef.x % 10000 / 1000) >> 1) * 5 + (Math.floor(this.osRef.y % 10000 / 1000) >> 1), 1); if (!this.tetradLetter) { throw new Error("Failed to get tetrad letter when processing '" + this.preciseGridRef + "', easting=" + this.osRef.x + " northing=" + this.osRef.y); } this.tetrad = this.hectad + this.tetradLetter; }; GridRefParser.get_normalized_precision = function (rawPrecision, minPrecision) { return rawPrecision > 2000 ? 10000 : rawPrecision > 1000 ? 2000 : rawPrecision > 100 ? 1000 : rawPrecision > 10 ? 100 : rawPrecision > 1 ? 10 : minPrecision ? minPrecision : 1; }; exports.default = GridRefParser; /***/ }), /* 3 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _GridRefParser = __webpack_require__(2); var _GridRefParser2 = _interopRequireDefault(_GridRefParser); var _OSCIRef = __webpack_require__(4); var _OSCIRef2 = _interopRequireDefault(_OSCIRef); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * @constructor */ var GridRefParserCI = function GridRefParserCI() {}; GridRefParserCI.prototype = new _GridRefParser2.default(); GridRefParserCI.prototype.constructor = GridRefParserCI; GridRefParserCI.prototype.country = 'CI'; GridRefParserCI.prototype.NationalRef = _OSCIRef2.default; /** * * @param {string} rawGridRef * @throws Error */ GridRefParserCI.prototype.parse = function (rawGridRef) { var trimmedLocality = rawGridRef.replace(/[\[\]\s\t\.\/-]+/g, '').toUpperCase(); var tetradCode = ''; var enl; if (/[ABCDEFGHIJKLMNPQRSTUVWXYZ]$/.test(trimmedLocality)) { // tetrad or quadrant if (_GridRefParser2.default.quadrantOffsets.hasOwnProperty(trimmedLocality.substr(trimmedLocality.length - 2))) { this.quadrantCode = trimmedLocality.substr(trimmedLocality.length - 2); trimmedLocality = trimmedLocality.substr(0, trimmedLocality.length - 2); } else { tetradCode = trimmedLocality.substr(trimmedLocality.length - 1); trimmedLocality = trimmedLocality.substr(0, trimmedLocality.length - 1); } } if (/^(W[AV](?:\d\d){1,5})$/.test(trimmedLocality)) { if (enl = GridRefParserCI.gridref_string_to_e_n_l(trimmedLocality)) { this.length = enl.length; this.osRef = new _OSCIRef2.default(enl.e, enl.n); this.hectad = this.osRef.to_gridref(10000); if (this.length === 10000 && (tetradCode || this.quadrantCode)) { if (tetradCode) { this.preciseGridRef = trimmedLocality + tetradCode; this.tetrad = this.hectad + tetradCode; this.tetradLetter = tetradCode; this.length = 2000; // 2km square this.osRef.x += _GridRefParser2.default.tetradOffsets[tetradCode][0]; this.osRef.y += _GridRefParser2.default.tetradOffsets[tetradCode][1]; } else { // quadrant this.preciseGridRef = trimmedLocality + this.quadrantCode; this.tetradLetter = ''; this.tetrad = ''; this.quadrant = this.preciseGridRef; this.length = 5000; // 5km square this.osRef.x += _GridRefParser2.default.quadrantOffsets[this.quadrantCode][0]; this.osRef.y += _GridRefParser2.default.quadrantOffsets[this.quadrantCode][1]; } } else { this.preciseGridRef = trimmedLocality; if (this.length <= 1000) { // calculate tetrad for precise gridref this.set_tetrad(); } } } else { this.error = true; this.errorMessage = 'Grid reference format not understood (odd length).'; } } else { // no match this.error = true; this.errorMessage = "Channel Island grid reference format not understood. ('" + rawGridRef + "')"; } }; GridRefParserCI.prototype.parse_well_formed = GridRefParserCI.prototype.parse; /** * * * @param {string} gridRef plain string without tetrad or quadrant suffix * @return false|{'eKm' : easting, 'nKm' : northing, 'lengthKm' : length} */ GridRefParserCI.gridref_string_to_e_n_l = function (gridRef) { var northOffset, x, y, length; // assume modern alphabetical sheet ref var chars = gridRef.substr(0, 2); if (chars === 'WA') { northOffset = 5500000; } else if (chars === 'WV') { northOffset = 5400000; } else { Logger("Bad Channel Island grid letters: '" + chars + "'"); return false; } var ref = gridRef.substr(2); switch (ref.length) { case 2: x = ref.charAt(0) * 10000; y = ref.charAt(1) * 10000; length = 10000; //10 km square break; case 4: x = ref.substr(0, 2) * 1000; y = ref.substr(2) * 1000; length = 1000; //1 km square break; case 6: x = ref.substr(0, 3) * 100; y = ref.substr(3) * 100; length = 100; //100m square break; case 8: x = ref.substr(0, 4) * 10; y = ref.substr(4) * 10; length = 10; //10m square break; case 10: x = parseInt(ref.substr(0, 5), 10); y = parseInt(ref.substr(5), 10); length = 1; //1m square break; default: Logger("Bad length for Channel Island grid ref '" + gridRef + "'"); return false; } return { e: x + 500000, n: y + northOffset, length: length }; }; exports.default = GridRefParserCI; /***/ }), /* 4 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _NationalGridCoords = __webpack_require__(5); var _NationalGridCoords2 = _interopRequireDefault(_NationalGridCoords); var _WGS84LatLng = __webpack_require__(7); var _WGS84LatLng2 = _interopRequireDefault(_WGS84LatLng); var _LatLng = __webpack_require__(14); var _LatLng2 = _interopRequireDefault(_LatLng); var _constants = __webpack_require__(11); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * * @param {number} easting metres * @param {number} northing metres * @constructor * @returns {OSCIRef} */ var OSCIRef = function OSCIRef(easting, northing) { this.x = easting; this.y = northing; }; OSCIRef.prototype = new _NationalGridCoords2.default(); OSCIRef.prototype.constructor = OSCIRef; OSCIRef.prototype.country = 'CI'; /** * convert easting,northing to a WGS84 lat lng * * @returns {WGS84LatLng} */ OSCIRef.prototype.to_latLng = function () { //nX = north; //ex = east; var a = 6378388.000; // INT24 ED50 semi-major var b = 6356911.946; // INT24 ED50 semi-minor var e0 = 500000; // easting of false origin var n0 = 0; // northing of false origin var f0 = 0.9996; // INT24 ED50 scale factor on central meridian var e2 = 0.0067226700223333; // INT24 ED50 eccentricity squared var lam0 = -0.0523598775598; // INT24 ED50 false east var phi0 = 0 * _constants.deg2rad; // INT24 ED50 false north var af0 = a * f0; var bf0 = b * f0; var n = (af0 - bf0) / (af0 + bf0); var Et = this.x - e0; var phid = OSCIRef.initialLat(this.y, n0, af0, phi0, n, bf0); var nu = af0 / Math.sqrt(1 - e2 * (Math.sin(phid) * Math.sin(phid))); var rho = nu * (1 - e2) / (1 - e2 * Math.sin(phid) * Math.sin(phid)); var eta2 = nu / rho - 1; var tlat2 = Math.tan(phid) * Math.tan(phid); var tlat4 = Math.pow(Math.tan(phid), 4); var tlat6 = Math.pow(Math.tan(phid), 6); var clatm1 = Math.pow(Math.cos(phid), -1); var VII = Math.tan(phid) / (2 * rho * nu); var VIII = Math.tan(phid) / (24 * rho * (nu * nu * nu)) * (5 + 3 * tlat2 + eta2 - 9 * eta2 * tlat2); var IX = Math.tan(phid) / (720 * rho * Math.pow(nu, 5)) * (61 + 90 * tlat2 + 45 * tlat4); var phip = phid - Et * Et * VII + Math.pow(Et, 4) * VIII - Math.pow(Et, 6) * IX; var X = Math.pow(Math.cos(phid), -1) / nu; var XI = clatm1 / (6 * (nu * nu * nu)) * (nu / rho + 2 * tlat2); var XII = clatm1 / (120 * Math.pow(nu, 5)) * (5 + 28 * tlat2 + 24 * tlat4); var XIIA = clatm1 / (5040 * Math.pow(nu, 7)) * (61 + 662 * tlat2 + 1320 * tlat4 + 720 * tlat6); var lambdap = lam0 + Et * X - Et * Et * Et * XI + Math.pow(Et, 5) * XII - Math.pow(Et, 7) * XIIA; var latLngRadians = OSCIRef.convert_to_wgs(phip, lambdap); return new _WGS84LatLng2.default(latLngRadians.lat * _constants.rad2deg, latLngRadians.lng * _constants.rad2deg); }; OSCIRef.convert_to_wgs = function (phip, lambdap) { var WGS84_AXIS = 6378137; var WGS84_ECCENTRIC = 0.00669438037928458; //OSGB_AXIS = 6377563.396; //OSGB_ECCENTRIC = 0.0066705397616; //IRISH_AXIS = 6377340.189; //IRISH_ECCENTRIC = 0.00667054015; var INT24_AXIS = 6378388.000; var INT24_ECCENTRIC = 0.0067226700223333; var height = 10; // dummy height return _LatLng2.default.transform(phip, lambdap, INT24_AXIS, INT24_ECCENTRIC, height, WGS84_AXIS, WGS84_ECCENTRIC, -83.901, -98.127, -118.635, 0, 0, 0, 0); }; OSCIRef.initialLat = function (north, n0, af0, phi0, n, bf0) { var phi1 = (north - n0) / af0 + phi0; var M = OSCIRef.marc(bf0, n, phi0, phi1); var phi2 = (north - n0 - M) / af0 + phi1; var ind = 0; while (Math.abs(north - n0 - M) > 0.00001 && ind < 20) // max 20 iterations in case of error { ind += 1; phi2 = (north - n0 - M) / af0 + phi1; M = OSCIRef.marc(bf0, n, phi0, phi2); phi1 = phi2; } return phi2; }; OSCIRef.marc = function (bf0, n, phi0, phi) { return bf0 * ((1 + n + 5 / 4 * (n * n) + 5 / 4 * (n * n * n)) * (phi - phi0) - (3 * n + 3 * (n * n) + 21 / 8 * (n * n * n)) * Math.sin(phi - phi0) * Math.cos(phi + phi0) + (15 / 8 * (n * n) + 15 / 8 * (n * n * n)) * Math.sin(2 * (phi - phi0)) * Math.cos(2 * (phi + phi0)) - 35 / 24 * (n * n * n) * Math.sin(3 * (phi - phi0)) * Math.cos(3 * (phi + phi0))); }; OSCIRef.prototype.to_gridref = function (precision) { if (this.y >= 5500000) { return _NationalGridCoords2.default._e_n_to_gr('WA', this.x - 500000, this.y - 5500000, precision ? precision : 1); } else if (this.y < 5500000) { return _NationalGridCoords2.default._e_n_to_gr('WV', this.x - 500000, this.y - 5400000, precision ? precision : 1); } return null; }; exports.default = OSCIRef; /***/ }), /* 5 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _MappingUtils = __webpack_require__(6); var _MappingUtils2 = _interopRequireDefault(_MappingUtils); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * abstract representation of a gridref co-ordinate pair * (*not a gridref string*) * * @constructor * @returns {NationalGridCoords} */ var NationalGridCoords = function NationalGridCoords() {}; /** * * @param {string} letters * @param {number} e metres * @param {number} n metres * @param {number} precision metres * @returns {String} */ NationalGridCoords._e_n_to_gr = function (letters, e, n, precision) { var eString = '00000' + Math.floor(e); var nString = '00000' + Math.floor(n); if (precision === 2000) { return letters + eString.charAt(eString.length - 5) + nString.charAt(nString.length - 5) + _MappingUtils2.default.calculate_tetrad(e, n); } else if (precision === 100000) { return letters; } else { if (precision === 5000) { // ignore quadrant and treat as hectad precision = 10000; } var logPrecision = Math.round(Math.log10(precision)); return letters + (logPrecision ? eString.slice(-5, -logPrecision) + nString.slice(-5, -logPrecision) : eString.slice(-5) + nString.slice(-5)); } }; NationalGridCoords.prototype.toString = function () { return this.x + ',' + this.y; }; exports.default = NationalGridCoords; /***/ }), /* 6 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _NationalGridCoords = __webpack_require__(5); var _NationalGridCoords2 = _interopRequireDefault(_NationalGridCoords); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * @constructor */ var MappingUtils = function MappingUtils() {}; //MappingUtils.prototype = new EventModelObject(); // inherit the event framework //MappingUtils.prototype.constructor = MappingUtils; /** * tetrad letters ordered by easting then northing (steps of 2000m) * i.e. (x*4) + y * * where x and y are integer of (10km remainder / 2) * * @type {string} */ MappingUtils.tetradLetters = 'ABCDEFGHIJKLMNPQRSTUVWXYZ'; /** * tetrad letters ordered by northing then easting (steps of 2000m) * i.e. (y*5) + x * * where x and y are integer of (10km remainder / 2) * * @type {string} */ MappingUtils.tetradLettersRowFirst = 'AFKQVBGLRWCHMSXDINTYEJPUZ'; MappingUtils.irishGrid = { 0: ['V', 'Q', 'L', 'F', 'A'], 1: ['W', 'R', 'M', 'G', 'B'], 2: ['X', 'S', 'N', 'H', 'C'], 3: ['Y', 'T', 'O', 'J', 'D'] }; /** * * @param {number} easting * @param {number} northing * @return {string} tetrad letter */ MappingUtils.calculate_tetrad = function (easting, northing) { return easting >= 0 && northing >= 0 ? MappingUtils.tetradLetters.charAt(Math.floor(easting % 10000 / 2000) * 5 + Math.floor(northing % 10000 / 2000)) : ''; }; /** * * @param {number} easting metres * @param {number} northing metres * @return {string} hectad */ MappingUtils.irish_coords_to_hectad = function (easting, northing) { var hundredkmE = Math.floor(easting / 100000), hundredkmN = Math.floor(northing / 100000); if (MappingUtils.irishGrid[hundredkmE] && MappingUtils.irishGrid[hundredkmE][hundredkmN]) { return MappingUtils.irishGrid[hundredkmE][hundredkmN] + Math.floor(easting % 100000 / 10000) + Math.floor(northing % 100000 / 10000); } else { return ''; } }; /** * * @param {number} easting * @param {number} northing * @returns {?{letter: string, e: number, n: number}} */ MappingUtils.split_ie_coords = function (easting, northing) { var hundredkmE = Math.floor(easting / 100000); var hundredkmN = Math.floor(northing / 100000); if (MappingUtils.irishGrid[hundredkmE] && MappingUtils.irishGrid[hundredkmE][hundredkmN]) { return { letter: MappingUtils.irishGrid[hundredkmE][hundredkmN], e: Math.floor(easting % 100000), n: Math.floor(northing % 100000) }; } else { return null; } }; /** * * @param {number} easting * @param {number} northing * @return {string} hectad */ MappingUtils.gb_coords_to_hectad = function (easting, northing) { var hundredkmE = easting / 100000 | 0; // Math.floor(easting / 100000); var hundredkmN = northing / 100000 | 0; // Math.floor(northing / 100000); var firstLetter = ""; if (hundredkmN < 5) { if (hundredkmE < 5) { firstLetter = "S"; } else { firstLetter = "T"; } } else if (hundredkmN < 10) { if (hundredkmE < 5) { firstLetter = "N"; } else { firstLetter = "O"; } } else { if (hundredkmE < 5) { firstLetter = "H"; } else { firstLetter = "J"; } } var index = 65 + (4 - hundredkmN % 5) * 5 + hundredkmE % 5; if (index >= 73) { index++; } return firstLetter + String.fromCharCode(index) + ( // secondLetter (easting - 100000 * hundredkmE) / 10000 | 0) + ((northing - 100000 * hundredkmN) / 10000 | 0); }; /** * * @param {string} letters * @param {number} e * @param {number} n * @param {number} precision (metres) * @returns {string} */ //MappingUtils._e_n_to_gr = function(letters, e, n, precision) { // var eString = ('00000' + Math.floor(e)); // var nString = ('00000' + Math.floor(n)); // // if (precision === 2000) { // return letters + // eString.charAt(eString.length-5) + nString.charAt(nString.length-5) + // MappingUtils.calculate_tetrad(e, n); // } else if (precision === 100000) { // return letters; // } else { // if (precision === 5000) { // // ignore qudrant and treat as hectad // precision = 10000; // } // // var logPrecision = Math.round(Math.log10(precision)); // // return letters + // (logPrecision ? // (eString.slice(-5, -logPrecision) + nString.slice(-5, -logPrecision)) // : // (eString.slice(-5) + nString.slice(-5)) // ); // } //}; /** * * @param {number} easting * @param {number} northing * @returns {{letter: string, e: number, n: number}} */ MappingUtils.split_gb_coords = function (easting, northing) { var hundredkmE = Math.floor(easting / 100000); var hundredkmN = Math.floor(northing / 100000); var firstLetter; if (hundredkmN < 5) { if (hundredkmE < 5) { firstLetter = "S"; } else { firstLetter = "T"; } } else if (hundredkmN < 10) { if (hundredkmE < 5) { firstLetter = "N"; } else { firstLetter = "O"; } } else { if (hundredkmE < 5) { firstLetter = "H"; } else { firstLetter = "J"; } } var index = 65 + (4 - hundredkmN % 5) * 5 + hundredkmE % 5; if (index >= 73) { index++; } var secondLetter = String.fromCharCode(index); var e = Math.floor(easting - 100000 * hundredkmE); var n = Math.floor(northing - 100000 * hundredkmN); return { letter: firstLetter + secondLetter, e: e, n: n }; }; /** * * @param {number} easting * @param {number} northing * @returns {?string} */ MappingUtils.ci_coords_to_hectad = function (easting, northing) { if (northing > 5500000) { return 'WA' + easting.toString().substring(1, 2) + northing.toString().substring(2, 3); } else if (northing < 5500000) { return 'WV' + easting.toString().substring(1, 2) + northing.toString().substring(2, 3); } return null; }; /** * * @param {number} easting metres * @param {number} northing metres * @param {number=} precision metres default 1 * @return {?{hectad: string, monad: string, gridref: string}} hectad: hectad, monad: monad, gridref: gridref */ MappingUtils.ci_coords_to_grid_square = function (easting, northing, precision) { if (northing > 5500000) { return { hectad: 'WA' + easting.toString().substring(1, 2) + northing.toString().substring(2, 3), monad: 'WA' + easting.toString().substring(1, 3) + northing.toString().substring(2, 4), gridref: _NationalGridCoords2.default._e_n_to_gr('WA', easting - 500000, northing - 5500000, precision ? precision : 1) }; } else if (northing < 5500000) { return { hectad: 'WV' + easting.toString().substring(1, 2) + northing.toString().substring(2, 3), monad: 'WV' + easting.toString().substring(1, 3) + northing.toString().substring(2, 4), gridref: _NationalGridCoords2.default._e_n_to_gr('WV', easting - 500000, northing - 5400000, precision ? precision : 1) }; } return null; }; /** * * @param {number} easting * @param {number} northing * @returns {?{letter: string, e: number, n: number}} */ MappingUtils.split_ci_coords = function (easting, northing) { if (northing > 5500000) { return { letter: 'WA', e: parseInt(easting.toString().substring(1, 6), 10), n: parseInt(northing.toString().substring(2, 7), 10) }; } else if (northing < 5500000) { return { letter: 'WV', e: parseInt(easting.toString().substring(1, 6), 10), n: parseInt(northing.toString().substring(2, 7), 10) }; } return null; }; /** * * @param {string} hectad * @returns {boolean} */ MappingUtils.is_gb_hectad = function (hectad) { return MappingUtils.gbHectads.indexOf(hectad) !== -1; }; MappingUtils.gbHectads = 'SV80SV81SV90SV91SW32SW33SW42SW43SW44SW52SW53SW54SW61SW62SW63SW64SW65SW71SW72SW73SW74SW75SW76SW81SW82SW83SW84SW85SW86SW87SW95SW96SW97SS10SS11SS20SS21SS30SW83SW84SW85SW93SW94SW95SW96SW97SW98SX03SX04SX05SX06SX07SX08SX09SX14SX15SX16SX17SX18SX19SX25SX26SX27SX28SX29SX35SX36SX37SX38SX39SX44SX45SX46SX47SS70SS80SS81SS90SS91ST00ST01ST10ST11ST20ST21ST30SX37SX44SX45SX46SX47SX48SX54SX55SX56SX57SX58SX63SX64SX65SX66SX67SX68SX69SX73SX74SX75SX76SX77SX78SX79SX83SX84SX85SX86SX87SX88SX89SX94SX95SX96SX97SX98SX99SY07SY08SY09SY18SY19SY28SY29SY38SY39SS14SS20SS21SS22SS30SS31SS32SS40SS41SS42SS43SS44SS50SS51SS52SS53SS54SS60SS61SS62SS63SS64SS70SS71SS72SS73SS74SS75SS80SS81SS82SS83SS91SS92ST01ST02SX28SX29SX37SX38SX39SX48SX49SX58SX59SX68SX69SX79SS73SS74SS82SS83SS84SS92SS93SS94ST01ST02ST03ST04ST11ST12ST13ST14ST20ST21ST22ST23ST24ST25ST30ST31ST32ST33ST34ST40ST41ST42ST50ST51ST52ST61ST62ST71ST72ST24ST25ST26ST32ST33ST34ST35ST36ST37ST42ST43ST44ST45ST46ST47ST52ST53ST54ST55ST56ST57ST62ST63ST64ST65ST66ST67ST72ST73ST74ST75ST76ST77ST83ST84ST85ST86SP00SP10ST76ST77ST85ST86ST87ST88ST89ST96ST97ST98ST99SU06SU07SU08SU09SU16SU17SU18SU19SU26SU27SU28SU29SU36SU37ST73ST74ST75ST76ST82ST83ST84ST85ST86ST91ST92ST93ST94ST95ST96SU01SU02SU03SU04SU05SU06SU11SU12SU13SU14SU15SU16SU21SU22SU23SU24SU25SU26SU31SU32SU34SU35SU36ST20ST30ST40ST50ST51ST60ST61ST70ST71ST72ST73ST80ST81ST82ST83ST90ST91ST92SU00SU01SU02SU10SU11SY39SY48SY49SY58SY59SY66SY67SY68SY69SY77SY78SY79SY87SY88SY89SY97SY98SY99SZ07SZ08SZ09SZ28SZ38SZ39SZ47SZ48SZ49SZ57SZ58SZ59SZ68SZ69SU00SU01SU02SU10SU11SU12SU20SU21SU22SU23SU30SU31SU32SU33SU40SU41SU42SU43SU50SU51SU52SU60SU61SU62SU70SU71SU72SZ08SZ09SZ19SZ29SZ38SZ39SZ49SZ59SZ69SZ79SU23SU24SU25SU33SU34SU35SU36SU42SU43SU44SU45SU46SU52SU53SU54SU55SU56SU62SU63SU64SU65SU66SU72SU73SU74SU75SU76SU82SU83SU84SU85SU86SU70SU71SU72SU80SU81SU82SU83SU90SU91SU92SU93SZ79SZ89SZ99TQ00TQ01TQ02TQ03TQ10TQ11TQ12TQ13TQ20TQ21TQ22TQ23TQ30TQ31TQ32TQ20TQ21TQ22TQ23TQ30TQ31TQ32TQ33TQ40TQ41TQ42TQ43TQ44TQ50TQ51TQ52TQ53TQ54TQ60TQ61TQ62TQ63TQ70TQ71TQ72TQ80TQ81TQ82TQ91TQ92TV49TV59TV69TQ65TQ72TQ73TQ74TQ75TQ76TQ77TQ82TQ83TQ84TQ85TQ86TQ87TQ91TQ92TQ93TQ94TQ95TQ96TQ97TR01TR02TR03TR04TR05TR06TR07TR12TR13TR14TR15TR16TR23TR24TR25TR26TR27TR33TR34TR35TR36TR37TR46TR47TQ35TQ36TQ37TQ38TQ43TQ44TQ45TQ46TQ47TQ48TQ53TQ54TQ55TQ56TQ57TQ58TQ63TQ64TQ65TQ66TQ67TQ72TQ73TQ74TQ75TQ76TQ77TQ78TQ87TQ88TQ97SU83SU84SU85SU86SU93SU94SU95SU96SU97TQ03TQ04TQ05TQ06TQ07TQ13TQ14TQ15TQ16TQ17TQ23TQ24TQ25TQ26TQ27TQ33TQ34TQ35TQ36TQ37TQ38TQ43TQ44TQ45TL30TL40TL50TL60TL70TL80TL90TM00TQ38TQ39TQ47TQ48TQ49TQ57TQ58TQ59TQ67TQ68TQ69TQ77TQ78TQ79TQ88TQ89TQ98TQ99TR08TR09TR19TL30TL31TL34TL40TL41TL42TL43TL44TL50TL51TL52TL53TL54TL60TL61TL62TL63TL64TL70TL71TL72TL73TL74TL80TL81TL82TL83TL84TL90TL91TL92TL93TM01TM02TM03TM11TM12TM13TM21TM22TM23TQ49SP81SP90SP91TL00TL01TL02TL10TL11TL12TL13TL20TL21TL22TL23TL24TL30TL31TL32TL33TL34TL41TL42TL43TL44TL51TL52TQ09TQ19TQ29TQ39TL20TL30TQ06TQ07TQ08TQ09TQ16TQ17TQ18TQ19TQ27TQ28TQ29TQ37TQ38TQ39SP20SP30SP40SP41SP50SU19SU26SU27SU28SU29SU36SU37SU38SU39SU46SU47SU48SU49SU56SU57SU58SU59SU66SU67SU68SU69SU76SU77SU78SU86SU87SU88SU96SU97SU98SP10SP20SP21SP22SP23SP30SP31SP32SP33SP34SP40SP41SP42SP43SP44SP45SP50SP51SP52SP53SP54SP60SP61SP62SP63SP70SU29SU39SU49SU57SU58SU59SU67SU68SU69SU77SU78SU79SP51SP53SP60SP61SP62SP63SP64SP70SP71SP72SP73SP74SP80SP81SP82SP83SP84SP85SP90SP91SP92SP93SP94SP95SU78SU79SU88SU89SU97SU98SU99TL00TL01TQ07TQ08TQ09TG40TG50TM03TM04TM05TM06TM07TM13TM14TM15TM16TM17TM23TM24TM25TM26TM27TM28TM33TM34TM35TM36TM37TM38TM39TM44TM45TM46TM47TM48TM49TM57TM58TM59TL64TL65TL66TL67TL68TL74TL75TL76TL77TL78TL83TL84TL85TL86TL87TL88TL93TL94TL95TL96TL97TL98TM03TM04TM05TM06TM07TM08TG00TG01TG02TG03TG04TG10TG11TG12TG13TG14TG20TG21TG22TG23TG24TG30TG31TG32TG33TG40TG41TG42TG50TG51TM07TM08TM09TM17TM18TM19TM27TM28TM29TM38TM39TM49TM59TF40TF41TF42TF50TF51TF52TF53TF60TF61TF62TF63TF64TF70TF71TF72TF73TF74TF80TF81TF82TF83TF84TF90TF91TF92TF93TF94TG00TG01TG02TG03TG04TL49TL59TL68TL69TL78TL79TL87TL88TL89TL98TL99TM07TM08TM09TF20TF30TF31TF40TF41TF50TL15TL19TL23TL24TL25TL26TL28TL29TL33TL34TL35TL36TL37TL38TL39TL44TL45TL46TL47TL48TL49TL54TL55TL56TL57TL58TL59TL63TL64TL65TL66TL67TL68TL69TL75TL76SP91SP92SP93SP94SP95SP96TL01TL02TL03TL04TL05TL06TL07TL11TL12TL13TL14TL15TL16TL23TL24TL25TL06TL07TL08TL09TL15TL16TL17TL18TL19TL25TL26TL27TL28TL29TL36TL37TL38TL39SK90SP43SP44SP45SP46SP53SP54SP55SP56SP57SP58SP63SP64SP65SP66SP67SP68SP73SP74SP75SP76SP77SP78SP79SP84SP85SP86SP87SP88SP89SP95SP96SP97SP98SP99TF00TF10TF20TL06TL07TL08TL09TL18TL19TL29SO70SO71SO80SO81SO82SO83SO90SO91SO92SO93SO94SP00SP01SP02SP03SP04SP10SP11SP12SP13SP14SP15SP20SP21SP22SP23SP24SP25ST99SU09SU19SU29SO50SO51SO60SO61SO62SO63SO70SO71SO72SO73SO80SO81SO82SO83SO90ST57ST58ST59ST66ST67ST68ST69ST76ST77ST78ST79ST87ST88ST89ST98ST99SO10SO11SO20SO21SO22SO23SO30SO31SO32SO40SO41SO42SO50SO51ST18ST19ST27ST28ST29ST37ST38ST39ST47ST48ST49ST58ST59SO22SO23SO24SO25SO26SO32SO33SO34SO35SO36SO37SO41SO42SO43SO44SO45SO46SO47SO51SO52SO53SO54SO55SO56SO57SO61SO62SO63SO64SO65SO66SO73SO74SO75SO76SO56SO64SO65SO66SO67SO72SO73SO74SO75SO76SO77SO78SO82SO83SO84SO85SO86SO87SO88SO93SO94SO95SO96SO97SO98SO99SP03SP04SP05SP06SP07SP08SP13SP14SP16SP17SP18SK10SK20SK30SP04SP05SP06SP07SP08SP09SP14SP15SP16SP17SP18SP19SP22SP23SP24SP25SP26SP27SP28SP29SP33SP34SP35SP36SP37SP38SP39SP44SP45SP46SP47SP48SP49SP55SP56SP57SP58SJ63SJ70SJ71SJ72SJ73SJ74SJ75SJ80SJ81SJ82SJ83SJ84SJ85SJ86SJ90SJ91SJ92SJ93SJ94SJ95SJ96SK00SK01SK02SK03SK04SK05SK06SK10SK11SK12SK13SK14SK15SK16SK20SK21SK22SO77SO78SO79SO88SO89SO98SO99SP08SP09SP19SP29SJ20SJ21SJ22SJ23SJ30SJ31SJ32SJ33SJ34SJ40SJ41SJ42SJ43SJ50SJ51SJ52SJ53SJ54SJ60SJ61SJ62SJ63SJ64SJ70SJ71SJ72SJ73SJ74SJ80SO17SO18SO27SO28SO29SO37SO38SO39SO46SO47SO48SO49SO56SO57SO58SO59SO66SO67SO68SO69SO77SO78SO79SO88SO89SN50SN60SN61SN70SN71SN80SN81SN90SO00SO01SO10SO11SS38SS39SS48SS49SS58SS59SS68SS69SS77SS78SS79SS87SS88SS89SS96SS97SS98SS99ST06ST07ST08ST09ST16ST17ST18ST19ST26ST27ST28SN70SN71SN74SN80SN81SN82SN83SN84SN85SN86SN90SN91SN92SN93SN94SN95SN96SO00SO01SO02SO03SO04SO05SO06SO10SO11SO12SO13SO14SO21SO22SO23SO24SN86SN87SN96SN97SO04SO05SO06SO07SO08SO13SO14SO15SO16SO17SO18SO24SO25SO26SO27SO36SO37SN01SN02SN10SN11SN12SN20SN21SN22SN23SN24SN30SN31SN32SN33SN34SN40SN41SN42SN43SN44SN50SN51SN52SN53SN54SN60SN61SN62SN63SN64SN65SN71SN72SN73SN74SN75SN81SN82SN83SN84SS39SS49SS59SM50SM62SM70SM71SM72SM73SM80SM81SM82SM83SM84SM90SM91SM92SM93SM94SN00SN01SN02SN03SN04SN10SN11SN12SN13SN14SN22SN23SN24SR89SR99SS09SS19SN14SN15SN24SN25SN33SN34SN35SN36SN44SN45SN46SN54SN55SN56SN57SN58SN64SN65SN66SN67SN68SN69SN74SN75SN76SN77SN78SN79SN84SN85SN86SN87SN88SN89SH70SH71SH80SH81SH90SH91SH92SJ00SJ01SJ02SJ03SJ10SJ11SJ12SJ20SJ21SJ22SJ31SN69SN78SN79SN87SN88SN89SN97SN98SN99SO07SO08SO09SO18SO19SO28SO29SO39SH50SH51SH52SH53SH54SH60SH61SH62SH63SH64SH70SH71SH72SH73SH74SH80SH81SH82SH83SH84SH91SH92SH93SH94SH95SJ03SJ04SJ05SJ13SJ14SN59SN69SN79SH12SH13SH22SH23SH24SH32SH33SH34SH43SH44SH45SH46SH53SH54SH55SH56SH57SH64SH65SH66SH67SH74SH75SH76SH77SH78SH84SH85SH86SH87SH88SH74SH75SH76SH77SH84SH85SH86SH87SH88SH94SH95SH96SH97SH98SJ02SJ03SJ04SJ05SJ06SJ07SJ08SJ12SJ13SJ14SJ15SJ16SJ17SJ22SJ23SJ24SJ25SJ26SJ33SJ34SJ35SJ43SJ44SJ45SJ53SJ54SH97SH98SJ06SJ07SJ08SJ15SJ16SJ17SJ18SJ25SJ26SJ27SJ35SJ36SJ37SH27SH28SH29SH36SH37SH38SH39SH46SH47SH48SH49SH56SH57SH58SH59SH67SH68SK81SK82SK83SK84SK85SK86SK87SK90SK91SK92SK93SK94SK95SK96SK97TF00TF01TF02TF03TF04TF05TF06TF07TF10TF11TF12TF13TF14TF15TF16TF17TF20TF21TF22TF23TF24TF25TF30TF31TF32TF33TF34TF41TF42TF43TF44TF52SE60SE70SE71SE80SE81SE82SE90SE91SE92SK78SK79SK87SK88SK89SK97SK98SK99TA00TA01TA02TA10TA11TA12TA20TA21TA30TA31TA40TF07TF08TF09TF15TF16TF17TF18TF19TF24TF25TF26TF27TF28TF29TF33TF34TF35TF36TF37TF38TF39TF43TF44TF45TF46TF47TF48TF49TF54TF55TF56TF57TF58SK20SK21SK30SK31SK32SK40SK41SK42SK43SK50SK51SK52SK60SK61SK62SK70SK71SK72SK73SK74SK80SK81SK82SK83SK84SK90SK91SP39SP48SP49SP57SP58SP59SP68SP69SP78SP79SP89SP99TF00TF01SE60SE70SK42SK43SK44SK45SK46SK52SK53SK54SK55SK56SK57SK58SK59SK62SK63SK64SK65SK66SK67SK68SK69SK72SK73SK74SK75SK76SK77SK78SK79SK84SK85SK86SK87SK88SK89SK97SJ98SJ99SK03SK06SK07SK08SK09SK11SK12SK13SK14SK15SK16SK17SK18SK19SK21SK22SK23SK24SK25SK26SK27SK28SK31SK32SK33SK34SK35SK36SK37SK38SK42SK43SK44SK45SK46SK47SK48SK53SK56SK57SD90SE00SE10SJ18SJ19SJ27SJ28SJ29SJ35SJ36SJ37SJ38SJ39SJ44SJ45SJ46SJ47SJ48SJ54SJ55SJ56SJ57SJ58SJ63SJ64SJ65SJ66SJ67SJ68SJ69SJ74SJ75SJ76SJ77SJ78SJ79SJ85SJ86SJ87SJ88SJ89SJ96SJ97SJ98SJ99SK06SK07SK08SK09SK19SD20SD21SD22SD30SD31SD32SD40SD41SD42SD50SD51SD52SD53SD60SD61SD62SD63SD70SD71SD72SD73SD74SD80SD81SD82SD83SD84SD90SD91SD92SD93SD94SJ29SJ38SJ39SJ48SJ49SJ58SJ59SJ68SJ69SJ79SJ88SJ89SJ99SD22SD23SD32SD33SD34SD35SD36SD42SD43SD44SD45SD46SD47SD52SD53SD54SD55SD56SD57SD63SD64SD65SD66SD67SD68SD73SD78SE53SE54SE62SE63SE64SE65SE72SE73SE74SE75SE76SE82SE83SE84SE85SE86SE87SE92SE93SE94SE95SE96SE97SE98TA02TA03TA04TA05TA06TA07TA08TA12TA13TA14TA15TA16TA17TA18TA21TA22TA23TA24TA26TA27TA31TA32TA33TA41TA42NZ30NZ31NZ40NZ41NZ42NZ50NZ51NZ52NZ60NZ61NZ62NZ70NZ71NZ72NZ80NZ81NZ90NZ91SE37SE38SE39SE46SE47SE48SE49SE55SE56SE57SE58SE59SE64SE65SE66SE67SE68SE69SE75SE76SE77SE78SE79SE86SE87SE88SE89SE97SE98SE99TA08TA09TA18SD84SD90SD91SD92SD93SD94SD95SE00SE01SE02SE03SE04SE10SE11SE12SE13SE14SE20SE21SE22SE23SE30SE31SE32SE33SE40SE41SE42SE50SE51SE52SE60SE61SE62SE70SE71SE72SE81SE82SK18SK19SK28SK29SK38SK39SK47SK48SK49SK57SK58SK59SK69SD54SD55SD64SD65SD66SD67SD68SD73SD74SD75SD76SD77SD78SD84SD85SD86SD87SD88SD94SD95SD96SD97SD98SE04SE05SE06SE07SE13SE14SE15SE16SE17SE23SE24SE25SE26SE27SE32SE33SE34SE35SE36SE37SE42SE43SE44SE45SE46SE52SE53SE54SE55SE56SE62SE63SE64SE65SE72NY72NY80NY81NY82NY90NY91NY92NZ00NZ01NZ02NZ10NZ11NZ20NZ21NZ30NZ31SD68SD69SD78SD79SD88SD89SD97SD98SD99SE07SE08SE09SE17SE18SE19SE27SE28SE29SE36SE37SE38SE39SE46SE47NY73NY74NY82NY83NY84NY92NY93NY94NY95NZ01NZ02NZ03NZ04NZ05NZ11NZ12NZ13NZ14NZ15NZ16NZ20NZ21NZ22NZ23NZ24NZ25NZ26NZ30NZ31NZ32NZ33NZ34NZ35NZ36NZ41NZ42NZ43NZ44NZ45NZ46NZ52NZ53NT60NT70NT80NT90NU00NU10NU20NY58NY59NY64NY65NY66NY67NY68NY69NY74NY75NY76NY77NY78NY79NY84NY85NY86NY87NY88NY89NY94NY95NY96NY97NY98NY99NZ04NZ05NZ06NZ07NZ08NZ09NZ15NZ16NZ17NZ18NZ19NZ26NZ27NZ28NZ29NZ36NZ37NZ38NZ39NT70NT71NT73NT80NT81NT82NT83NT84NT90NT91NT92NT93NT94NT95NU00NU01NU02NU03NU04NU05NU10NU11NU12NU13NU14NU20NU21NU22NU23NZ09NZ19NY20NY21NY30NY31NY40NY41NY42NY50NY51NY52NY53NY60NY61NY62NY63NY70NY71NY72NY73NY80NY81NY82NY83SD16SD17SD18SD19SD26SD27SD28SD29SD36SD37SD38SD39SD46SD47SD48SD49SD57SD58SD59SD67SD68SD69SD78SD79SD89NX90NX91NX92NX93NY00NY01NY02NY03NY04NY05NY10NY11NY12NY13NY14NY15NY16NY20NY21NY22NY23NY24NY25NY26NY31NY32NY33NY34NY35NY36NY37NY41NY42NY43NY44NY45NY46NY47NY48NY52NY53NY54NY55NY56NY57NY58NY62NY63NY64NY65NY66NY67NY68NY73NY74NY75NY84SD08SD09SD17SD18SD19SD28SD29NX30NX40SC16SC17SC26SC27SC28SC36SC37SC38SC39SC47SC48SC49NS60NS61NS70NS71NS72NS80NS81NS90NT00NT01NT10NT11NT20NT21NT30NX69NX78NX79NX88NX89NX96NX97NX98NX99NY05NY06NY07NY08NY09NY16NY17NY18NY19NY26NY27NY28NY29NY36NY37NY38NY39NY47NY48NY49NS50NS60NX36NX37NX38NX45NX46NX47NX48NX49NX54NX55NX56NX57NX58NX59NX64NX65NX66NX67NX68NX69NX74NX75NX76NX77NX78NX79NX84NX85NX86NX87NX88NX95NX96NX97NX98NY05NY06NW95NW96NW97NX03NX04NX05NX06NX07NX13NX14NX15NX16NX17NX24NX25NX26NX27NX33NX34NX35NX36NX37NX43NX44NX45NX46NS00NS10NS14NS15NS16NS20NS21NS23NS24NS25NS26NS30NS31NS32NS33NS34NS35NS36NS40NS41NS42NS43NS44NS45NS50NS51NS52NS53NS54NS55NS60NS61NS62NS63NS64NS71NS72NS73NX07NX08NX09NX17NX18NX19NX27NX28NX29NX37NX38NX39NX48NX49NX59NS16NS17NS26NS27NS35NS36NS37NS44NS45NS46NS47NS54NS55NS56NS64NS65NS66NS53NS54NS55NS56NS57NS63NS64NS65NS66NS67NS71NS72NS73NS74NS75NS76NS77NS80NS81NS82NS83NS84NS85NS86NS87NS90NS91NS92NS93NS94NS95NS96NT00NT01NT02NT03NT04NT05NT14NT01NT02NT03NT04NT05NT11NT12NT13NT14NT15NT21NT22NT23NT24NT25NT32NT33NT34NT10NT11NT20NT21NT22NT23NT30NT31NT32NT33NT34NT41NT42NT43NT44NT53NT20NT30NT31NT40NT41NT42NT43NT44NT50NT51NT52NT53NT54NT60NT61NT62NT63NT64NT70NT71NT72NT73NT74NT81NT82NT83NY39NY47NY48NY49NY58NY59NY69NT44NT45NT46NT53NT54NT55NT56NT63NT64NT65NT66NT73NT74NT75NT76NT77NT83NT84NT85NT86NT87NT94NT95NT96NT36NT37NT45NT46NT47NT48NT55NT56NT57NT58NT65NT66NT67NT68NT76NT77NS95NS96NT05NT06NT15NT16NT17NT24NT25NT26NT27NT34NT35NT36NT37NT43NT44NT45NT46NS86NS87NS95NS96NS97NS98NT06NT07NT08NT16NT17NO00NO01NO10NO11NO20NO21NO22NO30NO31NO32NO40NO41NO42NO50NO51NO52NO60NO61NS99NT08NT09NT18NT19NT28NT29NT39NT49NT59NT69NN30NN31NN40NN41NS38NS39NS47NS48NS49NS57NS58NS59NS67NS68NS69NS77NS78NS79NS86NS87NS88NS89NS97NS98NN21NN22NN30NN31NN32NN40NN41NN42NN50NN51NN52NN60NN61NN70NN71NN80NN81NN90NN91NO00NS49NS59NS69NS79NS88NS89NS98NS99NT08NT09NN22NN23NN32NN33NN34NN35NN42NN43NN44NN45NN46NN47NN51NN52NN53NN54NN55NN56NN57NN61NN62NN63NN64NN65NN66NN67NN71NN72NN73NN74NN75NN76NN77NN81NN82NN83NN84NN85NN86NN90NN91NN92NN93NN94NN95NN96NO00NO01NO02NO03NO04NO11NO12NO13NO21NN56NN57NN66NN67NN68NN76NN77NN78NN86NN87NN88NN94NN95NN96NN97NN98NO02NO03NO04NO05NO06NO07NO08NO11NO12NO13NO14NO15NO16NO17NO21NO22NO23NO24NO25NO32NO33NO34NO15NO16NO17NO23NO24NO25NO26NO27NO28NO32NO33NO34NO35NO36NO37NO38NO42NO43NO44NO45NO46NO47NO48NO53NO54NO55NO56NO57NO58NO63NO64NO65NO66NO67NO74NO75NO76NJ60NJ70NJ80NJ90NO57NO58NO66NO67NO68NO69NO76NO77NO78NO79NO86NO87NO88NO89NO99NH90NJ00NJ10NJ11NJ20NJ21NJ30NJ31NJ32NJ40NJ41NJ42NJ50NJ51NJ52NJ60NJ61NJ62NJ70NJ71NJ72NJ80NJ81NJ82NJ90NJ91NJ92NK02NN98NN99NO07NO08NO09NO17NO18NO19NO27NO28NO29NO37NO38NO39NO48NO49NO58NO59NO68NO69NO79NO89NJ31NJ32NJ33NJ34NJ42NJ43NJ44NJ52NJ53NJ54NJ55NJ62NJ63NJ64NJ65NJ72NJ73NJ74NJ75NJ76NJ82NJ83NJ84NJ85NJ86NJ92NJ93NJ94NJ95NJ96NK02NK03NK04NK05NK06NK13NK14NK15NH90NJ00NJ01NJ10NJ11NJ12NJ13NJ14NJ21NJ22NJ23NJ24NJ25NJ32NJ33NJ34NJ35NJ36NJ42NJ43NJ44NJ45NJ46NJ54NJ55NJ56NJ64NJ65NJ66NJ74NJ75NJ76NJ86NN99NH72NH81NH82NH91NH92NH93NH94NH95NH96NJ00NJ01NJ02NJ03NJ04NJ05NJ06NJ11NJ12NJ13NJ14NJ15NJ16NJ17NJ23NJ24NJ25NJ26NJ27NJ34NJ35NJ36NJ45NH01NH02NH10NH11NH12NH13NH14NH20NH21NH22NH23NH24NH30NH31NH32NH33NH34NH40NH41NH42NH43NH44NH50NH51NH52NH53NH54NH60NH61NH62NH63NH64NH70NH71NH72NH73NH74NH75NH80NH81NH82NH83NH84NH85NH90NH91NH92NH93NH94NH95NH96NJ00NJ01NN39NN46NN47NN48NN49NN56NN57NN58NN59NN67NN68NN69NN77NN78NN79NN88NN89NN98NN99NG60NG70NG71NG72NG80NG81NG82NG90NG91NH00NH01NH10NH20NH30NM46NM47NM54NM55NM56NM57NM64NM65NM66NM67NM68NM69NM74NM75NM76NM77NM78NM79NM84NM85NM86NM87NM88NM89NM95NM96NM97NM98NM99NN05NN06NN07NN08NN09NN16NN17NN18NN19NN26NN27NN28NN29NN35NN36NN37NN38NN39NN46NN47NN48NN49NN57NN58NN59NM70NM71NM72NM73NM80NM81NM82NM83NM84NM90NM91NM92NM93NM94NM95NN00NN01NN02NN03NN04NN05NN10NN11NN12NN13NN14NN15NN16NN20NN21NN22NN23NN24NN25NN26NN30NN33NN34NN35NN36NN44NN45NN46NR79NR88NR89NR96NR97NR98NR99NS06NS07NS08NS09NS16NS17NS18NS19NS28NS29NN20NN21NN30NN31NS28NS29NS37NS38NS39NS46NS47NS48NS56NS57NR82NR83NR84NR92NR93NR94NR95NR96NR97NS01NS02NS03NS04NS05NS06NS07NS15NS16NR50NR51NR60NR61NR62NR63NR64NR65NR67NR68NR70NR71NR72NR73NR74NR75NR76NR77NR78NR79NR83NR84NR85NR86NR87NR88NR89NR95NR96NM40NM60NM61NM70NM71NR15NR16NR24NR25NR26NR27NR34NR35NR36NR37NR38NR39NR44NR45NR46NR47NR48NR49NR56NR57NR58NR59NR67NR68NR69NR79NL93NL94NM04NM05NM15NM16NM21NM22NM23NM24NM25NM26NM31NM32NM33NM34NM35NM41NM42NM43NM44NM45NM51NM52NM53NM54NM55NM61NM62NM63NM64NM72NM73NG13NG14NG15NG20NG23NG24NG25NG26NG30NG31NG32NG33NG34NG35NG36NG37NG38NG40NG41NG42NG43NG44NG45NG46NG47NG50NG51NG52NG53NG54NG55NG56NG60NG61NG62NG63NG64NG65NG66NG71NG72NG82NM19NM29NM37NM38NM39NM47NM48NM49NM59NB90NB91NC00NC01NC10NC11NC20NC21NG63NG64NG65NG72NG73NG74NG75NG76NG77NG78NG79NG82NG83NG84NG85NG86NG87NG88NG89NG91NG92NG93NG94NG95NG96NG97NG98NG99NH00NH01NH02NH03NH04NH05NH06NH07NH08NH09NH10NH11NH15NH16NH17NH18NH19NH27NH28NH29NC10NC20NC21NC30NC31NC40NH02NH03NH04NH05NH06NH07NH12NH13NH14NH15NH16NH17NH19NH23NH24NH25NH26NH27NH28NH29NH34NH35NH36NH37NH38NH39NH44NH45NH46NH47NH48NH49NH54NH55NH56NH57NH58NH59NH64NH65NH66NH67NH68NH69NH75NH76NH77NH78NH86NH87NH88NH97NH98NC22NC30NC31NC32NC33NC40NC41NC42NC43NC50NC51NC52NC60NC61NC62NC63NC70NC71NC72NC73NC74NC80NC81NC82NC83NC84NC90NC91NC92NC93ND01ND02NH49NH59NH68NH69NH78NH79NH88NH89NC01NC02NC03NC10NC11NC12NC13NC14NC15NC16NC20NC21NC22NC23NC24NC25NC26NC27NC31NC32NC33NC34NC35NC36NC37NC42NC43NC44NC45NC46NC52NC53NC54NC55NC56NC62NC63NC64NC65NC66NC73NC74NC75NC76NC83NC84NC85NC86NC93NC94NC95NC96NC92NC93NC94NC95NC96ND01ND02ND03ND04ND05ND06ND07ND12ND13ND14ND15ND16ND17ND23ND24ND25ND26ND27ND33ND34ND35ND36ND37ND47HW63HW83HX62NA00NA10NA64NA74NA81NA90NA91NA92NA93NB00NB01NB02NB03NB10NB11NB12NB13NB14NB20NB21NB22NB23NB24NB30NB31NB32NB33NB34NB35NB40NB41NB42NB43NB44NB45NB46NB52NB53NB54NB55NB56NF09NF19NF56NF58NF60NF61NF66NF67NF68NF70NF71NF72NF73NF74NF75NF76NF77NF80NF81NF82NF83NF84NF85NF86NF87NF88NF89NF95NF96NF97NF98NF99NG07NG08NG09NG18NG19NG29NG49NL57NL58NL68NL69NL79HY10HY20HY21HY22HY23HY30HY31HY32HY33HY34HY35HY40HY41HY42HY43HY44HY45HY50HY51HY52HY53HY54HY55HY60HY61HY62HY63HY64HY73HY74HY75ND19ND28ND29ND38ND39ND47ND48ND49ND59HP40HP50HP51HP60HP61HT93HT94HU14HU15HU16HU24HU25HU26HU27HU28HU30HU31HU32HU33HU34HU35HU36HU37HU38HU39HU40HU41HU42HU43HU44HU45HU46HU47HU48HU49HU53HU54HU55HU56HU57HU58HU59HU66HU67HU68HU69HZ16HZ17HZ26HZ27'; exports.default = MappingUtils; /***/ }), /* 7 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _CILatLng = __webpack_require__(8); var _CILatLng2 = _interopRequireDefault(_CILatLng); var _IELatLng = __webpack_require__(12); var _IELatLng2 = _interopRequireDefault(_IELatLng); var _LatLng = __webpack_require__(14); var _LatLng2 = _interopRequireDefault(_LatLng); var _OSGB36LatLng = __webpack_require__(9); var _OSGB36LatLng2 = _interopRequireDefault(_OSGB36LatLng); var _constants = __webpack_require__(11); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * represents lat lng as WGS84 (google map form) * * @param {number} lat * @param {number} lng * @constructor */ var WGS84LatLng = function WGS84LatLng(lat, lng) { this.lat = lat; this.lng = lng; }; WGS84LatLng.prototype.to_OSGB1936_latlng = function () { //var deg2rad = Math.PI / 180; //var rad2deg = 180.0 / Math.PI; //first off convert to radians var radWGlat = this.lat * _constants.deg2rad; var radWGlon = this.lng * _constants.deg2rad; //these are the values for WGS84(GRS80) to OSGB36(Airy) var a = 6378137; // WGS84_AXIS var e = 0.00669438037928458; // WGS84_ECCENTRIC //var h = height; // height above datum (from GPGGA sentence) var h = 0; var a2 = 6377563.396; // OSGB_AXIS var e2 = 0.0066705397616; // OSGB_ECCENTRIC var xp = -446.448; var yp = 125.157; var zp = -542.06; var xr = -0.1502; var yr = -0.247; var zr = -0.8421; var s = 20.4894; // convert to cartesian; lat, lon are in radians var sf = s * 0.000001; var v = a / Math.sqrt(1 - e * Math.sin(radWGlat) * Math.sin(radWGlat)); var x = (v + h) * Math.cos(radWGlat) * Math.cos(radWGlon); var y = (v + h) * Math.cos(radWGlat) * Math.sin(radWGlon); var z = ((1 - e) * v + h) * Math.sin(radWGlat); // transform cartesian var xrot = xr / 3600 * _constants.deg2rad; var yrot = yr / 3600 * _constants.deg2rad; var zrot = zr / 3600 * _constants.deg2rad; var hx = x + x * sf - y * zrot + z * yrot + xp; var hy = x * zrot + y + y * sf - z * xrot + yp; var hz = -1 * x * yrot + y * xrot + z + z * sf + zp; // Convert back to lat, lon var newLon = Math.atan(hy / hx); var p = Math.sqrt(hx * hx + hy * hy); var newLat = Math.atan(hz / (p * (1 - e2))); v = a2 / Math.sqrt(1 - e2 * (Math.sin(newLat) * Math.sin(newLat))); var errvalue = 1.0; var lat0 = 0; while (errvalue > 0.001) { lat0 = Math.atan((hz + e2 * v * Math.sin(newLat)) / p); errvalue = Math.abs(lat0 - newLat); newLat = lat0; } //convert back to degrees newLat = newLat * _constants.rad2deg; newLon = newLon * _constants.rad2deg; return new _OSGB36LatLng2.default(newLat, newLon); }; WGS84LatLng.prototype.to_IE_latlng = function () { var phip = this.lat * _constants.deg2rad; var lambdap = this.lng * _constants.deg2rad; var IRISH_AXIS = 6377340.189; var IRISH_ECCENTRIC = 0.00667054015; var WGS84_AXIS = 6378137; var WGS84_ECCENTRIC = 0.00669438037928458; /* * IE a = 6377340.189; // OSI semi-major b = 6356034.447; // OSI semi-minor e0 = 200000; // OSI easting of false origin n0 = 250000; // OSI northing of false origin f0 = 1.000035; // OSI scale factor on central meridian e2 = 0.00667054015; // OSI eccentricity squared lam0 = -0.13962634015954636615389526147909; // OSI false east phi0 = 0.93375114981696632365417456114141; // OSI false north */ var height = 0; var latlng = _LatLng2.default.transform(phip, lambdap, WGS84_AXIS, WGS84_ECCENTRIC, hei