美文网首页
node-redis-proximity(关于redis的地理位

node-redis-proximity(关于redis的地理位

作者: kuazi | 来源:发表于2015-09-15 15:03 被阅读489次

    需求

    我是一乘客,我要打车。需要找到我周围的司机。

    模拟(用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个人总结,如有错漏请指出。

    相关文章

      网友评论

          本文标题:node-redis-proximity(关于redis的地理位

          本文链接:https://www.haomeiwen.com/subject/qklmcttx.html