固定间隔后获取纬度位置

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 实现进行轮询?

使用 gps 捕获经纬度而不会耗尽电池电量

如何使用推送通知等更改位置间隔

如何在固定时间间隔后重复执行异步任务

用GpS定位后的数值,经纬度分与分之间分别用5厘米作间隔,那么每厘米所表示的实际距离是多少呀?.

在固定时间间隔后调用特定方法