UNPKG

angular-heremaps

Version:

Angular directive for working with Nokia Here Maps

107 lines (83 loc) 3.74 kB
module.exports = HereMapsMarkerService; HereMapsMarkerService.$inject = [ 'HereMapsDefaultMarker', 'HereMapsDOMMarker', 'HereMapsSVGMarker', 'HereMapsCONSTS' ]; function HereMapsMarkerService(HereMapsDefaultMarker, HereMapsDOMMarker, HereMapsSVGMarker, HereMapsCONSTS) { var MARKER_TYPES = HereMapsCONSTS.MARKER_TYPES; return { addMarkersToMap: addMarkersToMap, addUserMarker: addUserMarker, updateMarkers: updateMarkers, isMarkerInstance: isMarkerInstance, setViewBounds: setViewBounds } function isMarkerInstance(target) { return target instanceof H.map.Marker || target instanceof H.map.DomMarker; } function addUserMarker(map, place) { if (map.userMarker) return map.userMarker; place.markup = '<svg width="35px" height="35px" viewBox="0 0 90 90" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">' + '<defs><circle id="path-1" cx="302" cy="802" r="15"></circle>' + '<mask id="mask-2" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="-30" y="-30" width="90" height="90">' + '<rect x="257" y="757" width="90" height="90" fill="white"></rect><use xlink:href="#path-1" fill="black"></use>' + '</mask></defs><g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">' + '<g id="Service-Options---directions---map" transform="translate(-257.000000, -757.000000)"><g id="Oval-15">' + '<use fill="#FFFFFF" fill-rule="evenodd" xlink:href="#path-1"></use>' + '<use stroke-opacity="0.29613904" stroke="#3F34A0" mask="url(#mask-2)" stroke-width="60" xlink:href="#path-1"></use>' + '<use stroke="#3F34A0" stroke-width="5" xlink:href="#path-1"></use></g></g></g></svg>'; map.userMarker = new HereMapsSVGMarker(place).create(); map.addObject(map.userMarker); return map.userMarker; } function addMarkersToMap(map, places, refreshViewbounds) { if (!places || !places.length) return; if (!(map instanceof H.Map)) throw new Error('Unsupported map instance'); if (!map.markersGroup) map.markersGroup = new H.map.Group(); places.forEach(function (place, i) { var creator = _getMarkerCreator(place), marker = place.draggable ? _draggableMarkerMixin(creator.create()) : creator.create(); map.markersGroup.addObject(marker); }); map.addObject(map.markersGroup); if (refreshViewbounds) { setViewBounds(map, map.markersGroup.getBounds()); } } function setViewBounds(map, bounds, opt_animate) { map.setViewBounds(bounds, !!opt_animate); } function updateMarkers(map, places, refreshViewbounds) { if (map.markersGroup) { map.markersGroup.removeAll(); map.removeObject(map.markersGroup); map.markersGroup = null; } addMarkersToMap.apply(null, arguments); } function _getMarkerCreator(place) { var ConcreteMarker, type = place.type ? place.type.toUpperCase() : null; switch (type) { case MARKER_TYPES.DOM: ConcreteMarker = HereMapsDOMMarker; break; case MARKER_TYPES.SVG: ConcreteMarker = HereMapsSVGMarker; break; default: ConcreteMarker = HereMapsDefaultMarker; } return new ConcreteMarker(place); } function _draggableMarkerMixin(marker) { marker.draggable = true; return marker; } };