如何使用他们的经度和纬度值来计算两个位置之间的距离 [英] How to calculate distance between two locations using their longitude and latitude value

查看:124
本文介绍了如何使用他们的经度和纬度值来计算两个位置之间的距离的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面我下面code用来计算之间有两个地方使用他们的经度和纬度的距​​离$ C $词。这是给错了距离。有时会得到正确有时变得无关紧要的距离。我们得到LAT1和lng1从数据库。 //获取LAT2和lng2从GPS如下

 公共类MyLocationListener实现LocationListener的

   {
    @覆盖
    公共无效onLocationChanged(位置LOC)
    {
    LAT2 = loc.getLatitude();
    lng2 = loc.getLongitude();
    字符串文本=我现在的位置是:+Latitud =+ loc.getLatitude()+Longitud =+ loc.getLongitude();

    //System.out.println("Lat和放大器;浪的形式禄+文字);
    //Toast.makeText(getApplicationContext(),文本,Toast.LENGTH_SHORT).show();
    }
    @覆盖
    公共无效onProviderDisabled(字符串提供商)
    {
    }
    @覆盖
    公共无效onProviderEnabled(字符串提供商)
    {
    }
    @覆盖
    公共无效onStatusChanged(字符串商,INT地位,捆绑演员)
    {
    }

//计算距离
                       双earthRadius = 3958.75;

                    双DLAT = Math.toRadians(LAT1,LAT2);
                    双dLng = Math.toRadians(lng1-lng2);
                    双A = Math.sin(DLAT / 2)* Math.sin(DLAT / 2)+
                               Math.cos(Math.toRadians(LAT2))* Math.cos(Math.toRadians(LAT1))*
                               Math.sin(dLng / 2)* Math.sin(dLng / 2);
                    双c = 2 * Math.atan2(的Math.sqrt(a)中,的Math.sqrt(1-a))的;
                    双DIST = earthRadius * C;
 

解决方案

 专用双距离(双LAT1,双lon1,双LAT2,双lon2){
      双THETA = lon1  -  lon2;
      双DIST = Math.sin(deg2rad(LAT1))* Math.sin(deg2rad(LAT2))+ Math.cos(deg2rad(LAT1))* Math.cos(deg2rad(LAT2))* Math.cos(deg2rad(THETA ));
      DIST = Math.acos(DIST);
      DIST = rad2deg(DIST);
      DIST = DIST * 60 * 1.1515;
       返回(DIST);
    }

   私人双人deg2rad(双度){
      返程(度* Math.PI / 180.0);
    }
   私人双人rad2deg(双弧度){
      返程(弧度* 180.0 / Math.PI);
    }
 

Here my code i used below code to calculate the distance between two location using Their latitude and longitude. it is giving wrong distance. sometimes getting right and sometimes getting irrelevant distance. we are getting lat1 and lng1 from database. //getting lat2 and lng2 from GPS as below

public class MyLocationListener implements LocationListener

   {
    @Override
    public void onLocationChanged(Location loc)
    {
    lat2=loc.getLatitude();
    lng2=loc.getLongitude();
    String Text = "My current location is: " +"Latitud = "+ loc.getLatitude() +"Longitud = " + loc.getLongitude();

    //System.out.println("Lat & Lang form Loc"+Text);
    //Toast.makeText( getApplicationContext(), Text,Toast.LENGTH_SHORT).show();
    }
    @Override
    public void onProviderDisabled(String provider)
    {
    }
    @Override
    public void onProviderEnabled(String provider)
    {
    }
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras)
    {
    }

//Calculating distance
                       double earthRadius = 3958.75;

                    double dLat = Math.toRadians(lat1-lat2);
                    double dLng = Math.toRadians(lng1-lng2);
                    double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
                               Math.cos(Math.toRadians(lat2)) * Math.cos(Math.toRadians(lat1)) *
                               Math.sin(dLng/2) * Math.sin(dLng/2);
                    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
                    double dist = earthRadius * c;

解决方案

private double distance(double lat1, double lon1, double lat2, double lon2) {
      double theta = lon1 - lon2;
      double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta));
      dist = Math.acos(dist);
      dist = rad2deg(dist);
      dist = dist * 60 * 1.1515;
       return (dist);
    }

   private double deg2rad(double deg) {
      return (deg * Math.PI / 180.0);
    }
   private double rad2deg(double rad) {
      return (rad * 180.0 / Math.PI);
    }

这篇关于如何使用他们的经度和纬度值来计算两个位置之间的距离的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆