简体   繁体   English

地理点之间的距离

[英]Distance between geopoints

I have a problem calculating the distance between two geopoints. 我在计算两个地理点之间的距离时遇到问题。

The geopoints are: 地理位置是:

position1 = mapView.getProjection().fromPixels(
(int) e.getX(),
(int) e.getY());

and the other one 而另一个

double lat = 35.1064;
double lng = 22.556412;
GeoPoint position2 = new GeoPoint((int)(lat * 1E6), (int)(lng * 1E6));

Then I create two locations: 然后我创建了两个位置:

Location loc = new Location("");                                

loc.setLatitude(position1.getLatitudeE6());

loc.setLongitude(position1.getLongitudeE6());

Location loc2 = new Location("");                               

loc.setLatitude(position2.getLatitudeE6());

loc.setLongitude(position2.getLongitudeE6());

And then I calculate the distance: 然后我计算距离:

float distance = loc.distanceTo(loc2);

and I round it: 我围绕它:

Math.round(distance);

But I get results like: 但我得到的结果如下:

1.4331783E7 1.4331783E7

What am I doing wrong? 我究竟做错了什么?

try following my method, 尝试按照我的方法,

    /**
 * 
 * @param lat1 Latitude of the First Location
 * @param lng1 Logitude of the First Location
 * @param lat2 Latitude of the Second Location
 * @param lng2 Longitude of the Second Location
 * @return distance between two lat-lon in float format
 */

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

    int meterConversion = 1609;

    return new Float(dist * meterConversion).floatValue();
}

You are taking wrong latitude and longitudes, please replace the following lines 您的纬度和经度错误,请更换以下行

Location loc = new Location("");                                

loc.setLatitude(position1.getLatitudeE6());

loc.setLongitude(position1.getLongitudeE6());

Location loc2 = new Location("");                               

loc.setLatitude(position2.getLatitudeE6());

loc.setLongitude(position2.getLongitudeE6());

with

Location loc = new Location("");                                

loc.setLatitude(position1.getLatitudeE6()/1E6);

loc.setLongitude(position1.getLongitudeE6()/1E6);

Location loc2 = new Location("");                               

loc.setLatitude(position2.getLatitudeE6()/1E6);

loc.setLongitude(position2.getLongitudeE6()/1E6);

and then once, you will get correct answer. 然后一次,你会得到正确的答案。

you are set the GeoPoint value into the Location object instead of double value try to set as double value of Latitude and Longitude 您将GeoPoint值设置为Location对象而不是double值尝试设置为Latitude和Longitude的double值

Location loc = new Location("");                                

loc.setLatitude(35.1064);

loc.setLongitude(22.556412);

Location loc2 = new Location("");                               

loc2.setLatitude(22.556412);

loc2.setLongitude(35.1064);

now get the location 现在得到的位置

float distance = loc.distanceTo(loc2);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM