Как получить расстояние между 2 точками, используя JxMaps - PullRequest
0 голосов
/ 03 мая 2018

В моем приложении мне нужно установить маршрут на карте и узнать его расстояние.
Я использую JxMaps для этого, установка маршрута на форме карты point A до point B работает просто отлично,
Я использовал их программу (пример ниже), чтобы сделать это, но я не знаю, как получить расстояние от этого маршрута. Я попробовал несколько идей, но ни одна из них не сработала.
Должен ли я установить координаты объекта DirectionsLeg и как-то рассчитать расстояние?

private void calculateDirection() {
    // Getting the associated map object
    final Map map = getMap();
    // Creating a directions request
    DirectionsRequest request = new DirectionsRequest();
    // Setting of the origin location to the request
    request.setOriginString(fromField.getText());
    // Setting of the destination location to the request
    request.setDestinationString(toField.getText());
    // Setting of the travel mode
    request.setTravelMode(TravelMode.DRIVING);
    // Calculating the route between locations
    getServices().getDirectionService().route(request, new DirectionsRouteCallback(map) {
        @Override
        public void onRoute(DirectionsResult result, DirectionsStatus status) {
            // Checking of the operation status
            if (status == DirectionsStatus.OK) {
                // Drawing the calculated route on the map
                map.getDirectionsRenderer().setDirections(result);
            } else {
                JOptionPane.showMessageDialog(DirectionsExample.this, "Error. Route cannot be calculated.\nPlease correct input data.");
            }
        }
    });
}

1 Ответ

0 голосов
/ 05 мая 2018

Каждый маршрут в DirectionsResult имеет коллекцию объектов DirectionLeg. Для расчета расстояния маршрута вам необходимо рассчитать сумму расстояний DirectionLeg. Пожалуйста, посмотрите на приведенный ниже пример:

mapView.getServices().getDirectionService().route(request, new DirectionsRouteCallback(map) {

    @Override
    public void onRoute(DirectionsResult result, DirectionsStatus status) {
        if (status == DirectionsStatus.OK) {
            map.getDirectionsRenderer().setDirections(result);

            DirectionsRoute[] routes = result.getRoutes();

            if (routes.length > 0) {
                double distance = 0;
                for (DirectionsLeg leg : routes[0].getLegs())
                    distance += leg.getDistance().getValue();

                System.out.println("distance = " + distance);
            }
        } 
    }
});
...