@iota/area-codes
Version:
IOTA Area Codes (IAC) JavaScript
69 lines • 4.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const open_location_code_typescript_1 = require("open-location-code-typescript");
const alphabet_1 = require("./alphabet");
const codePrecision_1 = require("./codePrecision");
const internal_1 = require("./internal");
const validation_1 = require("./validation");
/**
* Encode a location into an IOTA Area Code.
* @param latitude The latitude in signed decimal degrees. Values less than -90 will be clipped to -90, values over 90 will be clipped to 90.
* @param longitude The longitude in signed decimal degrees. This will be normalised to the range -180 to 180.
* @param precision The desired code length. If omitted, CodePrecision.NORMAL will be used. For precision CodePrecision.EXTRA is recommended.
* @returns The IOTA Area Code for the location.
*/
function encode(latitude, longitude, precision = codePrecision_1.CodePrecision.NORMAL) {
if (precision < 2) {
throw new Error("The precision is not valid");
}
return fromOpenLocationCode(open_location_code_typescript_1.default.encode(latitude, longitude, precision));
}
exports.encode = encode;
/**
* Decode an IOTA Area Code into a location.
* @param iotaAreaCode The IOTA Area Code to convert.
* @returns The location object.
*/
function decode(iotaAreaCode) {
const olc = open_location_code_typescript_1.default.decode(toOpenLocationCode(iotaAreaCode));
return {
latitude: olc.latitudeCenter,
longitude: olc.longitudeCenter,
codePrecision: olc.codeLength,
latitudeLow: olc.latitudeLo,
latitudeHigh: olc.latitudeHi,
longitudeLow: olc.longitudeLo,
longitudeHigh: olc.longitudeHi
};
}
exports.decode = decode;
/**
* Convert the Open Location Code to IOTA Area Code.
* @param openLocationCode The Open Location Code to convert.
* @returns The IOTA Area Code.
*/
function fromOpenLocationCode(openLocationCode) {
if (!open_location_code_typescript_1.default.isValid(openLocationCode)) {
throw new Error("The openLocationCode is not valid");
}
let iac = "";
for (let i = 0; i < openLocationCode.length; i++) {
const idx = alphabet_1.OLC_APHABET.indexOf(openLocationCode[i]);
iac += alphabet_1.IAC_APHABET[idx];
}
return iac;
}
exports.fromOpenLocationCode = fromOpenLocationCode;
/**
* Convert the IOTA Area Code to Open Location Code.
* @param iotaAreaCode The IOTA Area Code to convert.
* @returns The Open Location Code.
*/
function toOpenLocationCode(iotaAreaCode) {
if (!validation_1.isValid(iotaAreaCode)) {
throw new Error("The iotaAreaCode is not valid");
}
return internal_1.iacToOlcInternal(iotaAreaCode);
}
exports.toOpenLocationCode = toOpenLocationCode;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb252ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaUZBQTZEO0FBQzdELHlDQUFzRDtBQUN0RCxtREFBZ0Q7QUFFaEQseUNBQThDO0FBQzlDLDZDQUF1QztBQUV2Qzs7Ozs7O0dBTUc7QUFDSCxTQUFnQixNQUFNLENBQUMsUUFBZ0IsRUFBRSxTQUFpQixFQUFFLFlBQW9CLDZCQUFhLENBQUMsTUFBTTtJQUNoRyxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUU7UUFDZixNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7S0FDakQ7SUFFRCxPQUFPLG9CQUFvQixDQUFDLHVDQUFnQixDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDekYsQ0FBQztBQU5ELHdCQU1DO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLE1BQU0sQ0FBQyxZQUFvQjtJQUN2QyxNQUFNLEdBQUcsR0FBRyx1Q0FBZ0IsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUN0RSxPQUFPO1FBQ0gsUUFBUSxFQUFFLEdBQUcsQ0FBQyxjQUFjO1FBQzVCLFNBQVMsRUFBRSxHQUFHLENBQUMsZUFBZTtRQUM5QixhQUFhLEVBQUUsR0FBRyxDQUFDLFVBQVU7UUFDN0IsV0FBVyxFQUFFLEdBQUcsQ0FBQyxVQUFVO1FBQzNCLFlBQVksRUFBRSxHQUFHLENBQUMsVUFBVTtRQUM1QixZQUFZLEVBQUUsR0FBRyxDQUFDLFdBQVc7UUFDN0IsYUFBYSxFQUFFLEdBQUcsQ0FBQyxXQUFXO0tBQ2pDLENBQUM7QUFDTixDQUFDO0FBWEQsd0JBV0M7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQUMsZ0JBQXdCO0lBQ3pELElBQUksQ0FBQyx1Q0FBZ0IsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtRQUM3QyxNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7S0FDeEQ7SUFFRCxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDYixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzlDLE1BQU0sR0FBRyxHQUFHLHNCQUFXLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckQsR0FBRyxJQUFJLHNCQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDM0I7SUFFRCxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUM7QUFaRCxvREFZQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxZQUFvQjtJQUNuRCxJQUFJLENBQUMsb0JBQU8sQ0FBQyxZQUFZLENBQUMsRUFBRTtRQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7S0FDcEQ7SUFFRCxPQUFPLDJCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFORCxnREFNQyJ9