Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用java计算坐标之间的距离_Java_Distance_Latitude Longitude - Fatal编程技术网

用java计算坐标之间的距离

用java计算坐标之间的距离,java,distance,latitude-longitude,Java,Distance,Latitude Longitude,我有一个getNearestSuperMarket方法,可以在列表中返回离我位置最近的超市。我从calculateInstance方法得到的结果是错误的。你知道哪种方法最有效吗 limit=9000000 //in meters public List<Market> getNearestMarkets(String lat1, String lng1) throws Exception{ flat1 = Float.parseFloat(lat1); flng1

我有一个
getNearestSuperMarket
方法,可以在列表中返回离我位置最近的超市。我从
calculateInstance
方法得到的结果是错误的。你知道哪种方法最有效吗

limit=9000000 //in meters

public List<Market> getNearestMarkets(String lat1, String lng1) throws Exception{ 
    flat1 = Float.parseFloat(lat1);
    flng1 = Float.parseFloat(lng1);         
    list_markets2=getAllMarkets(); //returns all the markets from the database

    for ( Market ma: list_markets2){

        x1=ma.getLatitude_market();
        y1=Float.parseFloat(x1);

        x2=ma.getLongtitude_market();
        y2=Float.parseFloat(x2);

        dist=calculateDistance(flat1,flng1,y1,y2);
        try{
            if ( dist< limit ){
                ma.setDistance(dist);
                list_nearest_markets.add(ma);
            }
        }
        catch (NumberFormatException ex){
            throw new Exception("somethings happened"+ex.getMessage());
        }
        catch (Exception e0){
            errorMessages ="error: "+e0.getMessage();
            throw new Exception(e0.getMessage());
        }
    }

    return list_nearest_markets;

}//end of method


public float calculateDistance(float flat1, float flng1, float flat2, float flng2) throws Exception{

    try{

        double earthRadius = 6371000; //meters
        double dLat = Math.toRadians(flat2-flat1);
        double dLng = Math.toRadians(flng2-flng1);
        double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.cos(Math.toRadians(flat1)) * Math.cos(Math.toRadians(flat2)) *
        Math.sin(dLng/2) * Math.sin(dLng/2);
        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
        float dist = (float) (earthRadius * c);
        return dist; 

    }catch(Exception e10){
        throw new Exception("error"+e10.getMessage());
    }
}//end of method
limit=9000000//以米为单位
公共列表getNearestMarkets(字符串lat1,字符串lng1)引发异常{
flat1=Float.parseFloat(lat1);
flng1=Float.parseFloat(lng1);
list_markets2=getAllMarkets();//返回数据库中的所有市场
对于(市场ma:list_markets2){
x1=ma.getLatitude_市场();
y1=浮点。解析浮点(x1);
x2=市场的平均价格();
y2=浮点。解析浮点(x2);
距离=计算距离(平面1、平面1、y1、y2);
试一试{
if(距离<极限){
ma.设定距离(dist);
列出最近的市场。添加(ma);
}
}
捕获(NumberFormatException ex){
抛出新异常(“发生了某些事情”+ex.getMessage());
}
捕获(异常e0){
errorMessages=“error:+e0.getMessage();
抛出新异常(e0.getMessage());
}
}
最近市场的退货清单;
}//方法结束
公共float calculateInstance(float flat1、float flng1、float flat2、float flng2)引发异常{
试一试{
双接地半径=6371000;//米
双dLat=数学托拉迪安(flat2-flat1);
双dLng=数学托拉迪安(flng2-flng1);
双a=Math.sin(dLat/2)*Math.sin(dLat/2)+
Math.cos(Math.toRadians(flat1))*Math.cos(Math.toRadians(flat2))*
数学单(dLng/2)*数学单(dLng/2);
双c=2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a));
浮动距离=(浮动)(接地半径*c);
返回距离;
}捕获(异常e10){
抛出新异常(“错误”+e10.getMessage());
}
}//方法结束

你看到了什么样的结果,你希望看到什么样的结果?在我住的地方附近,它告诉我最近的市场离我十万米远。你可以一点一点地解决这个问题。程序接收到的纬度和经度是否正确?如果是,则用于计算球体上to点之间距离的公式(给定坐标lat1、long1和lat2、long2)是错误的。你从哪里得到这些公式的?@Maximilian我从我所在的地方得到了37.984797纬度和23.729647经度,从数据库中我从所有市场得到了纬度和经度(在我的数据库中它们被声明为字符串),那么,你验证了市场的坐标是正确的吗?您应该至少提供一对输入,以便我们可以看到您应该得到的结果。计算距离的公式,你从哪里得到的?维基百科()上的公式看起来不同,应该是