本篇文章给大家谈谈android–GPSV.S.加速度计来计算距离,以及安卓加速度计的知识点,同时本文还将给你拓展android–GPS–在跑步和行走时获得距离,时间、android–不可能改变加速度
本篇文章给大家谈谈android – GPS V.S.加速度计来计算距离,以及安卓 加速度计的知识点,同时本文还将给你拓展android – GPS – 在跑步和行走时获得距离,时间、android – 不可能改变加速度计的速率、android – 不同移动设备中的加速度计和陀螺仪精度、android – 为什么使用加速度计和磁力计来获取罗盘值等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:- android – GPS V.S.加速度计来计算距离(安卓 加速度计)
- android – GPS – 在跑步和行走时获得距离,时间
- android – 不可能改变加速度计的速率
- android – 不同移动设备中的加速度计和陀螺仪精度
- android – 为什么使用加速度计和磁力计来获取罗盘值
android – GPS V.S.加速度计来计算距离(安卓 加速度计)
看起来我可以使用GPS或加速度计来计算这些信息.
由于跑步者可以将手机放在手上,肩膀上或口袋里,所以我的第一个直觉是使用GPS来获取位置并计算跑步速度和跑步距离.但是最近有人告诉我,我也可以使用Accelerometer也这样做.
我的问题是:在Android中,哪种方法更好地计算运行速度和运行距离,GPS或加速度计?
解决方法
GPS(如果你在一个工作的区域)将做一个非常好的距离测量.即使有一个非常便宜的GPS接收器.一切基本上都可以,你应该期望开始和结束位置在10m以内,所以在1km的旅行中,你有20m的uncertianty,这是2%的总距离uncertianty.这个不确定性与旅行距离线性下降(即2公里跑步将有1%的不准确,4公里跑步将有0.5%的不准确等),这里的问题将与您的实时显示(GPS位置从卫星切换提供巨大的速度值,或立即丢失信号,丢失所有立即显示的数据)
我认为,使用良好的加速度计,从停止开始,您可以不断地整合信号以获得速度,并持续集成该结果以获得距离…我只是不确定在任何给定的手机中得到什么样的加速度计质量?您可能需要过滤噪声甚至垃圾数据.您还需要考虑其具有的准确性.您的传感器的精确度可达20%,可能会造成非常差的距离跟踪.所以你可能需要使用步数和步长guesstimates.
或许两者的结合可以起作用?
我会试图使用加速度计数据(根据总是工作的方式进行积分或计数)来跟踪速度和距离在短时间内,然后在更长的时间内,广义GPS数据可用于校正或缩放数据从加速度计.特别是如果您在任何给定的时间过滤/阻止基于非严格测量的GPS数据.
android – GPS – 在跑步和行走时获得距离,时间
我有一种情况需要使用GPS技术.
当人走路时,我需要找到两点之间的距离.
当该人开始行走时,他将点击“开始”按钮,当他停止时,他点击停止按钮
在此之后它应该告诉他
1.时间
2.在Kms旅行.
3.从哪里到哪里(地名)例如:a到b
我需要谷歌地图吗?
我在这里看到了link的代码来获取当前位置,它给出了纬度经度.
请帮忙解决这个问题
**
编辑:
**
这是我正在使用的代码
private EditText editTextShowLocation;
private Button buttonGetLocation;
private ProgressBar progress;
private LocationManager locManager;
private LocationListener locListener = new MyLocationListener();
private boolean gps_enabled = false;
private boolean network_enabled = false;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
editTextShowLocation = (EditText) findViewById(R.id.editTextShowLocation);
progress = (ProgressBar) findViewById(R.id.progressBar1);
progress.setVisibility(View.GONE);
buttonGetLocation = (Button) findViewById(R.id.buttonGetLocation);
buttonGetLocation.setonClickListener(this);
locManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
}
@Override
public void onClick(View v) {
progress.setVisibility(View.VISIBLE);
// exceptions will be thrown if provider is not permitted.
try {
gps_enabled = locManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
} catch (Exception ex) {
}
try {
network_enabled = locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch (Exception ex) {
}
// don't start listeners if no provider is enabled
if (!gps_enabled && !network_enabled) {
AlertDialog.Builder builder = new Builder(this);
builder.setTitle("Attention!");
builder.setMessage("Sorry, location is not determined. Please enable location providers");
builder.setPositiveButton("OK", this);
builder.setNeutralButton("Cancel", this);
builder.create().show();
progress.setVisibility(View.GONE);
}
if (gps_enabled) {
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener);
}
if (network_enabled) {
locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locListener);
}
}
class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location location) {
if (location != null) {
// This needs to stop getting the location data and save the battery power.
locManager.removeUpdates(locListener);
String londitude = "Londitude: " + location.getLongitude();
String latitude = "Latitude: " + location.getLatitude();
String altitiude = "Altitiude: " + location.getAltitude();
String accuracy = "Accuracy: " + location.getAccuracy();
String time = "Time: " + location.getTime();
editTextShowLocation.setText(londitude + "\n" + latitude + "\n" + altitiude + "\n" + accuracy + "\n" + time);
progress.setVisibility(View.GONE);
}
}
@Override
public void onProviderdisabled(String provider) {
// Todo Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// Todo Auto-generated method stub
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// Todo Auto-generated method stub
}
}
@Override
public void onClick(DialogInterface dialog, int which) {
if(which == DialogInterface.BUTTON_NEUTRAL){
editTextShowLocation.setText("Sorry, location is not determined. To fix this please enable location providers");
}else if (which == DialogInterface.BUTTON_POSITIVE) {
startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
}
}
它显示我从仿真器控件进入的Logitude Latitude.
在这里我手动输入经度和纬度的细节
通过转到window-> showview-> other->模拟器控件进行模拟器中的测试
但我需要的是我将有两个edittext,我输入地名(A)和(B)
它应该给我的距离
请帮忙
解决方法:
尝试使用Google distance Matrix Api
https://developers.google.com/maps/documentation/distancematrix/
android – 不可能改变加速度计的速率
我必须从我的Android手机收集加速度计数据,所以我做了一个小程序来做到这一点.
经过一些测试,我发现我的Nexus S加速度计的速率在手机处于活动状态时总是每秒50个值,在睡眠时每秒6个值(PARTIAL_WAKE_LOCK),无论我要求的速率如何(norMAL,UI) ,游戏或最快).
所以我决定安装一个在互联网上找到的应用程序来测试加速度计的速率:http://samoht.fr/tuto/accelerometers-frequency-on-android-with-code
但我得到了相同的“错误”:无论我要求的速率如何,当手机处于活动状态时,它总是每秒50个值.
我不明白为什么我的手机会这样.这是个问题吗 :
>与Nexus S有关?
>具体到我的手机?
>与Android 4有关?
编辑:我已经在另一个Nexus S(Android 4)上测试了该程序,我遇到了同样的问题.
所以它似乎消除了上面列出的一种可能性:它与我的手机无关.
解决方法:
我在不同的智能手机上进行了一些测试.结果如下:
Samsung galaxy Teos
-------------------
* When awake
normal: 4.17 Hz
UI: 8.43 hz
Game: 16.93 Hz
Fastest: 109.42 Hz
* When asleep
The phone sends null values (0), whatever the mode I chose
Samsung Nexus S
---------------
* When awake
normal: 49.51 Hz
UI: 49.51 hz
Game: 49.51 Hz
Fastest: 49.51 Hz
* When asleep
6.06 Hz, whatever the mode I chose
LG Nexus 5
----------
* When awake
normal: 15.39 Hz
UI: 15.4 Hz
Game: 50.05 Hz
Fastest: 196.74 Hz
* When asleep
normal: 4.96 Hz
UI: 15.41 Hz
Game: 50.12 Hz
Fastest: 198.53 Hz
LG Nexus 4
----------
* When awake
normal: 15.75 Hz
UI: 15.74 Hz
Game: 48.86 Hz
Fastest: 195.85 Hz
* When asleep
normal: 5.5 Hz
UI: 15.74 Hz
Game: 49.16 Hz
Fastest: 196.75 Hz
Samsung galaxy Nexus
--------------------
* When awake
Fastest: 125 Hz
* When asleep
It sends data
Samsung galaxy Note 2
---------------------
* When awake
Fastest: 100 Hz
* When asleep
The phone does not send anything
Samsung galaxy S3 and S3 Mini
-----------------------------
* When awake
Fastest: 100 Hz
* When asleep
Fastest: 100 Hz
HTC Wildfire
------------
* When awake
normal: 4 Hz
UI: 12 hz
Game: 22.2 Hz
Fastest: 38.40 Hz
* When asleep
The phone does not send anything, whatever the mode I chose
HTC Desire
----------
* When awake
normal: 4.36 Hz
UI: 11.9 hz
Game: 23.3 Hz
Fastest: 47.27 Hz
* When asleep
The phone does not send anything, whatever the mode I chose
请注意,已使用部分唤醒锁执行测试.没有它,Nexus S在睡眠时根本不提供任何数据.
还有一个有用的智能手机列表,加速度计在睡眠时发送(或不发送)兼容数据:http://www.saltwebsites.com/2012/android-accelerometers-screen-off
android – 不同移动设备中的加速度计和陀螺仪精度
陀螺).这个问题已经在几个地方讨论过,比如- here和 here
第一步是确定哪个平台是实现这样一个系统的最佳平台.
主要的可能性是三星的galaxy / galaxy标签或iphone / ipad.
最重要的标准是传感器数据的准确性.但是,这种比较非常复杂,因为精度不仅取决于设备本身,还取决于其上方的软件层.
有没有关于这个问题的研究?
智能手机和平板电脑的传感器之间有区别吗?
任何指向网站或文章的链接都会非常有用
提前致谢!
阿里尔
解决方法
更好的准确性,但也努力为给定的设备提供来自相同构造函数的传感器.
让我解释.我使用过galaxy Tabs 7.0和10.1. GT7的传感器由各种构造器提供,最终导致与轮询频率相关的差异.如果你有一个来自X的加速度计和一个来自Y的陀螺仪,两者都以最大的频率(你想要更高的精度)使用,那些频率将不匹配.一个可能是大约10毫秒,另一个可能是15左右.这对于计算来说非常烦人.对于GT10,所有传感器都是由我使用的平板电脑上的InvenSense构建的. InvenSense为惯性导航创建传感器和软件解决方案(我建议您查看他们的网站和他们的一些论文).它们的准确度不仅高,而且所有传感器都可以协同工作,特别是在频率方面.
TL; DR – 更喜欢使用最新的设备(可能是最昂贵的设备),以提高传感器的准确度和幸运度.
用这种糟糕的传感器开发INS是一件很棘手的事情,但是你可以让它发挥作用.
android – 为什么使用加速度计和磁力计来获取罗盘值
有人可以向我解释一下吗?谢谢
解决方法
根据加速度计,你需要知道加速度计不仅用于测量加速度,正如他们的名字所暗示的那样,但它们也告诉你重力指向的方向.没有你的设备就不会知道“向下”的位置.例如,每个能够进行屏幕自动旋转的智能手机都需要加速度计.
现在为什么需要罗盘?因为在确定北方的位置时,不仅需要知道磁场的方向,还需要知道水平面的位置.你通常不关心北方是高于还是高于你. “向下”方向的知识允许您过滤掉不需要的第三个坐标.
关于android – GPS V.S.加速度计来计算距离和安卓 加速度计的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于android – GPS – 在跑步和行走时获得距离,时间、android – 不可能改变加速度计的速率、android – 不同移动设备中的加速度计和陀螺仪精度、android – 为什么使用加速度计和磁力计来获取罗盘值等相关内容,可以在本站寻找。
本文标签: