计算到目的地编程的剩余距离androidgoogle地图APIV2?
Calculate the remaining distance to destination programming android google map API V2?
我正在尝试显示计算到目的地的剩余距离,以使用以下代码显示给用户:
public class MyService extends Service {
private LocationManager locManager;
private LocationListener locListener = new myLocationListener();
static final Double EARTH_RADIUS = 6371.00;
private boolean gps_enabled = false;
private boolean network_enabled = false;
private Handler handler = new Handler();
Thread t;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
}
@Override
public void onDestroy() {
}
@Override
public void onStart(Intent intent, int startid) {
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(getBaseContext(), "Service Started", Toast.LENGTH_SHORT).show();
final Runnable r = new Runnable() {
public void run() {
Log.v("Debug", "Hello");
location();
handler.postDelayed(this, 5000);
}
};
handler.postDelayed(r, 5000);
return START_STICKY;
}
public void location() {
locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
try {
gps_enabled = locManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
} catch (Exception ex) {
}
try {
network_enabled = locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch (Exception ex) {
}
Log.v("Debug", "in on create.. 2");
if (gps_enabled) {
if (ActivityCompat.checkSelfPermission(getApplicationContext(), android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getApplicationContext(), android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener);
Log.v("Debug", "Enabled..");
}
if (network_enabled) {
locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locListener);
Log.v("Debug", "Disabled..");
}
Log.v("Debug", "in on create..3");
}
private class myLocationListener implements LocationListener {
double lat_old = 34.629678;
double lon_old = 50.860293;
double lat_new;
double lon_new;
double time = 10;
double speed = 0.0;
@Override
public void onLocationChanged(Location location) {
Log.v("Debug", "in onLocation changed..");
if (location != null) {
if (ActivityCompat.checkSelfPermission(getApplicationContext(), android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getApplicationContext(), android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
locManager.removeUpdates(locListener);
lat_new = location.getLongitude();
lon_new = location.getLatitude();
String longitude = "Longitude: " + location.getLongitude();
String latitude = "Latitude: " + location.getLatitude();
double distance = CalculationByDistance(lat_new, lon_new, lat_old, lon_old);
Toast.makeText(getApplicationContext(), longitude + "\n" + latitude + "\nDistance is: "
+ distance , Toast.LENGTH_SHORT).show();
}
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
public double CalculationByDistance(double lat1, double lon1, double lat2, double lon2) {
double Radius = EARTH_RADIUS;
double dLat = Math.toRadians(lat2 - lat1);
double dLon = Math.toRadians(lon2 - lon1);
double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
Math.sin(dLon / 2) * Math.sin(dLon / 2);
double c = 2 * Math.asin(Math.sqrt(a));
return Radius * c;
}
}
问题:
1-distance
的值不变!
2- 当我停下来时,我看到每个 5000
:
的吐司
Toast.makeText(getApplicationContext(), longitude + "\n" + latitude + "\nDistance is: " + distance , Toast.LENGTH_SHORT).show();
我不应该看到吐司,因为我正在使用 onLocationChanged
!
我停下来时没有看到吐司。
尝试使用distanceTo
方法
Location locationOne = new Location("point First");
locationOne.setLatitude(latA);
locationOne.setLongitude(lngA);
Location locationTwo = new Location("point Second");
locationTwo.setLatitude(latB);
locationTwo.setLongitude(lngB);
float distance = locationOne.distanceTo(locationTwo);
我正在尝试显示计算到目的地的剩余距离,以使用以下代码显示给用户:
public class MyService extends Service {
private LocationManager locManager;
private LocationListener locListener = new myLocationListener();
static final Double EARTH_RADIUS = 6371.00;
private boolean gps_enabled = false;
private boolean network_enabled = false;
private Handler handler = new Handler();
Thread t;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
}
@Override
public void onDestroy() {
}
@Override
public void onStart(Intent intent, int startid) {
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(getBaseContext(), "Service Started", Toast.LENGTH_SHORT).show();
final Runnable r = new Runnable() {
public void run() {
Log.v("Debug", "Hello");
location();
handler.postDelayed(this, 5000);
}
};
handler.postDelayed(r, 5000);
return START_STICKY;
}
public void location() {
locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
try {
gps_enabled = locManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
} catch (Exception ex) {
}
try {
network_enabled = locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch (Exception ex) {
}
Log.v("Debug", "in on create.. 2");
if (gps_enabled) {
if (ActivityCompat.checkSelfPermission(getApplicationContext(), android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getApplicationContext(), android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener);
Log.v("Debug", "Enabled..");
}
if (network_enabled) {
locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locListener);
Log.v("Debug", "Disabled..");
}
Log.v("Debug", "in on create..3");
}
private class myLocationListener implements LocationListener {
double lat_old = 34.629678;
double lon_old = 50.860293;
double lat_new;
double lon_new;
double time = 10;
double speed = 0.0;
@Override
public void onLocationChanged(Location location) {
Log.v("Debug", "in onLocation changed..");
if (location != null) {
if (ActivityCompat.checkSelfPermission(getApplicationContext(), android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getApplicationContext(), android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
locManager.removeUpdates(locListener);
lat_new = location.getLongitude();
lon_new = location.getLatitude();
String longitude = "Longitude: " + location.getLongitude();
String latitude = "Latitude: " + location.getLatitude();
double distance = CalculationByDistance(lat_new, lon_new, lat_old, lon_old);
Toast.makeText(getApplicationContext(), longitude + "\n" + latitude + "\nDistance is: "
+ distance , Toast.LENGTH_SHORT).show();
}
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
public double CalculationByDistance(double lat1, double lon1, double lat2, double lon2) {
double Radius = EARTH_RADIUS;
double dLat = Math.toRadians(lat2 - lat1);
double dLon = Math.toRadians(lon2 - lon1);
double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
Math.sin(dLon / 2) * Math.sin(dLon / 2);
double c = 2 * Math.asin(Math.sqrt(a));
return Radius * c;
}
}
问题:
1-distance
的值不变!
2- 当我停下来时,我看到每个 5000
:
Toast.makeText(getApplicationContext(), longitude + "\n" + latitude + "\nDistance is: " + distance , Toast.LENGTH_SHORT).show();
我不应该看到吐司,因为我正在使用 onLocationChanged
!
我停下来时没有看到吐司。
尝试使用distanceTo
方法
Location locationOne = new Location("point First");
locationOne.setLatitude(latA);
locationOne.setLongitude(lngA);
Location locationTwo = new Location("point Second");
locationTwo.setLatitude(latB);
locationTwo.setLongitude(lngB);
float distance = locationOne.distanceTo(locationTwo);