需求
我是一乘客,我要打车。需要找到我周围的司机。
模拟(用redis数据库)
1 数据库中录入1000条数据(司机id,当前经纬度)。
2 根据当前经纬度,找到某一范围内的数据。
实现
第三方库的源代码,文档里介绍了nodejs得一个模块node-redis-proximity。
下面是我如何实现的:
1 安装redis
npm install redis-proximity
2 引用redis和redis-proximity并初始化1个索引表
var redis = require('redis');
var client = redis.createClient();
var proximity = require('redis-proximity');
proximity.initialize(client, "mygeohashzset");
3 添加索引
插入1000条商家,前500topic是callTaxi,后500topic是rentHouse
insertK(0,1,function(message){
if(message.code==0){
console.log("1成功1");
}
})
function insertK(i,k,callback){
if(i==k+1000){
console.log("i====--==>>",i);
callback({code:0});
}else{
var deviceId=i+1000;
var latitude=38.388191+i*0.01;
var longitude=117.315046+i*0.01;
if(i<500){
client.hmset("deviceId:"+deviceId,{"deviceId":deviceId,"latitude":latitude,"longitude":longitude,"topic":"callTaxi"});
proximity.addCoordinate(latitude,longitude, deviceId, function(err, reply){
if(err) throw err;
console.log("ADD successful:", reply)
});
}else{
client.hmset("deviceId:"+deviceId,{"deviceId":deviceId,"latitude":latitude,"longitude":longitude,"topic":"rentHouse"});
proximity.addCoordinate(latitude,longitude, deviceId, function(err, reply){
if(err) throw err;
console.log("ADD successful:", reply)
});
}
i++;
insertK(i,k,callback);
}
}
4 找到5000米范围的商家
proximity.query(43.388191, 122.315046, 5000, function(err, replies){
if(err) throw err;
console.log("replies--->>",replies);
});
总结
node-redis-proximity这个模块是用redis实现一定范围的地理位置索引,好像不能限定个数。
对于mongdb数据库可以实现“限定个数”这个功能,下面一篇文章我会介绍一下。
以上songzm个人总结,如有错漏请指出。
网友评论