有什么方法可以通过方向服务创建的带有wapoint标记的监听点击功能 [英] Is there any way to listen click function with wapoint markers created by direction service

查看:64
本文介绍了有什么方法可以通过方向服务创建的带有wapoint标记的监听点击功能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

基本上,我正在努力实现这一目标. 1-使用AJAX从MySQL获取纬度/经度 2-使用方向服务和航点技术在地图上绘制路线. 3-当用户单击地图标记时,单击标记时每个标记都具有可点击的功能,位置详细信息将在地图下方的div中获取,基本上,我需要在每次标记单击时处理单击侦听器,以便我可以执行所需的操作这些点击的操作.

Basically, I am trying to achieve this thing. 1 - Get Lat/long from MySQL using AJAX 2 - Draw Route on Map using direction service and waypoints technique. 3 - When a user clicks on map marker each marker has a clickable function when the marker is clicked location detail will be fetched in a div underneath the map, basically I need to handle click listener on each marker click so that I can perform my desired actions on those clicks.

我实现的是:

1-能够使用PHP REST API从MySQL在页面加载时使用ajax请求获取经/纬度.

1 - Able to fetch lat/long using ajax request on page load from MySQL using PHP REST API.

2-通过服务"将这些标记传递给地图并绘制路线. 想法参考的屏幕截图 https://imgur.com/a/ApkPjTN

2 - Pass Those Markers to map and draw a route using direction Service. Screenshot for idea reference https://imgur.com/a/ApkPjTN

var i = 0;
var ACoptions = {
  componentRestrictions: {
    country: "PK"
  }
};
var map;

var directionsDisplay;        
var directionsService;

function initialize(directionsService, directionsDisplay , waypointElmts , origin1 , designation1) {
 directionsDisplay = new google.maps.DirectionsRenderer({
 polylineOptions:{
    strokeColor:"#00a54f",
    strokeOpacity: 1,
    strokeWeight:5

}

});           
 directionsService = new google.maps.DirectionsService();
    document.getElementById( 'map' ).style.display = "block";

  var melbourne = new google.maps.LatLng(30.3753,69.3451);
  var myOptions = {
    zoom: 6,
    mapTypeId: google.maps.MapTypeId.ROADMAP,
    center: melbourne,

  }

  map = new google.maps.Map(document.getElementById("map"), myOptions);

  directionsDisplay.setMap(map);

 calculateAndDisplayRoute(directionsService, directionsDisplay , waypointElmts , origin1 , designation1);

}

function calculateAndDisplayRoute(directionsService, directionsDisplay , waypointElmts , origin1 , designation1) {

  var waypts = [];

  for (var i = 0; i < waypointElmts.length; i++) {

      waypts.push({
        location: waypointElmts[i],
        stopover: true,
      });
  }

  directionsService.route({
    origin: origin1,
    destination: designation1,
    waypoints: waypts,
    optimizeWaypoints: true,
    travelMode: 'DRIVING'
  }, function(response, status) {
    if (status === 'OK') {
      directionsDisplay.setDirections(response);
    renderDirectionsPolylines(response);
    }
    else if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT) { 
        wait = true;
        setTimeout("wait = true", 2000);
        //alert("OQL: " + status);x
        }  else {

      toastr.error('Directions request failed due to '+status,'Error!',
    {positionClass: 'toast-top-full-width', containerId: 'toast-top-full-width'});
    }
  });
}

 $.ajax({
        type: "POST",
        url: "ajax-requests/ajaxm.php",
        dataType: "json",
data: { what_need : 'detail_routesheet'
,_token: '<?php echo $_SESSION['_token'];?>',
route_id: <?php echo $_GET['routeid']?>
},
        success: function(response){
      var len = response.length;
            for(var i=0; i<len; i++){
                var start_location = response[i].start_location;
                var end_location = response[i].end_location;
                var waypoints = response[i].waypoints;
                var datetime = response[i].datetime;
            }

var array = $.map(waypoints, function(value, index) {
    return [value];
});
function firstAndLast(array) {

var firstItem = array[0];
var lastItem = array[array.length-1];

 var objOutput = {
   start : firstItem,
   end : lastItem
  };

return objOutput;
}

var display = firstAndLast(array);
var start_locationlatlng = display.start;
var end_locationlatlng = display.end;

//calculateAndDisplayRoute(directionsService, directionsDisplay ,waypoints , originmap , designationmap);

array.shift();
array.pop();  

initialize(directionsService, directionsDisplay , array , start_locationlatlng , end_locationlatlng)
       }
    });

1-当用户点击时,我可以处理由方向服务航点生成的每个标记上的点击事件

1 - When User Click I can handle the click event on each marker generated by direction service waypoint

推荐答案

DirectionsRenderer具有suppressMarkers属性.用它删除由路线服务自动添加的标记.

The DirectionsRenderer has a suppressMarkers property. Use it to remove the markers automatically added by the Directions service.

然后为您需要的任何点(起点和/或终点和/或航路点)创建自己的标记.

Then create your own markers for whatever point(s) you need (start and/or end and/or waypoints).

下面是一个有效的代码段,该代码段为每个点创建了一个带有信息窗口的可点击标记.

Below is a working snippet that creates clickable markers with an Infowindow for every point.

var map, infowindow, directionDisplay, directionsService;

function initialize() {

  directionsService = new google.maps.DirectionsService();
  infowindow = new google.maps.InfoWindow();

  directionsDisplay = new google.maps.DirectionsRenderer({
    suppressMarkers: true
  });

  var myOptions = {
    zoom: 3,
    mapTypeId: google.maps.MapTypeId.ROADMAP,
  }

  map = new google.maps.Map(document.getElementById("map-canvas"), myOptions);
  directionsDisplay.setMap(map);
  calcRoute();
}

function calcRoute() {

  var waypts = [];

  stop = new google.maps.LatLng(51.943571, 6.463856)
  waypts.push({
    location: stop,
    stopover: true
  });
  stop = new google.maps.LatLng(51.945032, 6.465776)
  waypts.push({
    location: stop,
    stopover: true
  });
  stop = new google.maps.LatLng(51.945538, 6.469413)
  waypts.push({
    location: stop,
    stopover: true
  });
  stop = new google.maps.LatLng(51.947462, 6.467941)
  waypts.push({
    location: stop,
    stopover: true
  });
  stop = new google.maps.LatLng(51.945409, 6.465562)
  waypts.push({
    location: stop,
    stopover: true
  });
  stop = new google.maps.LatLng(51.943700, 6.462096)
  waypts.push({
    location: stop,
    stopover: true
  });

  var start = new google.maps.LatLng(51.943382, 6.463116);
  var end = new google.maps.LatLng(51.946199, 6.461947);

  var request = {
    origin: start,
    destination: end,
    waypoints: waypts,
    optimizeWaypoints: true,
    travelMode: google.maps.DirectionsTravelMode.WALKING
  };

  directionsService.route(request, function(response, status) {
    if (status == google.maps.DirectionsStatus.OK) {

      // Create custom markers for start / end locations
      createMarker(start);
      createMarker(end);

      // Create custom markers for each waypoint
      for (var i = 0; i < waypts.length; i++) {

        createMarker(waypts[i].location);
      }

      directionsDisplay.setDirections(response);
    }
  });
}

function createMarker(latlng) {

  var marker = new google.maps.Marker({
    position: latlng,
    map: map
  });

  google.maps.event.addListener(marker, 'click', function() {

    infowindow.setContent('Clicked marker at ' + this.position.toString());
    infowindow.open(map, this);
  });
}

#map-canvas {
  height: 180px;
}

<div id="map-canvas"></div>
<!-- Replace the value of the key parameter with your own API key. -->
<script async defer src="//maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&callback=initialize">
</script>

这篇关于有什么方法可以通过方向服务创建的带有wapoint标记的监听点击功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆