Tuesday, 14 February 2017

Calculate Distance by Latitude and Longitude in Java.

/* Remember South latitudes are negative, east longitudes are positive    */
/* Passed to function:                                                    */
/* lati1, long1 = Latitude and Longitude of point 1 (in decimal degrees)  */
/* lati2, long2 = Latitude and Longitude of point 2 (in decimal degrees)  */
/*          unit = the unit you desire for results                        */
/*           where: 'M' is statute miles (default)                        */
/*                  'K' is kilometers                                     */
/*                  'N' is nautical miles                                 */
------------------------------------------------------------------------
import java.util.*;
import java.lang.*;
import java.io.*;

class DistanceCalculator
{
 public static void main (String[] args) throws java.lang.Exception
 {
  System.out.println(distance(38.9697, -98.80322, 31.46786, -98.53506, "M") + " Miles\n");
  System.out.println(distance(38.9697, -98.80322, 31.46786, -98.53506, "K") + " Kilometers\n");
  System.out.println(distance(38.9697, -98.80322, 31.46786, -98.53506, "N") + " Nautical Miles\n");
 }

 private static double distance(double lati1, double long1, double lati2, double long2, String unit) {
  double theta = long1 - long2;
  double dist = Math.sin(deg2rad(lati1)) * Math.sin(deg2rad(lati2)) + Math.cos(deg2rad(lati1)) * Math.cos(deg2rad(lati2)) * Math.cos(deg2rad(theta));
  distance = Math.acos(distance);
  distance = rad2deg(distance);
  distance = distance * 60 * 1.1515;
  if (unit == "K") {
   distance = distance * 1.609344;
  } else if (unit == "N") {
   distance = distance * 0.8684;
  }

  return (distance);
 }

 /*--------------------------------------------------------------------*/
 /* This function is used to converts decimal degrees into radians*/
 /*--------------------------------------------------------------------*/
 private static double deg2rad(double deg) {
  return (deg * Math.PI / 180.0);
 }

 /*--------------------------------------------------------------------*/
 /* This function is used to converts radians into decimal degrees*/
 /*--------------------------------------------------------------------*/
 private static double rad2deg(double rad) {
  return (rad * 180 / Math.PI);
 }
}

0 comments:

Post a Comment