玩蛇网提供最新Python编程技术信息以及Python资源下载!

Python实现基于位置用户显示需求的方法是什么

需求描述:
使用 django 1.4 ,实现一个基本的基于位置的用户显示
举例:
用户 A 登录后,系统将显示 “以用户 A 为中心,方圆 X 公里内的所有用户”
基本要求
1.  用户的经纬度坐标可以由 admin 界面直接输入
2.  方圆 X 公里,需要在 settings  里面设置
3.  用户按由近至远的顺序显示,采用列表方式
限制:
1.  地图 api 只能作为显示使用,计算距离时不能使用;

我不太明白这个需求是什么意思?我的理解是在后台输入用户的id、坐标等信息,计算A与各用户的距离,然后在浏览器输出地图和排序后的用户。

PS:这是一道面试题,一看题目感觉有点难的样子,没看懂需求。

bla,bla,

我猜你需要一个ElasticSearch或者Solr之类的支持空间搜索的搜索引擎。

正好之前做过,给你个代码和文档,记得给我点赞。

https://github.com/phodal/django-elasticsearch

https://github.com/phodal/ionic-elasticsearch

如果是面试题,那应该提出多个解决方案吧
1.基于原生数据库的解决方案,即SQL中使用大量的函数来进行计算。缺点是:费力不讨好

sqlSELECT test. * , 2 * 6378.137 * ASIN( SQRT( POW( SIN( PI( ) * ( 31.229639 - lat ) /360 ) , 2 ) + COS( PI( ) * 31.229639 /180 ) * COS( lat * PI( ) /180 ) * POW( SIN( PI( ) * ( 121.455384 - lon ) /360 ) , 2 ) ) ) *1000 AS DISTANCE
FROM  `test`  
WHERE lat > 31.229639 -1 
AND lat < 31.229639 +1 
AND lon > 121.455384 -1 
AND lon < 121.455384 +1 
HAVING distance <400 
ORDER BY distance DESC 

--- 建表SQL
CREATE TABLE IF NOT EXISTS `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) NOT NULL,
  `lat` double NOT NULL,
  `lon` double NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

2.基于Geohash的折中解决方案(https://github.com/cevin/geohash),缺点是:无法精准掌握距离范围
3.基于ElasticSearch MongoDB Solr Sphinx等第三方应用软件的搜索、存储解决方案。+10086

玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/wenda/wd18721.html

相关文章 Recommend

玩蛇网Python互助QQ群,欢迎加入-->: 106381465 玩蛇网Python新手群
修订日期:2017年05月22日 - 08时31分20秒 发布自玩蛇网

您现在的位置: 玩蛇网首页 > Python问题解答 > 正文内容
我要分享到:

必知PYTHON教程 Must Know PYTHON Tutorials

必知PYTHON模块 Must Know PYTHON Modules