<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<div ng-app="app" ng-controller="mapController as mc" class="">
<ui-gmap-google-map center="mc.map.center" pan="mc.map.pan" zoom="mc.map.zoom" bounds="mc.map.bounds" options="mc.map.options" id="plnkr-map" control="mc.map.control">
<!-- Markers -->
<ui-gmap-markers models="mc.map.markers" coords="'self'" options="'self'" fit="mc.map.fit"></ui-gmap-markers>
</ui-gmap-google-map>
<ul class="marker-list">
<li ng-repeat="marker in mc.markerList">
<button type="button" ng-click="mc.selectMarker(marker)">{{ marker.name }}</button>
</li>
</ul>
<!-- <pre>{{mc.map.markers | json}}</pre> -->
</div>
<script data-require="angular.js@1.4.6" data-semver="1.4.6" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.7/angular.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.8.0/lodash.js" charset="utf-8"></script>
<script data-require="angular-simple-logger@*" data-semver="0.0.2" src="https://rawgit.com/nmccready/angular-simple-logger/master/dist/angular-simple-logger.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/angular-google-maps/2.2.1/angular-google-maps.js" charset="utf-8"></script>
<script src="controller.js"></script>
<script src="service.js"></script>
</body>
</html>
'use strict';
angular
.module('app', ['uiGmapgoogle-maps'])
.controller('mapController', mapController);
mapController.$inject = ['$scope', '$timeout', 'uiGmapGoogleMapApi', 'mapService'];
function mapController($scope, $timeout, uiGmapGoogleMapApi, mapService) {
var vm = this;
vm.map = mapService.map;
vm.markerList = [
{
"id": "marker1",
"latitude": 38.2215339504538,
"longitude": -80.5515716505056,
"name": "Marker 1"
},
{
"id": "marker2",
"latitude": 38.22947197085,
"longitude": -80.5342597295017,
"name": "Marker 2"
}
];
uiGmapGoogleMapApi.then(function(mapObj) {
vm.selectMarker = function(marker) {
return mapService.selectMarker(marker, vm.map, mapObj);
};
});
}
.angular-google-map,
.angular-google-map-container {
height: 30em;
}
.map-labels {
color: white;
background-color: rgba(0,0,0, 0.6);
font-family: "Lucida Grande", "Arial", sans-serif;
font-size: 10px;
font-weight: bold;
text-align: center;
width: 100px;
padding: 2px 5px 2px 5px;
border: 1px solid white;
white-space: nowrap;
}
.marker-list {
list-style-type: none;
}
'use strict';
angular
.module('app')
.service('mapService', mapService);
mapService.$inject =[];
function mapService() {
var mapOptions = {
center: {
latitude: 41.7673690472421,
longitude: -95.993814375
},
pan: true,
zoom: 4,
bounds: {
},
fit: true,
options: {
scrollwheel: true
},
doRebuildAll: true
};
this.map = {
center: mapOptions.center,
pan: mapOptions.pan,
zoom: mapOptions.zoom,
bounds: mapOptions.bounds,
fit: mapOptions.fit,
options: mapOptions.options,
doRebuildAll: mapOptions.doRebuildAll,
markers: [],
control: {}
};
var pushMarker = function(marker, map, mapObj) {
map.markers.push({
id: marker.id,
latitude: marker.latitude,
longitude: marker.longitude,
title: marker.name+'\nClick to view details',
labelContent: marker.name,
labelClass: 'map-labels',
labelAnchor: "50 0",
show: false,
options: {
icon: new mapObj.MarkerImage("http://labs.google.com/mapfiles/kml/pal4/icon62.png"),
draggable: false,
clickable: true,
animation: google.maps.Animation.DROP
},
coords: {
latitude: marker.latitude,
longitude: marker.longitude
}
});
};
var removeMarker = function(marker, map) {
map.markers = map.markers.filter(function(el) {
return el.id !== marker.id;
});
};
this.selectMarker = function(marker, map, mapObj) {
for(var i=0; i<map.markers.length; i++) {
if(map.markers[i].id === marker.id) {
removeMarker(marker, map);
return;
}
}
pushMarker(marker, map, mapObj);
};
}