UNPKG

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
'use strict'; 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;