我试图将纬度和经度传递给另一个活动,并检查这个通过的坐标和当前坐标之间的距离。
在第一项活动中:
GeoPoint p1 = mapView.getProjection().fromPixels((int) event.getX(),(int event.getY());
setter(p1.getLatitudeE6()/ 1E6, p1.getLongitudeE6() /1E6);
public void setter(Double lati,Double longi)
{
latitude=lati;
longitude=longi;
}
在按钮点击事件上的我在捆绑的帮助下传递了这个。这很好。
在第二项活动中:
public Location selected_location=null;
Double lati,longi;
Bundle b=this.getIntent().getExtras();
lati=b.getDouble("latitude");
longi=b.getDouble("longitude");
直到这么多它才能正常工作。我甚至打印了这些价值观。真正的问题是下面给出的界限:
selected_location.setLatitude(lati);
selected_location.setLongitude(longi);
我正在尝试将传递的纬度和经度值设置为位置变量。但这导致活动终止。
如果可能,请提出解决方案。如果问题是幼稚请忽略。
答案 0 :(得分:1)
如果您的目标是仅计算您不需要构建位置对象的距离,请使用此method。它是静态的,适用于long和lat值。如果您放置异常的堆栈跟踪,我也可以帮助调试错误。
编辑请求的示例:
float myGetDistance(double startLatitude, double startLongitude, double endLatitude, double endLongitude) {
float [] results = new float[1]; // You need only the distance, thus only one element
Location.distanceBetween(startLatitude, startLongitude, endLatitude, endLongitude, results);
return results[0];
}
答案 1 :(得分:0)
你可以通过它坐标来完成两点之间的距离:
final float[] results= new float[1];
// The computed distance in meters is stored in results[0].
// If results has length 2 or greater, the initial bearing is stored in results[1].
// If results has length 3 or greater, the final bearing is stored in results[2].
Location.distanceBetween(refLat, refLong, latitude, longitude, results);
final float distance = results[0]; // meter!
您可以重用结果数组以用于以后的计算。如果您需要方位信息,请使用声明大小为3的结果数组,如果您不需要它,请使用大小1并以此方式节省计算不需要的信息的时间。