0

I'm trying to track specific smartphones for a cab company using jQuery Mobile. What would be the easiest way to go about this? I've heard good things about Google Latitude, but it's still a little tricky. Is there a way to "plug in" to specific smartphones? (With permission from its owner of course.)

4

3 回答 3

1

您会发现 HTML GeoLocation 更容易实现,但一次跟踪超过几分钟会很麻烦。Google Latitude 是持续跟踪 Android 或 iOS 设备的最简单方法,因为客户端工作已为您完成,您只需弄清楚如何从服务器正确询问 Google。我用 Omniauth gem 在 Rails 上做过几次。即使您不使用该特定库,以下是一些可以为您加快速度的片段:

Omniauth.rb 行指示需要哪些权限:

provider :google_oauth2, GOOGLE_KEY, GOOGLE_SECRET, { access_type: "offline", approval_prompt: "", scope: "https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/latitude.current.best" }

在其他地方,在给定访问令牌的情况下要求纬度:

latitude_data = HTTParty.get('https://www.googleapis.com/latitude/v1/currentLocation?granularity=best&access_token='+self.access_token)['data']

另一件需要一些时间的事情是设置一个后台任务,每小时一次将长期“刷新”令牌交换为新的访问令牌。由于存在额外的安全问题,因此 Latitude 需要这样做。您会发现刷新令牌仅在您的应用第一次获得授权时发送,随后需要在 accounts.google.com 上取消对应用的授权并重新授权以获取刷新令牌。我认为在授权强制重新授权时有一种更简单的方法涉及额外的参数,但我还没有使用它。

祝你好运!Latitude 是我最喜欢的 API,是新的地理感知互联网中的一个很棒的工具!有关 Geolocation API 和 Latitude 的更多示例,请在 github.com/nelsonblaha/groovitation 查看我的项目

于 2013-05-01T04:09:21.693 回答
1

是的,使用 HTML5 GeoLocation API。系统将提示用户许可,但随后您可以观看:

var watchID = navigator.geolocation.watchPosition(function(position) {
  do_something(position.coords.latitude, position.coords.longitude);
});

https://developer.mozilla.org/en-US/docs/WebAPI/Using_geolocation

于 2013-04-30T20:13:38.297 回答
1

你需要解决这个问题,你是为少数司机还是为大量司机创建这个应用程序。

  • 这就是选择合适的js框架很重要的方式。当然,Phonegap 将是一个包装器。实时 java 脚本客户端/服务器通信架构的顶级组合是 Node.js 和 SOCKET.IO 框架。不幸的是,它们仅在干净的混合应用程序中有用(应用程序构建时没有一些 js 移动应用程序框架,如 jQuery Mobile、jQMoby ....)。

如果您要使用 js 移动应用程序框架,则需要将其与骨干 js 框架结合使用。不如 node.js 和套接字 IO 好,但仍然是一个很好的组合。Node.js 和 socket IO 不能很好地与其他 js 移动应用程序框架配合使用。

  • 使用 phonegap 地理定位 API 获取汽车的 lat 和 lng 位置。与运动 GPS 应用程序不同,您不需要每秒刷新一次。汽车正在通过预定义的路线,因此 30 秒的刷新时间就足够了。

  • 不要将 30 秒间隔与实时时间(11:00:00、11:00:30、11:01:00 ...)联系起来,因为每个设备都会尝试同时发送位置刷新,并且将杀死服务器基础架构。最好在应用程序初始化后每 30 秒计时一次。

  • 司机的设备应用程序可以是一个小应用程序。它将作为后台进程工作。因为数据将每 30 秒发送一次,净流量和电池寿命是一个真正的问题。

  • 请求者设备将在每个预定义的时间获取大量数据(围绕请求者设备的某个半径范围内的每辆可能的汽车)。在服务器可以发送批量数据之前,请求者必须发送其位置。它将用于获取最近的汽车。

  • Google Maps mobile API v3 将用作请求者设备上的地图。因为这是一个移动设备,而移动框架并不知道它们的出色性能,所以不要使用它来显示超过 100 辆汽车(在桌面 Web 应用程序的情况下最多只有几百辆)。

  • 我最后的建议是,如果可能的话,创建一个原生移动应用程序,因为混合移动应用程序不擅长处理实时数据。至少没有大量的数据。坚持更长的过渡间隔,它将节省您的电池。并且不要考虑使用 XML 作为客户端/服务器数据。它有很大的数据开销。

节点.js

套接字.IO

于 2013-04-30T20:14:48.790 回答