Как скрыть другие маркеры после отображения направления на карте Google
this google map is to get directions to a location specified by coordinates of the customer as the destination. To get that from data in the select, i make it a google.maps.LatLng object, and i save the coordinates as a string in the value, then i parse out the latitude and longitude to create the LatLng object. the steps is : 1-save the coordinates in the option value: <pre lang="Javascript">for (var i = 0; i < data.length; i++) { displayLocation(data[i]); addOption(selectBox, data[i]['CodeClient'], data[i].Latitude + "," + data[i].Longitude); }
2-проанализируйте эти координаты и создайте google.maps.Объект LatLng в запросе направлений:
function calculateRoute() { var start = document.getElementById('start').value; var destination = document.getElementById('destination').value; console.log("selected option value=" + destination); var destPt = destination.split(","); var destination = new google.maps.LatLng(destPt[0], destPt[1]); if (start == '') { start = center; } // ....
(все вышеперечисленное прекрасно работает)
-----Вот тут я и застрял.:-----
Даже направление на указанный маркер отображается, проблема в том, что все маркеры все еще находятся на карте, для меня я стараюсь сделать так, чтобы моя функция отображала только две вещи направление и маркер с кодом-клиентом, которого я выберу, а все остальные маркеры будут скрываться.
Вот мои заметки о том, что я добавляю в свой код,
**1--***Однажды я добавил эту функцию, чтобы поместить все маркеры в одну переменную*
makeRequest('https://gist.githubusercontent.com/abdelhakimsalama/3cce25789f00c1b84ccb5b231ec455b7/raw/393220f08a02b962e3e764d2b497b318353828db/gistfile1.txt', function(data) { for (var i = 0; i < data.length; i++) { var marker = new google.maps.Marker({ position: new google.maps.LatLng(data[i].Latitude, data[i].Longitude), title: data[i].CodeClient, map: map }); gmarkers.push(marker); } });
**2--***и я добавляю эту функцию, чтобы скрыть другие маркеры*
function toggleMarkers() { for (i = 0; i < gmarkers.length; i++) { if (gmarkers[i].getMap() != null) gmarkers[i].setMap(null); else gmarkers[i].setMap(map); } }
Эта проблема , с которой я сталкиваюсь уже целый день, кажется, не может быть решена, даже я пытался посмотреть на большое разнообразие блоков кода здесь и в документации Google Maps API, но до сих пор не смог понять, как скрыть другие маркеры.
Любые предложения, идеи и помощь будут очень оценены!
Что я уже пробовал:
var map; var directionsService; var directionsDisplay; var geocoder; var infowindow; function init() { directionsService = new google.maps.DirectionsService(); directionsDisplay = new google.maps.DirectionsRenderer(); geocoder = new google.maps.Geocoder(); infowindow = new google.maps.InfoWindow(); var mapOptions = { zoom: 6, center: center = new google.maps.LatLng(32, -6), mapTypeId: google.maps.MapTypeId.ROADMAP } map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions); directionsDisplay.setMap(map); directionsDisplay.setPanel(document.getElementById('directions_panel')); // Detect user location if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(function(position) { var userLocation = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); geocoder.geocode({ 'latLng': userLocation }, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { document.getElementById('start').value = results[0].formatted_address } }); }, function() { alert('Geolocation is supported, but it failed'); }); } makeRequest('https://gist.githubusercontent.com/abdelhakimsalama/3cce25789f00c1b84ccb5b231ec455b7/raw/393220f08a02b962e3e764d2b497b318353828db/gistfile1.txt', function(data) { var data = JSON.parse(data.responseText); var selectBox = document.getElementById('destination'); for (var i = 0; i < data.length; i++) { displayLocation(data[i]); // addOption(selectBox, data[i]['CodeClient'], data[i]['GeoAdresse']); addOption(selectBox, data[i]['CodeClient'], data[i].Latitude + "," + data[i].Longitude); console.log("addOption(" + data[i]['CodeClient'] + " addr=" + data[i]['GeoAdresse'] + " latLng=" + data[i].Latitude + "," + data[i].Longitude); } }); makeRequest('https://gist.githubusercontent.com/abdelhakimsalama/3cce25789f00c1b84ccb5b231ec455b7/raw/393220f08a02b962e3e764d2b497b318353828db/gistfile1.txt', function(data) { for (var i = 0; i < data.length; i++) { var marker = new google.maps.Marker({ position: new google.maps.LatLng(data[i].Latitude, data[i].Longitude), title: data[i].CodeClient, map: map }); gmarkers.push(marker); } }); } function toggleMarkers() { for (i = 0; i < gmarkers.length; i++) { if (gmarkers[i].getMap() != null) gmarkers[i].setMap(null); else gmarkers[i].setMap(map); } } function addOption(selectBox, text, value) { var option = document.createElement("OPTION"); option.text = text; option.value = value; selectBox.options.add(option); } function calculateRoute() { var start = document.getElementById('start').value; var destination = document.getElementById('destination').value; console.log("selected option value=" + destination); var destPt = destination.split(","); var destination = new google.maps.LatLng(destPt[0], destPt[1]); if (start == '') { start = center; } var request = { origin: start, destination: destination, travelMode: google.maps.DirectionsTravelMode.DRIVING }; console.log("origin:" + start); console.log("dest:" + destination.toUrlValue(6)); directionsService.route(request, function(response, status) { if (status == google.maps.DirectionsStatus.OK) { directionsDisplay.setDirections(response); } }); toggleMarkers(); /*I think that when I add this line it will execute the function who hide markers after displaying the destination, but it doesn't work*/ } function makeRequest(url, callback) { var request; if (window.XMLHttpRequest) { request = new XMLHttpRequest(); // IE7+, Firefox, Chrome, Opera, Safari } else { request = new ActiveXObject("Microsoft.XMLHTTP"); // IE6, IE5 } request.onreadystatechange = function() { if (request.readyState == 4 && request.status == 200) { callback(request); } } request.open("GET", url, true); request.send(); } function displayLocation(rythmstu_innotec) { var content = '<div class="infoWindow"> Code Client : ' + rythmstu_innotec.CodeClient + '' + '<br />Latitude : ' + rythmstu_innotec.Latitude + '<br />Longitude : ' + rythmstu_innotec.Longitude + '<br />Route : ' + rythmstu_innotec.Route + '<br />Secteur : ' + rythmstu_innotec.Secteur + '<br />Agence : ' + rythmstu_innotec.Agence + '<br />prenom de Client : ' + rythmstu_innotec.PrenomClient + '<br />Num Adresse : ' + rythmstu_innotec.NumAdresse + '<br />GeoAdresse : ' + rythmstu_innotec.GeoAdresse + '<br />Téléphone : ' + rythmstu_innotec.Tel + '<br />Whatsapp : ' + rythmstu_innotec.Whatsapp + '<br />Nbr Frigos : ' + rythmstu_innotec.NbrFrigo + '<br />Ouverture Matin : ' + rythmstu_innotec.OpenAm + '<br />Fermeture Matin : ' + rythmstu_innotec.CloseAm + '<br />Ouverture après-midi : ' + rythmstu_innotec.OpenPm + '<br />Fermeture Après-midi : ' + rythmstu_innotec.ClosePm + '</div>'; if (parseInt(rythmstu_innotec.Latitude) == 0) { geocoder.geocode({ 'GeoAdresse': rythmstu_innotec.GeoAdresse }, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { var marker = new google.maps.Marker({ map: map, position: results[0].geometry.rythmstu_innotec, title: rythmstu_innotec.name }); google.maps.event.addListener(marker, 'click', function() { infowindow.setContent(content); infowindow.open(map, marker); }); } }); } else { var position = new google.maps.LatLng(parseFloat(rythmstu_innotec.Latitude), parseFloat(rythmstu_innotec.Longitude)); var marker = new google.maps.Marker({ map: map, position: position, title: rythmstu_innotec.name }); google.maps.event.addListener(marker, 'click', function() { infowindow.setContent(content); infowindow.open(map, marker); }); } }