[url]http://en.wikipedia.org/wiki/Geohash[/url]
简单使用 geohash, redis,bottle, python-geohash 来实现 restful api的地理位置附近人搜素
依赖的redis封装class
API 接口使用example
1. 标记 user 位置
[url]http://localhost:9090/v1/mark/longitude/latitude[/url]
example: [url]http://localhost:9090/v1/mark/12.1256/22.22[/url]
2. 用户请求周围1km内的 其他 user 位置信息
[url]http://localhost:9090/v1/show/longitude/latitude[/url]
example: [url]http://localhost:9090/v1/show/12.1256/22.22[/url]
注:
longitude 经度
latitude 纬度
均为float 型
简单使用 geohash, redis,bottle, python-geohash 来实现 restful api的地理位置附近人搜素
from bottle import Bottle, run
import time
import json
from redis_pool import Redis
R = Redis().connection_pool()
import geohash
app = Bottle()
@app.route('/v1/mark/<longitude:float>/<latitude:float>')
def mark_police(longitude, latitude):
geo_encode = geohash.encode(longitude, latitude, 12)
R.set(geo_encode, time.time())
return json.dumps({"code":"success", "msg":{"geohash":geo_encode}})
@app.route('/v1/show/<longitude:float>/<latitude:float>')
def show(longitude, latitude):
geo_encode = geohash.encode(longitude, latitude, 7)
eight = geohash.expand(geo_encode)
response = []
for e in eight:
response.extend([geohash.decode(i) for i in R.keys("%s*"%e)])
return json.dumps({"code":"success", "msg":response})
run(server='eventlet', app=app, host='0.0.0.0', port=9090)依赖的redis封装class
import redis
class Redis(object):
pool=None
R = None
def __init__(self, host='localhost', port=6379, max_connections=2048):
self.host=host
self.port=port
self.max_connections=int(max_connections)
self.pool = redis.ConnectionPool(host=host,
port=port, db=0,
max_connections=max_connections)
def connection_pool(self):
if not self.R:
self.R = redis.Redis(connection_pool=self.pool)
return self.RAPI 接口使用example
1. 标记 user 位置
[url]http://localhost:9090/v1/mark/longitude/latitude[/url]
example: [url]http://localhost:9090/v1/mark/12.1256/22.22[/url]
{"msg": {"geohash": "s6pucxkhex8v"}, "code": "success"}2. 用户请求周围1km内的 其他 user 位置信息
[url]http://localhost:9090/v1/show/longitude/latitude[/url]
example: [url]http://localhost:9090/v1/show/12.1256/22.22[/url]
{"msg": [[12.123455917462707, 22.220000009983778], [12.125600008293986, 22.220000009983778]], "code": "success"}注:
longitude 经度
latitude 纬度
均为float 型
本文介绍如何利用GeoHash编码、Redis数据库及Python框架Bottle实现RESTful API的地理位置附近人搜索功能。通过简单的HTTP请求即可标记位置并查询周边1公里范围内的其他用户位置。
10万+

被折叠的 条评论
为什么被折叠?



