【问题标题】:Error on calculating distance between two geo points计算两个地理点之间的距离时出错
【发布时间】:2011-11-11 11:00:32
【问题描述】:

以下代码计算两个地理点之间的距离并返回距离数组

public static double[] getDistance() {
    double[] distance=new double[20];
    Intent intent=new Intent();
    double latitude[]=intent.getDoubleArrayExtra("latitude");
    double longitude[]=intent.getDoubleArrayExtra("longitude");
    Log.v(TAG, "got latitude array");
    double getlat=intent.getDoubleExtra("geoLat", 0.0);

    double getlng=intent.getDoubleExtra("geoLng", 0.0);
          Log.v(TAG, "got location");
          for(int i=0;i<20;i++) {
   distance[i]=gps2m((float)getlat, (float)getlng, (float)latitude[i], (float)longitude[i]);
 }
return distance;
}

而gps2m是

  private static double gps2m(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);
    Log.v(TAG, "returning distance");
    return 6366000*tt;
}
}

活动显示距离如下

public class CalculateDistance extends Activity{
double Latitude;
private String tag="CalculateDistance";
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
setContentView(R.layout.distance_phone_no);
Intent intent= getIntent();
int value= intent.getIntExtra("clickedid",0);//item id when clicked on listview
Log.v(tag, ""+value);
double latitude[]=GetLatAndLng.getDistance();
Log.v(tag, "got distanc array");
for(int i=0;i<20;i++) 
    if(i==value)
        Latitude=latitude[i];
TextView tv=(TextView)findViewById(R.id.text11);
tv.setText(""+Latitude);
}
}

它给了NullPointer异常导致这种情况的行是getDistance方法中的for循环来计算距离。

帮我看看哪里出错了? 或任何其他计算距离的方法... 我需要帮助!!! 提前致谢!!!

【问题讨论】:

  • 如果intent = new Intent() 怎么能intent.getDoubleArrayExtra 工作??
  • 您可能还想看看静态Location.distanceBetween 方法。无需重新发明轮子。 :)
  • 哦!好点@Sherif!将其更改为 getIntent();
  • @MH 你能给我一些关于 distanceto 或 distancebetween 方法的想法

标签: android distance latitude-longitude


【解决方案1】:

这里有一个定制的sn-p,希望对你有帮助

import static java.lang.Math.acos;
import static java.lang.Math.cos;
import static java.lang.Math.sin;
import static java.lang.Math.toRadians;

public static long getDistanceMeters(double lat1, double lng1, double lat2, double lng2) {
    double l1 = toRadians(lat1);
    double l2 = toRadians(lat2);
    double g1 = toRadians(lng1);
    double g2 = toRadians(lng2);

    double dist = acos(sin(l1) * sin(l2) + cos(l1) * cos(l2) * cos(g1 - g2));
    if(dist < 0) {
        dist = dist + Math.PI;
    }
    return Math.round(dist * 6378100);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2011-12-24
    • 1970-01-01
    • 2010-10-30
    相关资源
    最近更新 更多