我希望获得2点之间的距离,一个是通过GPS获得的,第二个是修复。我得到一个结果,但距离是40公里,但它应该是大约25公里,我找不到另一个公式。请帮我解决问题。
btnShowLocation =(Button)getView()。findViewById(R.id.btnLocation);
btnShowLocation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
//Objekt in der Klasse erzeugen
gps = new GPSTracker(getActivity());
//überprüfen, ob GPS aktiv ist
if(gps.canGetLocation()){
latitude = gps.getLatitude();
longitude = gps.getLongitude();
Toast.makeText(getActivity(), "Deine Location - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show();
}else{
//wenn keine Location gefunden wurde
// GPS oder Netzwerk nicht verfügbar
// User fragen, ob er die Einstellungen ändern will
gps.showSettingsAlert();
}
}
});
btnEntfernung = (Button) getView().findViewById(R.id.btnDistance);
btnEntfernung.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
double x1,y1,x2,y2,radius;
latitudeDB = Math.toRadians(48.569601);
longitudeDB = Math.toRadians(16.572087);
double entfernung=0;
radius= 6378.137/360;
x2=latitudeDB;
y2=longitudeDB;
x1=latitude;
y1=longitude;
double distanz =(x1-x2)+(y1-y2);
double distanzfaktor = Math.acos((Math.sin(y1)*Math.sin(y2))+((Math.cos(y1)*Math.cos(y2))* (Math.cos(x2)-Math.cos(x1))));
if (distanz >=0){
entfernung = radius*distanzfaktor;
}
else if(distanz < 0){
entfernung = radius*(distanzfaktor + Math.PI);
}
Toast.makeText(getActivity(), "Deine Entfernung" + entfernung + " km", Toast.LENGTH_LONG).show();
}
});
答案 0 :(得分:1)
为什么不使用内置的Location
类为您执行此操作?
x2=latitudeDB;
y2=longitudeDB;
x1=latitude;
y1=longitude;
float[] results = new float[1];
Location.distanceBetween(x1, y1, x2, y2, results);
float distanceInMeters = results[0];
float distanceInKm = distanceInMeters / 1000.0f;
Toast.makeText(getActivity(), "Deine Entfernung" + distanceInKm + " km", Toast.LENGTH_LONG).show();