アプリケーション開発ポータルサイト
ServerNote.NET
Amazon.co.jpでPC関連商品タイムセール開催中!
カテゴリー【RedisNode.jsJavaScript
【Redisメモ・6】GEORADIUS_RO関数をNode.jsから呼ぶ
POSTED BY
2023-10-12

前回、イオンスタイル入間から最寄りの駅を近い順に検索してみたが、それをNode.jsから行ってみます。

Redisクライアント for Node.jsのインストール

npm install redis

イオンスタイル入間を中心に半径10km以内の駅を近い順に20個抽出、というredis文は以下のように書きます。

GEORADIUS_RO ekipos 139.394872 35.822019 10000 m WITHDIST COUNT 20 ASC

これをNode.jsから書いて呼んでみます。

JavaScriptgeoradius_test.jsGitHub Source
var performance = require('perf_hooks').performance;
var redis = require('redis');
var client = redis.createClient();

var lat = 35.822019;
var lng = 139.394872;
var rad = 10000;
var cnt = 20;

var argArray = ['ekipos', lng, lat, rad, 'm', 'WITHDIST', 'ASC'];
argArray.push('COUNT', cnt); //COUNT 20 などとするにはこうpushするのがポイント

var micro_fr = (Date.now() + performance.now()) * 1000;

client.send_command('GEORADIUS_RO', argArray, function (err, reply) {

  var micro_to = (Date.now() + performance.now()) * 1000;

  var data = "GEORADIUS_RO ekipos " + lng + " " + lat + " " + rad + " " + "m" + " " + "WITHDIST" + " " + "COUNT" + " " + cnt + " " + "ASC" + "\n" +
  "関数実行時間 " + (micro_to - micro_fr) + "マイクロ秒\n";
  if(reply){
    var i,n = reply.length;
    data += "" + n + "個の駅が該当しました。\n";
    for(i = 0; i < n; i++ ){
      data += reply[i][1] + "M " + reply[i][0] + "\n";
    }
  }
  else if(err){
    data += err.toString();
  }
  process.stdout.write(data); //出力
  client.quit(); //どこかでquitしないとプロセスは終わらない
});

実行結果

node georadius_test.js

GEORADIUS_RO ekipos 139.394872 35.822019 10000 m WITHDIST COUNT 20 ASC
関数実行時間 12323.75マイクロ秒
20個の駅が該当しました。
1615.3342M 武蔵藤沢-11
2359.4490M 入間市-11
2372.9044M 狭山ヶ丘-11
2588.4687M 稲荷山公園-11
3147.7753M 入曽-11
3586.3663M 仏子-11
4214.0209M 狭山市-11
4566.8008M 小手指-11
4922.6774M 元加治-11
5890.7776M 新所沢-11
6106.7496M 西武球場前-11
6110.3558M 金子-11
6312.6021M 下山口-11
6603.2410M 西所沢-11
6748.9426M 新狭山-11
6908.1355M 航空公園-11
7100.8763M 東飯能-11
7127.8581M 箱根ケ崎-13
7170.6538M 遊園地西-11
7585.8977M 飯能-11

nodeからgeoradius_ro関数を、COUNT 20などの値つきパラメータをつけて呼ぶこの方法がどこにも見つからず苦労しまして、、結局、node-redisの派生ライブラリである「georedis」のソースにやりかたを見つけたので参照しました。

npm install --save georedis
node_modules/georedis/lib/interfaceNative.js

↑のソースに、ネイティブ(node-redis)関数でgeoradiusを呼ぶやりかたが記述されている。

※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
【WEBMASTER/管理人】
自営業プログラマーです。お仕事ください!
ご連絡は以下アドレスまでお願いします★

☆ServerNote.NETショッピング↓
ShoppingNote / Amazon.co.jp
☆お仲間ブログ↓
一人社長の不動産業務日誌
【キーワード検索】