es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cálculo de cobertura de ruta de Google Maps.

Estamos trabajando en un Sistema de Seguimiento de Vehículos y estamos atascados en una fase de desarrollo. Hemos creado una Ruta para que un vehículo la siga durante todo el trayecto. Pero a veces los conductores utilizan caminos diferentes en lugar de los definidos. Por lo tanto, necesitamos calcular el porcentaje de cobertura, es decir, cuánto del trayecto especificado ha sido cubierto por el conductor.

A continuación se muestra la FeatureCollection para la ruta definida:

geoJson: {type: "FeatureCollection", features: [{,...}]}
features: [{,...}]
0: {,...}
geometry: {type: "LineString",...}
properties: {Bcolor: "#FF0000", FillColor: "#FF0000", Oemid: "10", strokeColor: "#FF0000", strokeOpacity: "4.0",...}
type: "Feature"
type: "FeatureCollection"

Y a continuación se encuentran las coordenadas del área cubierta:

latLong: [[77.02575, 28.44825], [77.02578166666666, 28.448081666666667],…]
[0 … 99]
0: [77.02575, 28.44825]
1: [77.02578166666666, 28.448081666666667]
2: [77.02589166666667, 28.448046666666666]
3: [77.026025, 28.448031666666665]
4: [77.026075, 28.447993333333333]
5: [77.026125, 28.447908333333334]
6: [77.02616, 28.447871666666668]

Por lo tanto, necesitamos ayuda para calcular el porcentaje de cobertura de la ruta definida. Hemos intentado entender la API de distancia de Google, pero no hemos tenido éxito.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en JavaScript y Google Maps, te sugeriría utilizar la API de Direcciones de Google Maps para calcular el porcentaje cubierto de la ruta definida.

    Primero, tendrías que obtener las direcciones entre los puntos de inicio y final de la ruta definida. Puedes utilizar el siguiente código para hacerlo:

    const directionsService = new google.maps.DirectionsService();
    const start = new google.maps.LatLng(definedRoute.startLat, definedRoute.startLng);
    const end = new google.maps.LatLng(definedRoute.endLat, definedRoute.endLng);
    
    const request = {
      origin: start,
      destination: end,
      travelMode: google.maps.TravelMode.DRIVING,
    };
    
    directionsService.route(request, function(result, status) {
      if (status == google.maps.DirectionsStatus.OK) {
        // hacer algo con el resultado
      }
    });
    

    Una vez que tienes las direcciones, puedes utilizar la librería utilitaria Polyline para crear una polilínea a partir de la codificación proporcionada en la respuesta. Luego, puedes utilizar el método isLocationOnEdge para comprobar si cada punto en las coordenadas del área cubierta está en la ruta definida. Aquí tienes un código de ejemplo para lograr esto:

    const definedRouteCoordinates = google.maps.geometry.encoding.decodePath(encodedPolyline);
    const definedRoutePolyline = new google.maps.Polyline({
      path: definedRouteCoordinates,
    });
    
    let coveredCount = 0;
    latLong.forEach(point => {
      const latLng = new google.maps.LatLng(point[1], point[0]);
      if (google.maps.geometry.poly.isLocationOnEdge(latLng, definedRoutePolyline)) {
        coveredCount++;
      }
    });
    
    const coveredPercentage = coveredCount / latLong.length * 100;
    

    Este código recorre cada punto en el array latLong y comprueba si está en la ruta definida utilizando el método isLocationOnEdge. Si el punto está en la ruta, se incrementa la variable coveredCount. Finalmente, el porcentaje cubierto se calcula dividiendo coveredCount por el número total de puntos en el array latLong.

    ¡Espero que esto te ayude en tu fase de desarrollo!

Comments are closed.