2020-01-02 16:58:06 +00:00
|
|
|
/*
|
|
|
|
* @flow
|
|
|
|
* Convert a list of countrycodes to latlong -> canvas coordinates
|
|
|
|
*/
|
|
|
|
|
|
|
|
import fs from 'fs';
|
|
|
|
import countryCodeLatLong from './countrycode-latlong-array.json';
|
2020-01-02 18:07:00 +00:00
|
|
|
|
|
|
|
const CANVAS_SIZE = 256 * 256;
|
|
|
|
const CANVAS_MIN_XY = -(CANVAS_SIZE / 2);
|
2020-01-02 16:58:06 +00:00
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Converts lat/long to canvas coordinates
|
|
|
|
* NOTE: our projection if off by the factor 265/256 in Y direction from common other
|
|
|
|
* common map projections
|
|
|
|
* parses geo coords (lat/long) to canvas coordinates
|
|
|
|
* @param coords lat / long
|
|
|
|
* @return canvas coords x / y
|
|
|
|
*/
|
|
|
|
function latlong2Coords(coords) {
|
|
|
|
const [ lat, lng ] = coords;
|
|
|
|
const x = Math.floor(CANVAS_SIZE * ((lng + 180) / 360)) + CANVAS_MIN_XY;
|
|
|
|
const y = (Math.floor((1-Math.log(Math.tan(lat*Math.PI/180) + 1/Math.cos(lat*Math.PI/180))/Math.PI)/2 * CANVAS_SIZE) + CANVAS_MIN_XY) * 265/256;
|
|
|
|
return [x, y];
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* gets canvas coords to country
|
|
|
|
* @param countryCode ISO two letter country code
|
|
|
|
* @return canvas coords x / y
|
|
|
|
*/
|
|
|
|
export function country2Coords(countryCode) {
|
|
|
|
try {
|
|
|
|
const coords = countryCodeLatLong[countryCode].map(z => parseFloat(z));
|
|
|
|
return latlong2Coords(coords)
|
|
|
|
}
|
|
|
|
catch(err) {
|
|
|
|
console.log(`Country ${countryCode} not found.`);
|
|
|
|
return [0, 0];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* creates json file with country code to canvas coords
|
|
|
|
* @param countryLatLang array with country codes to lat long
|
|
|
|
* @param filename Output filename
|
|
|
|
*/
|
|
|
|
function createCoordsJson(filename) {
|
|
|
|
let output = {};
|
|
|
|
for (var cc in countryCodeLatLong) {
|
|
|
|
output[cc] = country2Coords(cc);
|
|
|
|
}
|
|
|
|
fs.writeFile(filename, JSON.stringify(output), 'utf8', (a) => {});
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
createCoordsJson('countrycode-coords-array.json');
|