Foursquare是一家老公司了,在36氪上搜搜这个产品看看报道过的次数就知道了。这款产品在做的是基于用户地理位置信息的手机服务,它鼓励手机用户和他人分享自己当前所在地理位置等信息。
利用Foursquare,当你和你的手机到了某个地点时,它会根据LBS为你推送精准的信息。
LBS无疑是Foursquare的强项。近日这家公司的工程师们在官方博客上写了篇挺有趣的文章,描述了他们是如何让手机“知道”自己所处的地理位置的。
当我们上街时,我们可以看到这个物理世界的样子,知道自己所处的是哪一条大街、哪一家咖啡馆,但这个信息,对于没有感官的手机来说,其实并不是那么容易获得的。
当然,手机能够拥有的“感知器官”就是各种传感器,GPS、陀螺仪、时钟、wifi、蓝牙等等。所以问题就变成了如何从这些传感器数据里计算出手机当前所处的位置,在Foursquare的数据库里,这样可识别的位置在这个世界上大概有8000万个。
大部分的公司采取的方法很简单,他们从自己的数据库入手,数据库里的地点大部分长这样:
对每个点来说,都有一个经度和纬度的定位信息。如果你的项目是做导航或者地图的话,其实这样就够了。但如果你想精确的知道手机所处的位置呢?
比较“天真”的一种做法是在这些地图上,围绕这些点来画圈。这些圈表示手机目前“所处”的是一个什么地方,比如,在圆圈之内的就属于某一家咖啡厅,在圆圈外的就不属于这家咖啡厅。有些实现方法还能根据地点调节这个圆圈的半径大小。
这种方式对于公园或者沃尔玛这样的地方来说足够了。但在城市、机场、购物中心这类比较复杂需要精准定位的地方,这个方法就失效了——圆圈会有很容易发生重合,要精细的分辨出具体的位置是很难做到的。
当这个方法失效时,你可能会耗费大量的时间和财力投入到卫星图像上,试图依靠卫星图像画出具体位置的轮廓。这种方法是可行的,但要求很大的时间投入。另外,很不幸的一点是,手机“看”这个世界的眼光,和卫星图像并不一样。GPS会反射建筑物,然后提供很“傻”的解读和很糟糕的位置精度。不同的手机拥有不同的操作系统,配备不同的wifi和蜂窝网络,这些东西又会通过不同的方法运算出不同的经度和纬度。最后,在多层建筑中,换算出的多边形轮廓有时会在垂直维度上把不同的地理位置信息压缩在一起。所以,手机眼里的世界,不可能仅仅只是某些规则的长方形的组合。
那么,Foursquare是怎么做的?
其实方法很简单。用户每天都会在手机里产生一堆数据,换句话说,每个用户都是一个可以独立工作的性能优异的爬虫工具,他们已经为我们扒下了这个世界需要的大部分地理位置信息。Foursquare有一个数据是,用户已经在同一个地点上告诉过我们70亿次关于“他们站在哪里,这个地方叫什么”的问题了。每一次他们这样做时,Foursquare都会从中挖掘一点信息,然后把这些数据加入已经建好的一个模型中,这个模型正是关于“手机眼里的世界长什么样子”的模型。所以,在手机眼里,这个世界其实长这样:
这是拥有好几百个维度的模型在一张平面图形上的投影。但这张图可以给出真实世界在我们手机眼里的样子。Foursquare利用这一点,配合上诸如近场wifi、个性化、社交因素和实时签到等其他信息,为正在城市里漫游的你推送合适的手机信息。
虽然这篇文章有一点Foursquare自吹自擂的感觉,但我认为文章里针对LBS提到的解决方案其实很有趣。这种解决思路也很有启发性。当你在攻克一个技术上非常复杂的难题时,有时不妨换换思路,也许类似的动用群众的力量进行众包会是一种不错的“巧劲儿”。