ng2-heremaps
Version:
Here Maps for Angular 6
294 lines • 9.95 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { Injectable } from '@angular/core';
import { LazyMapsApiLoader } from '../loaders/lazy-maps-api-loader';
var /** @type {?} */ DefaultCoords = {
latitude: 40.73061,
longitude: -73.935242
};
/**
* @return {?}
*/
function noop() {
// noop
}
/**
* Service responsible to execute arbitrary functions in specific google map context
*/
var HereMapsManager = /** @class */ (function () {
function HereMapsManager(loader) {
this.loader = loader;
this._maps = new Map();
// check browser location
this.getBrowserLocation().then(noop);
// preload map immediately
this._loadPromise = this.loader.load();
}
/**
* @return {?}
*/
HereMapsManager.prototype.onApiLoad = /**
* @return {?}
*/
function () {
return this.loader.platformReady;
};
/**
* @param {?} options
* @return {?}
*/
HereMapsManager.prototype.createMarker = /**
* @param {?} options
* @return {?}
*/
function (options) {
return this.loader.platformReady.then(function () {
return new H.map.Marker(/** @type {?} */ (options.position));
});
};
/**
* @param {?} options
* @return {?}
*/
HereMapsManager.prototype.createBubble = /**
* @param {?} options
* @return {?}
*/
function (options) {
return this.loader.platformReady.then(function () {
return new H.ui.InfoBubble(/** @type {?} */ (options.position));
});
};
/**
* @param {?} origin
* @param {?} destination
* @param {?=} intermediatePoints
* @return {?}
*/
HereMapsManager.prototype.getDirections = /**
* @param {?} origin
* @param {?} destination
* @param {?=} intermediatePoints
* @return {?}
*/
function (origin, destination, intermediatePoints) {
var _this = this;
if (intermediatePoints === void 0) { intermediatePoints = []; }
return this.loader.platformReady.then(function (platform) {
var /** @type {?} */ router = platform.getRoutingService();
return new Promise(function (resolve, reject) {
var /** @type {?} */ params = {
mode: 'balanced;truck',
representation: 'navigation'
};
var /** @type {?} */ waypoints = [origin].concat(intermediatePoints, [destination]);
waypoints.forEach(function (waypoint, index) {
return (params["waypoint" + index] = _this.generateWaypointParam(waypoint, index === 0 || index === waypoints.length - 1));
});
router.calculateRoute(params, function (result) { return resolve(result); }, function (error) {
console.error({
message: 'fail to get directions',
error: error
});
reject(error);
});
});
});
};
/**
* @param {?} el
* @param {?=} options
* @param {?=} controls
* @return {?}
*/
HereMapsManager.prototype.createMap = /**
* @param {?} el
* @param {?=} options
* @param {?=} controls
* @return {?}
*/
function (el, options, controls) {
var _this = this;
return this.loader.platformReady.then(function (platform) {
var /** @type {?} */ defaultLayers = _this._defaultLayers || platform.createDefaultLayers();
_this._defaultLayers = defaultLayers;
var /** @type {?} */ map = new H.Map(el, defaultLayers.normal.map, options);
var /** @type {?} */ ui = H.ui.UI.createDefault(map, defaultLayers, 'en-US');
ui.setUnitSystem(H.ui.UnitSystem.IMPERIAL);
var /** @type {?} */ mapEvents = new H.mapevents.MapEvents(map);
var /** @type {?} */ behavior = new H.mapevents.Behavior(mapEvents);
if (controls) {
if (!controls.mapTypeControl) {
ui.removeControl('mapsettings');
}
if (!controls.zoomControl) {
ui.removeControl('zoom');
}
if (!controls.scaleControl) {
ui.removeControl('scalebar');
}
if (!controls.streetViewControl && (/** @type {?} */ (H)).PanoramaView) {
ui.removeControl('panorama');
}
if (!controls.scrollwheel) {
behavior.disable(H.mapevents.Behavior.WHEELZOOM);
}
if (!controls.enableDoubleClickZoom) {
behavior.disable(H.mapevents.Behavior.DBLTAPZOOM);
}
if (!controls.draggable) {
behavior.disable(H.mapevents.Behavior.DRAGGING);
}
}
return { map: map, ui: ui, platform: platform };
});
};
/**
* @param {?} name
* @return {?}
*/
HereMapsManager.prototype.getMap = /**
* @param {?} name
* @return {?}
*/
function (name) {
var _this = this;
return this._loadPromise.then(function () { return _this._maps.get(name); });
};
/**
* @param {?} name
* @param {?} map
* @return {?}
*/
HereMapsManager.prototype.addMap = /**
* @param {?} name
* @param {?} map
* @return {?}
*/
function (name, map) {
this._maps.set(name, map);
};
/**
* @param {?} name
* @return {?}
*/
HereMapsManager.prototype.removeMap = /**
* @param {?} name
* @return {?}
*/
function (name) {
return this._maps.delete(name);
};
/**
* @return {?}
*/
HereMapsManager.prototype.getBrowserLocation = /**
* @return {?}
*/
function () {
if (this._browserLocationPromise) {
return this._browserLocationPromise;
}
return (this._browserLocationPromise = new Promise(function (resolve) {
if (location.protocol === 'https' && navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function (success) {
resolve(success.coords);
}, function (error) {
console.error(error);
if (error.code !== 1) {
console.warn("Permission is accepted but error encounter with message: " + error.message);
}
// if user didn't answer return default
resolve(DefaultCoords);
});
}
else {
// if browser do not support location API return default (NYC)
resolve(DefaultCoords);
}
}));
};
/**
* @param {?=} points
* @return {?}
*/
HereMapsManager.prototype.calculateMapBounds = /**
* @param {?=} points
* @return {?}
*/
function (points) {
if (points === void 0) { points = []; }
return this.loader.platformReady.then(function (_) {
var /** @type {?} */ bounds = new H.map.Group().getBounds();
if (points && points.length > 1) {
points.forEach(function (m) {
if (m instanceof H.map.AbstractMarker) {
bounds.mergePoint(m.getPosition());
}
else {
bounds.mergePoint({
lat: (/** @type {?} */ (m)).latitude !== void 0
? (/** @type {?} */ (m)).latitude
: (/** @type {?} */ (m)).lat,
lng: (/** @type {?} */ (m)).longitude !== void 0
? (/** @type {?} */ (m)).longitude
: (/** @type {?} */ (m)).lng
});
}
});
return Promise.resolve(bounds);
}
return Promise.resolve(bounds);
});
};
/**
* @param {?} coordinates
* @param {?=} end
* @return {?}
*/
HereMapsManager.prototype.generateWaypointParam = /**
* @param {?} coordinates
* @param {?=} end
* @return {?}
*/
function (coordinates, end) {
if (end === void 0) { end = false; }
var /** @type {?} */ lat = (/** @type {?} */ (coordinates)).lat || (/** @type {?} */ (coordinates)).latitude || 0;
var /** @type {?} */ lng = (/** @type {?} */ (coordinates)).lng ||
(/** @type {?} */ (coordinates)).longitude ||
(/** @type {?} */ (coordinates)).lon ||
0;
return "geo!" + (end ? 'stopOver' : 'passThrough') + "!" + lat + "," + lng;
};
HereMapsManager.decorators = [
{ type: Injectable }
];
/** @nocollapse */
HereMapsManager.ctorParameters = function () { return [
{ type: LazyMapsApiLoader, },
]; };
return HereMapsManager;
}());
export { HereMapsManager };
function HereMapsManager_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
HereMapsManager.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
HereMapsManager.ctorParameters;
/** @type {?} */
HereMapsManager.prototype._maps;
/** @type {?} */
HereMapsManager.prototype._browserLocationPromise;
/** @type {?} */
HereMapsManager.prototype._defaultLayers;
/** @type {?} */
HereMapsManager.prototype._loadPromise;
/** @type {?} */
HereMapsManager.prototype.loader;
}
//# sourceMappingURL=maps-manager.js.map