Google api v3 show nearby markers on customer road

后端 未结 2 1040
盖世英雄少女心
盖世英雄少女心 2020-12-19 20:37

How can I show only the markers (they are predefined, but hidden for the whole map), which are nearby (may by radius of 10mile or 20mile) to the road I choose using Google a

相关标签:
2条回答
  • 2020-12-19 21:16

    Example using JSTS (from this question: How to draw a polygon around a polyline in JavaScript?. Uses google.maps.geometry.poly.containsLocation

    code:

    function calcRoute() {
        var start = document.getElementById('start').value;
        var end = document.getElementById('end').value;
        var request = {
            origin: start,
            destination: end,
            travelMode: google.maps.DirectionsTravelMode.DRIVING
        };
        directionsService.route(request, function (response, status) {
            if (status == google.maps.DirectionsStatus.OK) {
                directionsDisplay.setDirections(response);
                var overviewPath = response.routes[0].overview_path,
                    overviewPathGeo = [];
                for (var i = 0; i < overviewPath.length; i++) {
                    overviewPathGeo.push(
                    [overviewPath[i].lng(), overviewPath[i].lat()]);
                }
    
                var distance = 10 / 111.12, // Roughly 10km
                    geoInput = {
                        type: "LineString",
                        coordinates: overviewPathGeo
                    };
                var geoInput = googleMaps2JTS(overviewPath);
                var geometryFactory = new jsts.geom.GeometryFactory();
                var shell = geometryFactory.createLineString(geoInput);
                var polygon = shell.buffer(distance);
    
                var oLanLng = [];
                var oCoordinates;
                oCoordinates = polygon.shell.points[0];
                for (i = 0; i < oCoordinates.length; i++) {
                    var oItem;
                    oItem = oCoordinates[i];
                    oLanLng.push(new google.maps.LatLng(oItem[1], oItem[0]));
                }
                if (routePolygon && routePolygon.setMap) routePolygon.setMap(null);
                routePolygon = new google.maps.Polygon({
                    paths: jsts2googleMaps(polygon),
                    map: map
                });
                for (var j=0; j< gmarkers.length; j++) {
                  if (google.maps.geometry.poly.containsLocation(gmarkers[j].getPosition(),routePolygon)) {
                    gmarkers[j].setMap(map);
                  } else {
                    gmarkers[j].setMap(null);
                  }
               }
            }
        });
    }
    
    0 讨论(0)
  • 2020-12-19 21:28

    You have 2 markers within 20 miles of a route from NY to LA:

    example fiddle using RouteBoxer

    function calcRoute() {
      // Clear any previous route boxes from the map
      clearBoxes();
    
      // Convert the distance to box around the route from miles to km
      distance = 20 * 1.609344;
    
        var start = document.getElementById('start').value;
        var end = document.getElementById('end').value;
        var request = {
            origin: start,
            destination: end,
            travelMode: google.maps.TravelMode.DRIVING
        };
        directionsService.route(request, function (response, status) {
            if (status == google.maps.DirectionsStatus.OK) {
                directionsDisplay.setDirections(response);
                // Box around the overview path of the first route
                var path = response.routes[0].overview_path;
                var boxes = routeBoxer.box(path, distance);
                drawBoxes(boxes);
            } else alert("Directions request failed: " + status);
        });
    }
    
    // Draw the array of boxes as polylines on the map
    function drawBoxes(boxes) {
      boxpolys = new Array(boxes.length);
      for (var i = 0; i < boxes.length; i++) {
        boxpolys[i] = new google.maps.Rectangle({
          bounds: boxes[i],
          fillOpacity: 0,
          strokeOpacity: 1.0,
          strokeColor: '#000000',
          strokeWeight: 1,
          map: map
        });
          for (var j=0; j< gmarkers.length; j++) {
              if (boxes[i].contains(gmarkers[j].getPosition()))
                  gmarkers[j].setMap(map);
          }
      }
    }
    
    0 讨论(0)
提交回复
热议问题