@akyl-kb

Как посчитать общее кол-во КМ дорог по району?

Как посчитать общее кол-во КМ дорог по району, улице или в выбранной зоне? Через карту гугл, яндекс и т.д
  • Вопрос задан
  • 126 просмотров
Пригласить эксперта
Ответы на вопрос 2
freeExec
@freeExec
Участник OpenStreetMap
1) Качаете выгрузку своего региона с gislab
2) Загружаете их в базу с помощью osm2pgsql
3) Считаете длины в выбранной вам проекции ST_Length
Ответ написан
Комментировать
@evgen9586
Backend-dev. Лублу Enterprise и не люблю понты)
Уточняйте каким образом. От вашей точки до определённого момента. Или куда.
По кратчайшему пути пешком или на автомобиле.

GoogleMaps API довольно гибкий и имеет массту настроек

Если от вашей точки до какой-либо точки.

Определение вашего местоположения
function myplace()
    {
        if(navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(function(position) {
                geocoding(position.coords.latitude, position.coords.longitude);
            });
        } else
        {
            console.log("Geolocation API не поддерживается в вашем браузере");
        }
    }


+ Я делал преобразование Координат в адрес

Преобразование
function geocoding(lat, lon)
    {
        var my_adress;
        var api_key = 'AIzaSyAsuS1MqzRBzRv1HRrfrlyoMRlkrVXEx0g';
        var cordinats = [lat,  lon];
        var loctype = 'ROOFTOP';
        var restype = 'street_address';
        var position = cordinats.join(",");
        var data = {latlng: position, location_type: loctype, result_type: restype, key: api_key};
        $.ajax({
            method: "GET",
            url: "https://maps.googleapis.com/maps/api/geocode/json",
            data: data,
            dataType: 'json',
            success: function (result) {
                console.log(result);
                my_adress = result.results[0].formatted_address;
                my_coords = result.results[0].geometry.location;

                alert("Вы здесь" + " " + "<" + " " + my_adress + " " + ">");
                initMap(my_coords,lat,lon);
            },
            error: function (err) {
                console.log("Ошибка сервера")
            }
        })
    }


Функцию определения вызвать не забудьте.

Теперь отрисовка карты, подсчёт расстояния

Карта
function initMap(coords,lat,lon){
        var latlng = new google.maps.LatLng(lat, lon);
        var map;
        var image = 'images/23.png';
        var basemarker = [

            [53.9143142,27.4173581],
            [53.9251061,27.5888264],
            [53.861006, 27.5692355],
            [53.9098637,27.5348443],
            [53.9351309,27.6492208]
        ];
        //style map
        var mapOptions = {
            center: latlng,
            zoom: 10,
            mapTypeControl: false,
            streetViewControl: false,
            styles: [{"featureType":"water","stylers":[{"saturation":43},{"lightness":-11},{"hue":"#0088ff"}]},{"featureType":"road","elementType":"geometry.fill","stylers":[{"hue":"#ff0000"},{"saturation":-100},{"lightness":99}]},{"featureType":"road","elementType":"geometry.stroke","stylers":[{"color":"#808080"},{"lightness":54}]},{"featureType":"landscape.man_made","elementType":"geometry.fill","stylers":[{"color":"#ece2d9"}]},{"featureType":"poi.park","elementType":"geometry.fill","stylers":[{"color":"#ccdca1"}]},{"featureType":"road","elementType":"labels.text.fill","stylers":[{"color":"#767676"}]},{"featureType":"road","elementType":"labels.text.stroke","stylers":[{"color":"#ffffff"}]},{"featureType":"poi","stylers":[{"visibility":"off"}]},{"featureType":"landscape.natural","elementType":"geometry.fill","stylers":[{"visibility":"on"},{"color":"#b8cb93"}]},{"featureType":"poi.park","stylers":[{"visibility":"on"}]},{"featureType":"poi.sports_complex","stylers":[{"visibility":"on"}]},{"featureType":"poi.medical","stylers":[{"visibility":"on"}]},{"featureType":"poi.business","stylers":[{"visibility":"simplified"}]}]
        };

        map = new google.maps.Map(document.getElementById('map'), mapOptions);

        var marker = new google.maps.Marker({
            position: latlng,
            map: map,
            title:"Вы находитесь в данном месте"
        });
        for (var i = 0; i < basemarker.length; i++) { // отрисовка маркеров на карте
            var dbmarker= basemarker[i];
            var marker1 = new google.maps.Marker({
                position: {lat: dbmarker[0], lng: dbmarker[1]},
                map: map,
                icon:image,
                title: dbmarker[0],

            });
        }


		//отображение маршрута
        var directionsService = new google.maps.DirectionsService;
        var directionsDisplay = new google.maps.DirectionsRenderer({
            draggable: true,
            map: map,
            panel: document.getElementById('right-panel')
        });


        var closestPointIdx = 0;
        var predict = 0;
        var dist = 0;
        var minDist = 100000;
        for (var i = 0 ; i < basemarker.length; i++) {
            console.log("Переменная",coords);
            var request = {
                origin:   {
                    // "LatLng":

                    "lat" : coords.lat,//координаты начальной точки
                    "lng" : coords.lng,//координаты начальной точки
                },

                destination:{
                    "lat" : basemarker[i][0],//координаты конечной точки
                    "lng" : basemarker[i][1]//координаты конечной точки
                },
                travelMode: 'DRIVING'
            };
            directionsService.route(request, function(response, status) {
                if (status == 'OK') {
                    dist = computeTotalDistance_crutch(response); //ответ отсюда  в массив, находим самое меньшее

                    if  (dist < minDist ) {
                        minDist = dist;

                        closestPointIdx = predict;
                        predict++;
                    }

                    displayRoute(latlng,{lat: basemarker[closestPointIdx][0], lng: basemarker[closestPointIdx][1]} , directionsService,
                        directionsDisplay,dist);



                }
            });

        }
    }
    function displayRoute(origin, destination, service, display) {

        service.route({
            origin: origin,
            destination: destination,

            travelMode: 'DRIVING',
            avoidTolls: true
        }, function(response, status) {
            if (status === 'OK') {
                display.setDirections(response);
            } else {
                console.log('Could not display directions due to: ' + status);
            }
        });
    }

    //Подсчёт расстояния

    function computeTotalDistance_crutch(result) {
        var total = 0;
        var myroute = result.routes[0];
        for (var i = 0; i < myroute.legs.length; i++) {
            total += myroute.legs[i].distance.value;
        }
        total = total / 1000;
        return total;
    }


    function viewRoute()
    {
        $("#right-panel").fadeIn(1000)
    }


У карты при отображении маршрута стоит свойство draggable: true,

Поэтому вы можете мышкой или пальцем перетянуть как вам нужно по нужным вам улицам и оно покажет вам и расстояниеи кратчайший путь
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы