固定间隔后获取纬度位置
Posted
技术标签:
【中文标题】固定间隔后获取纬度位置【英文标题】:get latitude location after fixed interval 【发布时间】:2017-03-22 08:10:21 【问题描述】:对于速度测量应用程序,我需要每四秒获取一次经纬度更新。我在两次调用 getLatitude 和 getLongitude 函数之间使用了 sleep 函数。但是在屏幕上打印显示值保持不变,即 lon1 和 lon2,因为双精度数(小数点后 14 位)具有完全相同的值,因此速度也显示为 0。
如何在固定时间间隔(此处为 4 秒)后获取纬度和经度? 非常感谢提前。
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
locationListener = new LocationListener()
@Override
public void onLocationChanged(Location location)
double r = 6371;
double lat1 = location.getLatitude();
double lon1 = location.getLongitude(); // To get initial longitude
SystemClock.sleep(4000); /////This seems ineffective.
double lat2 = location.getLatitude();
double lon2 = location.getLongitude(); // and here
double dlat = (lat2-lat1)*22/7/180;
double dlon = (lon2-lon1)*22/7/180;
textView.append("lon1:"+lon1+" lon2:"+lon2+" Kmph\n");
lat1 = lat1*22/7/180;
lat2 = lat2*22/7/180;
double h = ((1-Math.cos(dlat))/2) + Math.cos(lat1)*Math.cos(lat2)*(1-Math.cos(dlon))/2;
double d = 2**Math.asin(Math.sqrt(h));
double sp = d/3;
textView.append(" "+ sp + " Kmph\n");
@Override
public void onStatusChanged(String s, int i, Bundle bundle)
@Override
public void onProviderEnabled(String s)
@Override
public void onProviderDisabled(String s)
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
requestPermissions(new String[]
Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.INTERNET
,10);
return;
else
configureButton();
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
switch (requestCode)
case 10:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
configureButton();
return;
private void configureButton()
button.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
locationManager.requestLocationUpdates("gps", 4000, 0, locationListener);
);
【问题讨论】:
你能看看这个把 30 改成 4 ***.com/questions/39314901/… 谢谢,但这无助于检索当前和以前的纬度和经度值。 它有助于检索当前值,但为什么需要以前的值? 我想获取 lat1 和 lon1 的值;然后在延迟 4 秒后,再有两个这样的值 lat2 和 lon2;然后我把它们放在haversine公式中(它给出了已知纬度和经度的两点之间的距离),然后将距离除以时间(这里是4秒)以获得速度。 然后只需将 lat lng 保存在某处然后使用它 【参考方案1】:嘿,我不确定,但你看起来像这样 希望这会对你有所帮助。
float oldlat, oldlng;
float currentLat, currentLng;
// Use this in location changed
currentLat = (float) location.getLatitude();
currentLng = (float) location.getLongitude();
final Handler handler = new Handler();
handler.postDelayed(new Runnable()
@Override
public void run()
oldlat = (float) location.getLatitude();
oldlng = (float) location.getLongitude();
, 4000);
【讨论】:
以上是关于固定间隔后获取纬度位置的主要内容,如果未能解决你的问题,请参考以下文章
如何在固定时间间隔后使用 IntentService 实现进行轮询?