sg-areas
Version:
Find regions, areas and subzones in Singapore
90 lines • 3.37 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getNearest = exports.getSubzones = exports.getAreas = exports.administrativeLocations = void 0;
const geolib_1 = require("geolib");
const data = __importStar(require("./data"));
const interfaces_1 = require("./interfaces");
exports.administrativeLocations = { Region: interfaces_1.Region, Area: interfaces_1.Area, Subzone: interfaces_1.Subzone };
const getAreas = (regions) => {
if (regions && regions.length > 0) {
return Object.keys(data.areas.default)
.filter((id) => regions.includes(data.areas.default[id].region))
.reduce((obj, id) => {
obj[id] = data.areas.default[id];
return obj;
}, {});
}
return data.areas.default;
};
exports.getAreas = getAreas;
const getSubzones = (areas) => {
if (areas && areas.length > 0) {
return Object.keys(data.subzones.default)
.filter((id) => areas.includes(data.subzones.default[id].area))
.reduce((obj, id) => {
obj[id] = data.subzones.default[id];
return obj;
}, {});
}
return data.subzones.default;
};
exports.getSubzones = getSubzones;
const getNearest = (origin, options = { closest: 1 }) => {
if (options.closest <= 0)
return { areas: {}, subzones: {} };
const areas = data.areas.default;
const subzones = data.subzones.default;
const areaResults = {};
const subzoneResults = {};
const temp = [];
const appendDistance = (locations) => {
Object.keys(locations).forEach((id) => {
const loc = locations[id];
if (loc.coordinates) {
const distance = geolib_1.getDistance(origin, loc.coordinates, 1);
temp.push(Object.assign(Object.assign({ id }, loc), { distance }));
}
});
};
const sortSliceFormat = (locationResults) => {
return temp
.sort((a, b) => {
return a.distance < b.distance ? -1 : 1;
})
.slice(0, options.closest)
.forEach((obj) => {
const id = obj.id;
delete obj.id;
locationResults[id] = obj;
});
};
appendDistance(areas);
sortSliceFormat(areaResults);
appendDistance(subzones);
sortSliceFormat(subzoneResults);
return {
areas: areaResults,
subzones: subzoneResults,
};
};
exports.getNearest = getNearest;
//# sourceMappingURL=index.js.map