我正在尝试创建一个函数,以便根据我和其他点的位置返回地图上各点之间的距离。
但是这样可以获得在数据库第一点获得的距离。
你能帮帮我吗?
if (cursor.getCount() > 0) {
if (cursor != null && cursor.moveToFirst()) {
lat_s = >cursor.getString(cursor.getColumnIndex("latitude"));
lng_s = >cursor.getString(cursor.getColumnIndex("longitude"));
lat_p = Double.parseDouble(lat_s);
lng_p = Double.parseDouble(lng_s);
double dist = getDistancia(lat, lng, lat_p, lng_p);
}
@SuppressWarnings("deprecation")
SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this,
R.layout.list_row, cursor, from, to);
listView.setAdapter(mAdapter);
}
并且返回距离的函数是:
public double getDistancia(double latitude, double longitude,
double latitudePto, double longitudePto){
double dlon, dlat, a, distancia;
dlon = longitudePto - longitude;
dlat = latitudePto - latitude;
a = Math.pow(Math.sin(dlat/2),2) + Math.cos(latitude) *
Math.cos(latitudePto) * Math.pow(Math.sin(dlon/2),2);
distancia = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
return 6378140 * distancia; /* 6378140 is the radius of the Earth in meters*/
}
答案 0 :(得分:1)
Google地图提供了api以获取两个地点之间的距离 -
了解更多详情
https://developers.google.com/maps/documentation/directions/
你也可以使用它 -
Location locationA = new Location("point A");
locationA.setLatitude(mLatitude / 1E6);
locationA.setLongitude(mLongitude / 1E6);
Location locationB = new Location("point B");
locationB.setLatitude(lat / 1E6);
locationB.setLongitude(lng / 1E6);
double distance = locationA.distanceTo(locationB);
答案 1 :(得分:0)
不明白这个问题,但这是解决方案的一个要素:
protected double distanceBetween(float lat_a, float lng_a, float lat_b, float lng_b) {
float pk = (float) (180 / 3.14169);
float a1 = lat_a / pk;
float a2 = lng_a / pk;
float b1 = lat_b / pk;
float b2 = lng_b / pk;
float t1 = FloatMath.cos(a1) * FloatMath.cos(a2) * FloatMath.cos(b1) * FloatMath.cos(b2);
float t2 = FloatMath.cos(a1) * FloatMath.sin(a2) * FloatMath.cos(b1) * FloatMath.sin(b2);
float t3 = FloatMath.sin(a1) * FloatMath.sin(b1);
double tt = Math.acos(t1 + t2 + t3);
return 6366000 * tt;
}
答案 2 :(得分:0)