geohash-cli
Version:
CLI to find as much info as possible about today's (or any date's) geohashes.
119 lines (86 loc) • 3.35 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _qs = require('qs');
var _defaults = require('lodash/defaults');
var _defaults2 = _interopRequireDefault(_defaults);
var _debug = require('debug');
var _debug2 = _interopRequireDefault(_debug);
var _omit = require('lodash/omit');
var _omit2 = _interopRequireDefault(_omit);
var _invokeMap = require('lodash/invokeMap');
var _invokeMap2 = _interopRequireDefault(_invokeMap);
var _partial = require('lodash/partial');
var _partial2 = _interopRequireDefault(_partial);
var _identity = require('lodash/identity');
var _identity2 = _interopRequireDefault(_identity);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var debug = (0, _debug2.default)('geohash:map');
var BASE_URL = 'https://maps.googleapis.com/maps/api/staticmap?';
var delimiter = '|';
var middleItem = function middleItem(arr) {
return arr[Math.round((arr.length - 1) / 2)];
};
var appendFirstIndex = function appendFirstIndex(arr) {
return [].concat(arr, [arr[0]]);
};
var validArray = function validArray(arr) {
return Array.isArray(arr) && arr.length > 0 && arr;
};
var toMarker = function toMarker(color, label, geo) {
return ['color:' + color, 'label:' + label, geo.toString()].join(delimiter);
};
var toGraticulePaths = function toGraticulePaths(geohashes) {
var pathPoints = (0, _invokeMap2.default)(geohashes, 'graticuleBox').map(appendFirstIndex).map(function (geohash) {
return geohash.join(delimiter);
}).join(delimiter);
var color = '0xff0000ff';
var weight = 3;
var pathOptions = (0, _qs.stringify)({ color: color, weight: weight }, { delimiter: delimiter }).replace(/=/g, ':');
return pathOptions + delimiter + pathPoints;
};
var getMapUrl = function getMapUrl() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var params = (0, _defaults2.default)(options, {
size: '640x640',
maptype: 'hybrid',
zoom: 7,
markers: [],
path: '',
key: ''
});
var specialParams = ['location', 'drawGraticulePaths', 'geohashes'];
var location = params.location,
drawGraticulePaths = params.drawGraticulePaths,
geohashes = params.geohashes;
var validGeohashes = validArray(geohashes);
specialParams.forEach(function (param) {
return delete params[param];
});
debug('Initial params: ' + JSON.stringify(params));
if (drawGraticulePaths && validGeohashes) {
params.path += toGraticulePaths(validGeohashes);
debug('Graticule Paths: ' + params.path);
}
if (!params.center && validGeohashes) {
params.center = middleItem(validGeohashes).toString();
debug('Geohashes center: ' + params.center);
}
if (validGeohashes) {
var geohashMarkers = validGeohashes.map((0, _partial2.default)(toMarker, 'blue', 'G'));
params.markers.push(geohashMarkers);
debug('Markers: ' + geohashMarkers);
}
if (location) {
var locationMarker = toMarker('red', 'Y', location);
params.markers.push(locationMarker);
debug('Location: ' + locationMarker);
}
var qsStr = (0, _qs.stringify)((0, _omit2.default)(params, function (val) {
return !(0, _identity2.default)(val);
}), { arrayFormat: 'repeat' });
debug('Map: ' + qsStr);
return BASE_URL + qsStr;
};
exports.default = getMapUrl;