I am trying to implement a function like this maps: http://www.geocodezip.com/SO_OverQueryLimitC.html
However, I didn't manage to show the InfoWindow on it. I want to show the InfoWindow with data that has multiple exact location.
this is my code:
html:
<section id="GoogleMaps" ng-controller="MapsController"> <div class="container"> <div> <div id="map_canvas"></div> </div> </div> </section>
controller:
.controller('MapsController', ['$scope', '$http', function ($scope, $http) { $scope.loadData = function () { var url = 'data/LatLng.json'; return $http.get(url).then(function (response) { return response.data; }); }; $scope.initMap = function (data) { var mapOptions = { zoom: 7, center: new google.maps.LatLng(3.9443, 101.6954), mapTypeId: google.maps.MapTypeId.ROADMAP } var map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions); var infowindow = new google.maps.InfoWindow(); var markers = []; var LatLng; var text; var marker; data.forEach(function (item) { var icons; LatLng = new google.maps.LatLng(item.LAT, item.LON); text = item.TYPE1; if (item.TYPE1 == '1' && item.TYPE2 == '1') { icons = 'http://www.googlemapsmarkers.com/v1/' + '1' + '/FD7567'; } else if (item.TYPE1 == '1' && item.TYPE2 == '2') { icons = 'http://www.googlemapsmarkers.com/v1/' + '2' + '/FD7567'; } else if (item.TYPE1 == '1' && item.TYPE2 == '3') { icons = 'http://www.googlemapsmarkers.com/v1/' + '3' + '/FD7567'; } else if (item.TYPE1 == '2' && item.TYPE2 == '1') { icons = 'http://www.googlemapsmarkers.com/v1/' + '1' + '/6991FD'; } else if (item.TYPE1 == '2' && item.TYPE2 == '2') { icons = 'http://www.googlemapsmarkers.com/v1/' + '2' + '/6991FD'; } else { icons = 'http://www.googlemapsmarkers.com/v1/' + '3' + '/6991FD'; } marker = new google.maps.Marker({ position: LatLng, icon: icons, clickable: true, }); markers.push(marker); }); var options = { imagePath: 'images/m' }; var markerCluster = new MarkerClusterer(map, markers, options); ///get array of markers currently in cluster var allMarkers = markerCluster.getMarkers(); //check to see if any of the existing markers match the latlng of the new marker if (allMarkers.length != 0) { for (var i = 0; i < allMarkers.length; i++) { var existingMarker = allMarkers[i]; var pos = existingMarker.getPosition(); if (LatLng.equals(pos)) { text = text + " & " + text; } } } google.maps.event.addListener(marker, 'click', function () { console.log('hi'); //return nothing infowindow.close(); infowindow.setContent(text); infowindow.open(map, marker); }); markerCluster.addMarker(marker); return marker; }; $scope.loadData() .then($scope.initMap); }])
scripts:
addTag('script', { src: 'http://maps.googleapis.com/maps/api/js' }, sync); addTag('script', { src: 'assets/js/markerclusterer.js' }, sync);
Update: I tried to add console.log() inside click event, but it shows nothing. When I clicked, it did not go to the function.
Any ideas how to solve it?
Thank You.