我正在玩钛合金,并使用此公式计算距离
toRad = (x) ->
x * Math.PI / 180
toDeg = (x) ->
x * 180 / Math.PI
startingLat = hsc.models.startingPosition.latitude
startingLon = hsc.models.startingPosition.longitude
currentLat = e.coords.latitude
currentLon = e.coords.longitude
R = 6371
dLat = toRad(currentLat - startingLat)
dLon = toRad(currentLon - startingLon)
a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
Math.cos(toRad(startingLat)) * Math.cos(toRad(currentLat)) *
Math.sin (dLon/2) * Math.sin(dLon/2)
c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a))
d = R * c;
hsc.models.positionUpdateCallback (d * 1093.6133) if hsc.models.positionUpdateCallback
console.log "distance is [#{d}]km"
我测试如下。
从A点开始。
启用跟踪
结束于点B。
记录值。清除
启用跟踪
返回A点。
记录值
在6次跑步中,我得到的数值在122到135之间。这个工具告诉我距离是124.9码。
这可能是8号铁杆和7号铁杆之间的区别,所以这是重要的人!!
编辑:我想知道我获得初始职位的方式是否有缺陷。
以下是我如何在用户点击开始时开始跟踪。
hsc.models.startTracking = (onUpdate) ->
return if hsc.models.isTracking
Ti.App.idleTimerDisabled = true;
Ti.Geolocation.setFrequency 100
Titanium.Geolocation.setAccuracy = Titanium.Geolocation.ACCURACY_BEST;
Titanium.Geolocation.setDistanceFilter 0
hsc.models.positionUpdateCallback = onUpdate
hsc.models.isTracking = true;
Ti.Geolocation.addEventListener 'location', hsc.models.locationUpdate
当用户点击"结束"时,我是如何结束的。
if hsc.models.isTracking is true
Ti.App.idleTimerDisabled = false;
hsc.models.isTracking = false
hsc.models.startingPosition = null
Ti.Geolocation.setFrequency 500000
Titanium.Geolocation.setDistanceFilter 10
Ti.Geolocation.removeEventListener 'location', hsc.models.locationUpdate
在locationUpdate
中,我进行
if not hsc.models.startingPosition
hsc.models.startingPosition = e.coords
else
#do the calculation
所以基本上我只是开始接收更新,当我得到第一个更新时,我会设置初始位置。我想知道是否需要进行初始getCurrentPosition
,然后注册位置回调处理程序。这可能会更好地处理第一次更新有点延迟的情况。
更多信息
因此,我实施并尝试了新策略——获得起始位置,然后开始倾听不断变化的事件(在第一步发生时不移动),我仍然看到了相当大的差异。我从A->B跑了134码,然后从B->A跑了117码。我把它从我家门口跑到日托中心去接孩子,登记了2220码,从停着的车回到我家门口有2268码。
更重要的是,坐在同一个地方,它的位置发生了变化,上升了20码!
我一定是做错了什么。。。。。
作为一名前工程技术讲师,我可以告诉你,获得准确的GPS定位需要比几秒钟多得多的时间。在20码以内就足以进行逐路段的街道导航了,因为该应用程序可以捕捉到最近的有效街道位置。
你正在尝试做所谓的实时运动学GPS。即使是用于土地测量和农业设备引导的高端(数万美元)gps单元,也需要一个固定的主单元,该单元至少需要20分钟才能获得稳定的位置,然后可以用于无线连接的漫游车单元中的误差校正。在这些条件下,这些单位可以让你在一英寸的范围内,而你并不真正需要。
然而,我个人可以向您保证,设备在A点和B点静止的时间将是影响距离准确性的主要因素。