Untitled

 avatar
unknown
javascript
3 years ago
4.2 kB
9
Indexable
//map.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>My Google Map</title>
    <style>
        #map {
            height: 690px;
            width: 100%;
        }
    </style>
</head>

<body>
    <div id="map"></div>
    <script
        src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAn1m17AAhjM7pKbqe3lFNyqwZpuqMLUh4&libraries=geometry&callback=initMap&v=weekly"
        async></script>


    <script src="map.js"></script>

</body>

</html>

//map.js

let directionsService;
let directionsDisplay;
function initMap() {
    var locationCount
    var locationCoordinates = [locationCount]
    /*var distanceMatrix = []
    for (var i = 0; i < locationCount; i++) {
        distanceMatrix[i] = new Array(locationCount);
    }
    for (var i = 0; i < locationCount; i++) {
        for (var j = 0; j < locationCount; j++) {
            distanceMatrix[i][j] = calcDistance(locationCoordinates[i], locationCoordinates[j]);
        }
    }
    */
    //const start = new google.maps.LatLng(40.765470, 29.940592);
    //kargo başlangıç yeri
    const start = { lat: 40.765470, lng: 29.940592 };
    var options = {
        zoom: 15,
        center: { lat: 40.765470, lng: 29.940592 },
    }
    const map = new google.maps.Map(document.getElementById("map"), options);
    directionsService = new google.maps.DirectionsService();
    directionsDisplay = new google.maps.DirectionsRenderer();
    directionsDisplay.setMap(map)

    var shortestpath = shortestPath(locationCoordinates, locationCount, start);
    showRoute(start, shortestpath[1]);
    for (var i = 0; i < locationCount - 1; i++) {
        showRoute(shortestpath[i], shortestpath[i + 1])
    }
}
function shortestPath(locationCoordinates, locationCount, start) {
    var pathLength = 99999999999999
    var temp
    var tempArr
    var arr
    var fact = factorial(locationCount);
    var p = permute(locationCoordinates);
    for (var i = 0; i < fact; i++) {
        tempArr = p.next().value
        temp = calcPathLength(tempArr, locationCount, start)
        if (temp < pathLength) {
            pathLength = temp
            arr = tempArr
        }
    }
    return arr
}
function factorial(locationCount) {
    if (locationCount == 0) {
        return 1;
    }
    return locationCount * factorial(locationCount - 1);
}
function permute(arr) {
    var l = arr.length,
        used = Array(l),
        data = Array(l);
    return function* backtracking(pos) {
        if (pos == l) yield data.slice();
        else for (var i = 0; i < l; ++i) if (!used[i]) {
            used[i] = true;
            data[pos] = arr[i];
            yield* backtracking(pos + 1);
            used[i] = false;
        }
    }(0);
}
function showRoute(start, destination) {
    let request = {
        origin: start,
        destination: destination,
        travelMode: google.maps.TravelMode.DRIVING
    };
    directionsService.route(request, function (response, status) {
        if (status == 'OK') {
            directionsDisplay.setDirections(response);
            let starter = new google.maps.Marker({
                position: start,
                map: map
            })
            let marker = new google.maps.Marker({
                position: destination,
                map: map
            })
        }
    })
}
function calcDistance(start, destination) {
    let request = {
        origin: start,
        destination: destination,
        travelMode: google.maps.TravelMode.DRIVING
    };
    directionsService.route(request, function (response, status) {
        if (status == 'OK') {
            var distance = response.routes[0].legs[0].distance.value;
            console.log(distance)
        }
        else {
            console.log("Distance couldn't be calculated.")
        }
    })
    return distance
}

function calcPathLength(array, length, start) {
    var sum = calcDistance(start, array[0]);
    for (var i = 0; i < length - 1; i++) {
        sum = sum + calcDistance(array[i], array[i + 1]);
    }
    return sum;
}
Editor is loading...