用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经度,从数据库中我从所有市场得到了纬度和经度(在我的数据库中它们被声明为字符串),那么,你验证了市场的坐标是正确的吗?您应该至少提供一对输入,以便我们可以看到您应该得到的结果。计算距离的公式,你从哪里得到的?维基百科()上的公式看起来不同,应该是