how to handle conflict of two marker in google map using javascript -
i trying create multiple markers on google map using java script, here problem arise when 2 markers have same geo location, if such 2 markers arise other markers occur after marker not display on map, please guide me if has solution.
var geocoder; var map; var geocoder = new google.maps.geocoder(); var newlocation =[]; var selectindex =0; var markers =[]; var iconbase = 'https://maps.google.com/mapfiles/kml/shapes/pin.jpg'; var infowindowcontent ; var markerjson = eval('{{$json_data}}'); console.log(markerjson); var markers = []; var i=0; var media; for(var marker in markerjson) { if(markerjson[marker].media_type == '1') { media = '{{$base_url}}add_images/thumb/'+markerjson[marker].image_video_name; } else { media = '{{$base_url}}add_images/thumb/play_back.png'; } markers[i] = ['<div class="info_abstract"><div class="first_show">'+markerjson[marker].title+'</div><div class="second_show"><img src="'+media+'" /></div></div><div class="info_desc"><div class="status_container">'+markerjson[marker].product_status+'</div><div>'+markerjson[marker].desc.substring(0,100)+'</div><div><a class="detail_link"><a href="{{$base_url}}detail-view/'+markerjson[marker].id+'" >view detail</a></div></div>',number(markerjson[marker].ad_address_latitude),number(markerjson[marker].ad_address_longitude),markerjson[marker].city_name,markerjson[marker].desc,i+1]; i=i+1; } geocoder.geocode( { 'address':'{{$currentcity}}'}, function(results, status) { if (status == google.maps.geocoderstatus.ok) { var mapopt = { center:results[selectindex].geometry.location, zoom:13, maptypeid:google.maps.maptypeid.roadmap }; var map=new google.maps.map(document.getelementbyid("my-map"),mapopt); var centermarker = new google.maps.marker(); var infowindow = new google.maps.infowindow(); for(var j=0; j < markers.length; j++) { marker = new google.maps.marker({ position: new google.maps.latlng(markers[j][1], markers[j][2]), map: map }); infowindowcontent = markers[j][0]; google.maps.event.addlistener(marker, 'click', (function(marker, j) { return function(infowindowcontent) { infowindow.setcontent(markers[j][0]); infowindow.open(map,marker); } })(marker, j)); } } else { alert('{{$lang_var_name.geocode_was_not_successful_for_the_following_reason}}: ' + status); } });
the way approach increase lat & lng of marker's position if duplicated, created new array holds duplicated lat , lng, search through array, find lat , lng exists, updated lat , lng, assign marker's position, store last lat lng in array.
function getupdatedlatlng(lt, ln) { var amount = 0.004, duplicatedlatlng = null, lat = parsefloat(lt), lng = parsefloat(ln), newlat = 0, newlng = 0, increasedlat = 0, increasedlng = 0; if (mynamespace.duplicatedlatlng.length > 0) { var obj = null; (var = 0; < mynamespace.duplicatedlatlng.length; i++) { var item = mynamespace.duplicatedlatlng[i]; if (item.lat == lat && item.lng == lng) { obj = item; break; } } if (obj) { // if latlng found in duplicated array increase lat , lng, create new latlng obj. increasedlat = (++obj.latincrease); increasedlng = (++obj.lngincrease); newlat = (obj.lat + (amount * increasedlat)); newlng = (obj.lng + (amount * increasedlng)); } else { // if latlng didn't found in duplicated array; create new latlng , add array. newlat = (lat + amount); newlng = (lng + amount); increasedlat = 1; increasedlng = 1; } } else { // if nothing in duplicated array, create new latlng item , add array. newlat = (lat + amount); newlng = (lng + amount); increasedlat = 1; increasedlng = 1; } duplicatedlatlng = new mynamespace.duplicatedlatlngitem(lat, lng, increasedlat, increasedlng); mynamespace.duplicatedlatlng.push(duplicatedlatlng); // return new latlng return new google.maps.latlng(newlat, newlng); } // constructor: used updating new latlng. saved in mynamespace.duplicatedlatlng array. duplicatedlatlngitem: function (lat, lng, latincrease, lngincrease) { this.lat = lat; this.lng = lng; this.latincrease = latincrease; this.lngincrease = lngincrease; }
Comments
Post a Comment