Roteirizador

by anndreyy

HTML

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Roterizador</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
    
    
</body>
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCrM_oEopaDubMzrKiSZbhLGCsbHW39IL4" async defer></script>
</html>

JavaScript

setTimeout(init, 300)

function init () {
    var service = new google.maps.DistanceMatrixService();
    var destinations = [];
    var origins = [];

    //Define os destinos
    for (let i in user_route.route) {
        destinations.push(user_route.route[i].address);
        origins.push(user_route.route[i].address);
    }

    service.getDistanceMatrix(
        {
            origins: origins,
            destinations: destinations,
            travelMode: 'DRIVING',
        }, callback);  
}; 

function callback(response, status) {

    var rotas = [];
    var ref_todas_rotas = response.originAddresses;

    for (let index in response.rows) {
        var obj = {};

        //Desfine o id deste destinos
        obj.origem = parseInt(index);

        var new_destinos = [];

        //Loop para arrumar os destinos para aquela rota
        for (let index_d in response.rows[index].elements) {

            let obj_2 = {
                //Define o id deste destino
                destino: parseInt(index_d),
                element: response.rows[index].elements[index_d],
            };

            new_destinos.push(obj_2);
        }

        obj.destinos = new_destinos;

        //Grava no array rotas
        rotas.push(obj);
    }


    //Todas novas rotas serão inseridas aqui
    nova_rota = [];

    //Origem inicial do trageto
    var origem_inicial;

    // Define od id da origem
    for(let index in response.originAddresses){
        if(user_route.origin[0].address == response.originAddresses[index]){
            origem_inicial = parseInt(index);
        }
    }


    
    // Procura dentro de rotas a origem para pegar a distancia mais proxima
    for (let index in rotas) {
        if (rotas[index].origem == origem_inicial) {

            //Array para remover da pesquisa
            var exclude = [
                {
                    destino: origem_inicial
                }
            ];

            //Pega a menor distancia
            rotas[index] =...