カテゴリー【Redis、Node.js、JavaScript】
【Redisメモ・6】GEORADIUS_RO関数をNode.jsから呼ぶ
POSTED BY
2023-10-12
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から書いて呼んでみます。
JavaScript | georadius_test.js | GitHub 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を呼ぶやりかたが記述されている。
Android
iPhone/iPad
Flutter
MacOS
Windows
Debian
Ubuntu
CentOS
FreeBSD
RaspberryPI
HTML/CSS
C/C++
PHP
Java
JavaScript
Node.js
Swift
Python
MatLab
Amazon/AWS
CORESERVER
Google
仮想通貨
LINE
OpenAI/ChatGPT
IBM Watson
Microsoft Azure
Xcode
VMware
MySQL
PostgreSQL
Redis
Groonga
Git/GitHub
Apache
nginx
Postfix
SendGrid
Hackintosh
Hardware
Fate/Grand Order
ウマ娘
将棋
ドラレコ
※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
※本記事内容の無断転載を禁じます。
【WEBMASTER/管理人】
自営業プログラマーです。お仕事ください!ご連絡は以下アドレスまでお願いします★
【キーワード検索】
【最近の記事】【全部の記事】
Intel Macbook2020にBootCampで入れたWindows11 Pro 23H2のBluetoothを復活させるWindowsのデスクトップ画面をそのまま配信するための下準備
WindowsでGPUの状態を確認するには(ASUS系監視ソフトの自動起動を停止する)
CORESERVER v1プランからさくらインターネットスタンダートプランへ引っ越しメモ
さくらインターネットでPython MecabをCGIから使う
さくらインターネットのPHPでAnalytics-G4 APIを使う
インクルードパスの調べ方
【Git】特定ファイルを除外する.gitignore
【Ubuntu/Debian】NVIDIA関係のドライバを自動アップデートさせない
【Python】Spacyを使用して文章から出発地と目的地を抜き出す
【人気の記事】【全部の記事】
進研ゼミチャレンジタッチをAndroid端末化する【Windows10】リモートデスクトップ間のコピー&ペーストができなくなった場合の対処法
Windows11+WSL2でUbuntuを使う【2】ブリッジ接続+固定IPの設定
Windows版Google Driveが使用中と言われアンインストールできない場合
VirtualBoxの仮想マシンをWindows起動時に自動起動し終了時に自動サスペンドする
【Apache】サーバーに同時接続可能なクライアント数を調整する
【C/C++】小数点以下の切り捨て・切り上げ・四捨五入
Googleファミリーリンクで子供の端末の現在地がエラーで取得できない場合
【Linux】iconv/libiconvをソースコードからインストール
Ubuntu Server 21.10でイーサリアムブロックチェーン【その5】
【カテゴリーリンク】
Android
iPhone/iPad
Flutter
MacOS
Windows
Debian
Ubuntu
CentOS
FreeBSD
RaspberryPI
HTML/CSS
C/C++
PHP
Java
JavaScript
Node.js
Swift
Python
MatLab
Amazon/AWS
CORESERVER
Google
仮想通貨
LINE
OpenAI/ChatGPT
IBM Watson
Microsoft Azure
Xcode
VMware
MySQL
PostgreSQL
Redis
Groonga
Git/GitHub
Apache
nginx
Postfix
SendGrid
Hackintosh
Hardware
Fate/Grand Order
ウマ娘
将棋
ドラレコ