需求
我是一乘客,我要打車。需要找到我周圍的司機。
模擬(用redis數(shù)據(jù)庫)
1 數(shù)據(jù)庫中錄入1000條數(shù)據(jù)(司機id,當(dāng)前經(jīng)緯度)拘哨。
2 根據(jù)當(dāng)前經(jīng)緯度,找到某一范圍內(nèi)的數(shù)據(jù)信峻。
實現(xiàn)
第三方庫的源代碼倦青,文檔里介紹了nodejs得一個模塊node-redis-proximity。
下面是我如何實現(xiàn)的:
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);
});
總結(jié)
node-redis-proximity這個模塊是用redis實現(xiàn)一定范圍的地理位置索引产镐,好像不能限定個數(shù)。
對于mongdb數(shù)據(jù)庫可以實現(xiàn)“限定個數(shù)”這個功能踢步,下面一篇文章我會介紹一下癣亚。
以上songzm個人總結(jié),如有錯漏請指出获印。