我正在研究Sencha Touch和NodeJS上的项目。
我现在要做的是获得设备的移动速度。从我在Sencha Docs中看到的,我应该使用Ext.device.Geolocation来使用设备的地理定位服务而不是浏览器。
这就是我这样做的方式......
Ext.device.Geolocation.getCurrentPosition({
success: function(position) {
alert(position.coords.speed);
alert(JSON.stringify(position))
},
failure: function() {
console.log('something went wrong!');
}
});
当从我的iPhone运行时,位置变量得到这个值..
{ busId: '186', position:'{"speed":null,"accuracy":81.15007979037921,
"altitudeAccuracy":10,"altitude":9.457816123962402,"longitude":-54.950113117326524,
"heading":null,"latitude":-34.93604986481545}'}
缺少速度属性,我无法弄清楚原因。
虽然发生了更奇怪的事情。如果我通过Android设备访问我的应用,则位置变量为空。我得到的只是{}
。
该应用程序在我的PC上的localhost上运行,当我说通过我的手机访问时,我的意思是我使用我的PC IP访问它。我不知道这是否应该可以正常工作。
我在我的项目文件夹中添加了Cordova API,或尝试过,就像这样......
并像我一样包含在我的index.html中......
<script type="text/javascript" src="./cordova-ios/CordovaLib/cordova.js"></script>
我对科尔多瓦没有经验,所以我不知道我在这做什么,我做错了什么?
答案 0 :(得分:2)
根据Sencha Touch 2文档,如果速度值返回null,则设备上不支持该功能(http://docs.sencha.com/touch/2.3.1/#!/api/Ext.util.Geolocation)。如果它受支持,那么它应至少返回0。
如果您不打算打包Android或iOS应用程序,那么使用Cordova是没有意义的。我建议的是编写自己的getSpeed函数,它将检查速度是否为空或0,然后使用回退函数。
对于后退功能,您需要能够计算两组GPS坐标之间的距离。这里有一个解决方案:Calculate distance between 2 GPS coordinates
您还需要跟踪两次GPS读数之间的时间。获得这些读数越接近,速度计算就越准确。例如,中间间隔1分钟比10分钟间隔更准确,因为车辆或人员可能在10分钟内多次停车。
我还要确保您已在地理位置对象上将allowHighAccuracy设置为true。另外,为了防止任何缓存的GPS数据,请将最大年龄设置为0,以便每次都检索新数据。