这种地理位置计算有多准确?

时间:2012-08-01 19:51:15

标签: ios geolocation coffeescript titanium trigonometry

我正在玩Titanium,我正在使用这个公式来计算距离

    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之间。This tool告诉我距离是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,然后注册位置回调处理程序。这可能会处理第一次更新稍微延迟一点的情况。

更多信息

所以我实施并尝试了新策略 - 获取起始位置,然后开始侦听变化的事件(在第1步发生时不移动),我仍然看到相当大的差异。我去了A - > B并得到134码,然后从B - >; A并且得到了117码。我把它从我的门跑到托儿所去买了后代,并注册了2220码,从我停放的车回到我家门口2268码。

更重要的是,坐在同一个地方,它记录了位置变化,向上20码!

我一定是在做错事.....

1 个答案:

答案 0 :(得分:1)

作为一名前工程技术讲师,我可以告诉您,获得准确的GPS定位需要的时间比不到几秒钟多。在20码范围内对于逐向转弯的街道导航来说非常准确,因为应用程序会捕捉到最近的有效街道位置。

你正在尝试做所谓的实时动态GPS。即使是用于土地测量和农业设备指导的高端(数万美元)gps单元,也需要一个固定的主单元,至少需要20分钟才能获得稳定的位置,然后可以用于无线连接中的纠错流浪者单位。在这些条件下的那些单位可以让你在一英寸之内,这是你真正不需要的。

但是,我个人可以向您保证,设备在A点和B点静止的时间将是您距离准确度的主要因素。