位置信息是移动网络中的一个关键信息,在社交、本地生活服务等互联网服务中有很多应用。比如微信里面有附近的人,发布朋友圈可以显示当前的位置,QQ群里面可以先 显示成员距离自己的距离等。
武汉高校之恋匹配社区作为一个社交应用,也很有必要引入位置服务,为用户提供更多功能和更好的用户体验。
1. 位置应用模块
- online
用户列表上显示用户距离自己的距离。 - 匹配功能
增加一个距离限制条件,提供贴心的用户体验。 - 语音社区
发帖显示当前的位置
其他的待开发,比如商业化的话,可以加上本地商业服务什么的...
2. 技术实现分析
2.1 获取位置经纬度
-
方法一:微信开放接口
先使用微信接口获取经纬度信息,再使用百度api得到位置信息。
从微信获取到的地理坐标是基于google的,而百度有自己的标准,所以需要做一个转换,将google的地理坐标换成百度标准的经纬度。
使用url请求的方式 :
<code>http://api.map.baidu.com/geoconv/v1/coords=114.21892734521,29.575429778924;114.21892734521,29.575429778924&from=1&to=5&ak=你的密钥</code>
- 方法二:IP获取地址
js先获取设备当前的ip
<code>
<script language="javascript" type="text/javascript" src="http://fw.qq.com/ipaddress"> </script>
<script>document.write("你的IP是:"+IPData[0]+",来自:"+IPData[2]); </script>
</code>
然后使用百度地图api获取位置信息
- 方法三:HTML5
HTML5 Geolocation(地理定位)
<code>function getLocation()
{
if (navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(showPosition);
}
else
{x.innerHTML="该浏览器不支持获取地理位置。";}
}</code>
2.2 经纬度计算距离
地球是一个近乎标准的椭球体,它的赤道半径为6378.140千米,极半径为 6356.755千米,平均半径6371.004千米。
如果我们假设地球是一个完美的球体,那么它的半径就是地球的平均半径,记为R。
如果以0度经线为基 准,那么根据地球表面任意两点的经纬度就可以计算出这两点间的地表距离(这里忽略地球表面地形对计算带来的误差,仅仅是理论上的估算值)。
设第一点A的经 纬度为(LonA, LatA),第二点B的经纬度为(LonB, LatB),按照0度经线的基准,东经取经度的正值(Longitude),西经取经度负值(-Longitude),北纬取90-纬度值(90- Latitude),南纬取90+纬度值(90+Latitude),则经过上述处理过后的两点被计为(MLonA, MLatA)和(MLonB, MLatB)。
那么根据三角推导,可以得到计算两点距离的如下公式:
C = sin(MLatA)sin(MLatB)cos(MLonA-MLonB) + cos(MLatA)*cos(MLatB)
Distance = RArccos(C)Pi/180
这里,R和Distance单位是相同,如果是采用6371.004千米作为半径,那么Distance就是千米为单位.
2.3 由经纬度查询位置地名
2.4 位置信息的存储
可以存储用户最近的位置经纬度,使用kv方式存储,方便查找;
在user里面加一个字段?
另外,html5中的位置功能还没调研。。。