首页 > 解决方案 > 更改生成路线的起点和终点图标

问题描述

我有一张地图,它生成一条带有起点、终点和一系列航点的路线。我想做的是改变起点和终点的图标。

在我的例子中,起点和终点是相同的,因为这个想法是路线是产品配送物流的一部分,从同一个地方开始并返回。

我曾尝试在 DirectionsRendered 设置中放置参数“suppressMarkers:true”,但据我了解,我放置的图标将影响所有路线标记,包括起点、目的地和航点。我所需要的只是改变起点和终点。

我想到的一件事是起点和终点是标记,但显然标记对象不能放在 DirectionsService() 设置中。

编辑

我在示例代码中添加了参数“suppressMarkers:true”,然后,当运行 service.route 和 status ===“OK”时,我得到 varleg = response.routes [0] .legs [0];来获取开始和结束坐标,然后我添加了一个自定义标记。问题是它们没有被添加

有谁知道该怎么做?

function initMap() {
  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 4,
    center: {
      lat: -32.949798,
      lng: -60.681911
    }
  });

  var directionsService = new google.maps.DirectionsService();
  var directionsRenderer = new google.maps.DirectionsRenderer({
    draggable: true,
    map: map,
    panel: document.getElementById('right-panel'),
    suppressMarkers: true
  });

  directionsRenderer.addListener('directions_changed', function() {
    computeTotalDistance(directionsRenderer.getDirections());
  });
  var start = new google.maps.LatLng(-32.949798, -60.681911);
  var end = new google.maps.LatLng(-32.949798, -60.681911);

  google.maps.event.addListener(map, 'click', function(event) {
    addWaypoint(event.latLng);
    displayRoute(start, end, directionsService, directionsRenderer);
  });

  displayRoute(start, end, directionsService, directionsRenderer);
}

function displayRoute(origin, destination, service, display) {
  var waypoints = [{
      location: new google.maps.LatLng(-32.930572, -60.662137)
    },
    {
      location: new google.maps.LatLng(-32.923554, -60.665930)
    },
    {
      location: new google.maps.LatLng(-32.936270, -60.652841)
    },
  ];
  for (var i=0; i<addedWaypoints.length;i++) {
    waypoints.push({
      location: addedWaypoints[i]
    });
  }
  service.route({
    origin: origin,
    destination: destination,
    waypoints: waypoints,
    optimizeWaypoints: true,
    travelMode: 'DRIVING',
    avoidTolls: true,
    avoidHighways: true
  }, function(response, status) {
    if (status === 'OK') {
      display.setDirections(response);
      
      var leg = response.routes[ 0 ].legs[ 0 ];
      console.log(leg.start_location)
      makeMarker( leg.start_location, icons.start, 'title');
      makeMarker( leg.end_location, icons.end, 'title');
      
    } else {
      alert('Could not display directions due to: ' + status);
    }
  });
}
var addedWaypoints = [];

var icons = {start: new google.maps.MarkerImage(
     // URL
     'https://maps.google.com/mapfiles/kml/shapes/schools_maps.png',
     // (width,height)
     new google.maps.Size( 44, 32 ),
     // The origin point (x,y)
     new google.maps.Point( 0, 0 ),
     // The anchor point (x,y)
     new google.maps.Point( 22, 32 )
    ),
    end: new google.maps.MarkerImage(
     // URL
     'https://maps.google.com/mapfiles/kml/shapes/schools_maps.png',
     // (width,height)
     new google.maps.Size( 44, 32 ),
     // The origin point (x,y)
     new google.maps.Point( 0, 0 ),
     // The anchor point (x,y)
     new google.maps.Point( 22, 32 )
    )
};

function makeMarker(position, icon, title) {
    new google.maps.Marker({
     position: position,
     map: map,
     icon: icon,
     title: title
    });
}

function addWaypoint(latLng) {
  addedWaypoints.push(latLng);
}

function computeTotalDistance(result) {
  var totalDistance = 0;
  var totalDuration = 0;
  var minutes = 0;
  var hours = 0;
  var myroute = result.routes[0];
  for (var i = 0; i < myroute.legs.length; i++) {
    totalDistance += myroute.legs[i].distance.value;
    totalDuration += myroute.legs[i].duration.value;
  }
  totalDistance = totalDistance / 1000;

  var hours = Math.floor(totalDuration / 3600);
  var minutes = Math.floor((totalDuration % 3600) / 60);
  var seconds = totalDuration % 60;

  hours = hours < 10 ? '0' + hours : hours;
  minutes = minutes < 10 ? '0' + minutes : minutes;
  seconds = seconds < 10 ? '0' + seconds : seconds;
  if (hours == 0) {
    var result = minutes + " min";
  } else {
    var result = hours + ':' + minutes + " hs";
  }

  document.getElementById('total_distance').innerHTML = totalDistance.toFixed(2) + ' km ';
  document.getElementById('total_duration').innerHTML = result;
}
#right-panel {
  font-family: 'Roboto', 'sans-serif';
  line-height: 30px;
  padding-left: 10px;
}

#right-panel select,
#right-panel input {
  font-size: 15px;
}

#right-panel select {
  width: 100%;
}

#right-panel i {
  font-size: 12px;
}

html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
}

#map {
  height: 100%;
  float: left;
  width: 63%;
  height: 100%;
}

#right-panel {
  float: right;
  width: 34%;
  height: 100%;
}

.panel {
  height: 100%;
  overflow: auto;
}
<script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBMZqunCMWco2noEHk5BlWyJExOPn1XCRU&callback=initMap"></script>
<div id="map"></div>
<div id="right-panel">
  <p>Distance: <span id="total_distance"></span></p>
  <p>Duration: <span id="total_duration"></span></p>
</div>

标签: javascriptgoogle-mapsgoogle-maps-api-3

解决方案


推荐阅读