In my project, I am trying to display different marker icons on Google Maps. Below is the code snippet that I have used for this purpose. The markers array contains various types of markers with custom icons that I want to show on the map. You can view the implementation in this JSFiddle link: https://jsfiddle.net/h9seLt22/7/. Instead of using the default marker icon, I need to dynamically display these custom marker icons.
angular.module('myApp', [])
.controller('MapCtrl', [
'$scope', '$http', '$compile',
function ($scope, $http, $compile) {
//-------------------------------------------------------------------------------------------------------------------------------------------------
$scope.find = function () {
var gmarkers1 = [];
var markers1 = [];
var infowindow = new google.maps.InfoWindow({
content: ''
});
// Our marker data
markers1 = [
['0', 'Madivala', 12.914494, 77.560381, 'computer science,electronic system,communication thoery,english', 'as12', 'Abi Tech ACC','http://static4.wikia.nocookie.net/__cb20131121214007/destinypedia/images/7/71/Information_Icon.svg'],
['1', 'Majestic', 12.961229, 77.559281, 'electronic system,Telecommunication,optical&fiber optics', 'as13', 'Vell Infotech','http://icons.iconarchive.com/icons/kyo-tux/aeon/256/Sign-LogOff-icon.png'],
['2', 'Ecity', 12.92489905, 77.56070772, 'communication thoery,english,Digital Electronics,signal&systems', 'as14', 'vinoth coching center','http://icons.iconarchive.com/icons/artua/mac/512/Intranet-icon.png'],
['3', 'Jp nagar', 12.91660662, 77.52047465, 'Digital Electronics,signal&systems', 'as15', 'Gpy tech archi','http://www.psdgraphics.com/file/upload-icon.jpg']
];
/**
* Initialize the map
*/
function initialize() {
var center = new google.maps.LatLng(12.9667, 77.5667);
var mapOptions = {
zoom: 12,
center: center,
mapTypeId: google.maps.MapTypeId.TERRAIN
};
map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
for (i = 0; i < markers1.length; i++) {
addMarker(markers1[i]);
}
}
/**
* Add markers to the map
*/
function addMarker(marker) {
var category = marker[4];
var title = marker[1];
var pos = new google.maps.LatLng(marker[2], marker[3]);
var content = marker[1];
var fullContent = marker.slice(1, 6).join();
var marker1 = new google.maps.Marker({
title: title,
position: pos,
category: category,
map: map
});
gmarkers1.push(marker1);
// Click listener for markers
google.maps.event.addListener(marker1, 'click', (function (marker1, idx, markers1) {
return function () {
console.log('Gmarker 1 gets pushed');
var compiled = '<div><div>' + markers1[idx][0] + ' </div><div>' + markers1[idx][1] + ' </div><div>' + markers1[idx][2] + ' </div><div><button id="' + markers1[idx][5] + '">Get</button></div></div>';
var infowindow = new google.maps.InfoWindow({
content: compiled
});
infowindow.open(map, marker1);
map.panTo(this.getPosition());
map.setZoom(15);
}
})(marker1, i, markers1));
}
$(document.body).on('click', 'button', function () {
console.log(this.id);
});
/**
* Filter markers based on category
*/
filterMarkers = function (category) {
for (i = 0; i < markers1.length; i++) {
marker = gmarkers1[i];
if (marker.category.toLowerCase().indexOf(category.toLowerCase()) > -1 || category.length === 0) {
marker.setVisible(true);
} else {
marker.setVisible(false);
}
}
}
// Initialize the map
initialize();
}
}]);
#map-canvas {
width: 500px;
height: 500px;
}
<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
<script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<div ng-app="myApp">
<div ng-controller="MapCtrl" ng-init="find()">
<div id="map-canvas"></div>
<select id="type" onchange="filterMarkers(this.value);">
<option value="">Please select category</option>
<option value="computer science">computer science</option>
<option value="electronic system">electronic system</option>
<option value="communication thoery">communication thoery</option>
<option value="english">english</option>
<option value="optical&fiber optics">optical&fiber optics</option>
<option value="Digital Electronics">Digital Electronics</option>
<option value="signal&systems">signal&systems</option>
</select>
</div>
</div