geohex
Version:
Hexagonal geocoding system, library for converting geographic coordinates to hexagonal grid cell and vice versa
134 lines (127 loc) • 3.17 kB
JavaScript
const Geohex = require("./../../lib/geohex.min.js");
module.exports = [
{
name: "code2HEX",
mode: "code -> HEX",
input: "code",
output: "cell.lat, cell.lon (expectaion)",
logic: function (testCase) {
const lat = parseFloat(testCase[1]);
const lon = parseFloat(testCase[2]);
const code = testCase[0];
const cell = Geohex.getCellByCode(code);
return {
err:
Math.abs(cell.lat - lat) < 0.0000000001 &&
Math.abs(cell.lon - lon) < 0.0000000001
? 0
: 1,
message:
code +
": " +
cell.lat +
", " +
cell.lon +
" (" +
lat +
", " +
lon +
")",
};
},
},
{
name: "code2XY",
mode: "code -> XY",
input: "code",
output: "cell.x, cell.y (expectaion)",
logic: function (testCase) {
const code = testCase[0];
const X = parseInt(testCase[1]);
const Y = parseInt(testCase[2]);
const cell = Geohex.getCellByCode(code);
return {
err: cell.x === X && cell.y === Y ? 0 : 1,
message:
code + ": " + cell.x + ", " + cell.y + " (" + X + ", " + Y + ")",
};
},
},
{
name: "coord2HEX",
mode: "coordinate -> HEX",
input: "level, lat, lon",
output: "cell.code (expectaion)",
logic: function (testCase) {
const level = parseInt(testCase[0]);
const lat = parseFloat(testCase[1]);
const lon = parseFloat(testCase[2]);
const code = testCase[3];
const cell = Geohex.getCellByLocation(lat, lon, level);
return {
err: cell.code === code ? 0 : 1,
message:
level +
", " +
lat +
", " +
lon +
": " +
cell.code +
" (" +
code +
")",
};
},
},
{
name: "coord2XY",
mode: "coordinate -> XY",
input: "level, lat, lon",
output: "X, Y (expectaion)",
logic: function (testCase) {
const level = parseInt(testCase[0]);
const lat = parseFloat(testCase[1]);
const lon = parseFloat(testCase[2]);
const X = parseInt(testCase[3]);
const Y = parseInt(testCase[4]);
const XY = Geohex.getXYByLocation(lat, lon, level);
return {
err: XY.x === X && XY.y === Y ? 0 : 1,
message:
level +
", " +
lat +
", " +
lon +
": " +
XY.x +
", " +
XY.y +
" (" +
X +
", " +
Y +
")",
};
},
},
{
name: "XY2HEX",
mode: "XY -> HEX",
input: "level, X, Y",
output: "cell.code (expectaion)",
logic: function (testCase) {
const level = parseInt(testCase[0]);
const X = parseInt(testCase[1]);
const Y = parseInt(testCase[2]);
const code = testCase[3];
const cell = Geohex.getCellByXY(X, Y, level);
return {
err: cell.code === code ? 0 : 1,
message:
level + ", " + X + ", " + Y + ": " + cell.code + " (" + code + ")",
};
},
},
];