Calculates great-circle distance between two points on earth using the Haversine formula - Android java.lang

Android examples for java.lang:Math Geometry

Description

Calculates great-circle distance between two points on earth using the Haversine formula

Demo Code

/***************************************************************************
 *   Copyright 2005-2009 Last.fm Ltd.                                      *
 *   Portions contributed by Casey Link, Lukasz Wisniewski,                *
 *   Mike Jennings, and Michael Novak Jr.                                  *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
 ***************************************************************************/
//package com.java2s;

public class Main {
    /**/* w w w .jav  a 2  s.c o m*/
     * Calculates great-circle distance between two points on earth using the
     * Haversine formula
     * 
     * @param lat1
     *            (in degrees)
     * @param lon1
     *            (in degrees)
     * @param lat2
     *            (in degrees)
     * @param lon2
     *            (in degrees)
     * @return distance in kilometers
     */
    public static double distance(double lat1, double lon1, double lat2,
            double lon2) {

        double dlat = Math.toRadians(lat2 - lat1);
        double dlon = Math.toRadians(lon2 - lon1);

        double a = Math.pow(Math.sin(dlat / 2), 2)
                + Math.cos(Math.toRadians(lat1))
                * Math.cos(Math.toRadians(lat2))
                * Math.pow(Math.sin(dlon / 2), 2);

        double c = 2 * Math.asin(1 < Math.sqrt(a) ? 1 : Math.sqrt(a));

        double d = 6367 * c;
        return d;
    }
}

Related Tutorials