カテゴリー【PostgreSQL、Node.js、Redis】
PostgreSQLでGEOGRAPHY検索をNode.jsから行う
POSTED BY
2023-10-12
2023-10-12
PostgreSQLでGEOGRAPHY検索をC言語から行う
の、Node.js版です。nodeからpostgresqlに接続するのは公式のこちら
が、トップページで全説明がなされていてわかりやすい。
インストール
npm install pg
イオンスタイル入間から半径10km以内の駅を最大20個近い順に取得するソース
JavaScript | georadius_test_pg.js | GitHub Source |
var performance = require('perf_hooks').performance; var { Client } = require('pg'); var client = new Client({ host: '127.0.0.1', port: 5432, database: 'ekidb', }); client.connect(); var query = "SELECT name, ST_X(geom::geometry) AS longitude, ST_Y(geom::geometry) AS latitude," + " ST_Distance('SRID=4326;POINT(139.394872 35.822019)', geom) AS distance" + " FROM ekipos WHERE ST_DWithin(geom, ST_GeographyFromText('SRID=4326;POINT(139.394872 35.822019)'), 10000.0)" + " ORDER BY distance LIMIT 20"; var micro_fr = (Date.now() + performance.now()) * 1000; client.query(query, (err, res) => { var micro_to = (Date.now() + performance.now()) * 1000; var data = query + "\n" + "関数実行時間 " + (micro_to - micro_fr) + "マイクロ秒\n"; if(res){ var i,n = res.rows.length; data += "" + n + "個の駅が該当しました。\n"; for(i = 0; i < n; i++ ){ data += "" + (i + 1) + " " + res.rows[i].name + "(" + res.rows[i].longitude + " " + res.rows[i].latitude + ") " + res.rows[i].distance + "M\n"; } } else if(err){ data += err.toString(); } process.stdout.write(data); //出力 client.end(); //どこかでendしないとプロセスは終わらない });
Node版では、SELECT ASで定義した返却テーブル名でレスポンスにアクセスできるので、コードがわかりやすくなる。
実行結果
node georadius_test_pg.js SELECT name, ST_X(geom::geometry) AS longitude, ST_Y(geom::geometry) AS latitude, ST_Distance('SRID=4326;POINT(139.394872 35.822019)', geom) AS distance FROM ekipos WHERE ST_DWithin(geom, ST_GeographyFromText('SRID=4326;POINT(139.394872 35.822019)'), 10000.0) ORDER BY distance LIMIT 20 関数実行時間 63270.25マイクロ秒 20個の駅が該当しました。 1 武蔵藤沢-11(139.412736 35.820963) 1618.55278664M 2 入間市-11(139.390294 35.842904) 2353.94189341M 3 狭山ヶ丘-11(139.416975 35.810445) 2374.69603638M 4 稲荷山公園-11(139.39842 35.845112) 2582.28061472M 5 入曽-11(139.427304 35.832481) 3152.08537677M 6 仏子-11(139.360115 35.83769) 3589.75772324M 7 狭山市-11(139.413015 35.856936) 4206.73664685M 8 小手指-11(139.438016 35.800535) 4570.19158489M 9 元加治-11(139.345316 35.84058) 4928.5575168M 10 新所沢-11(139.457069 35.805854) 5900.27449552M 11 西武球場前-11(139.41966 35.77093) 6095.38321915M 12 金子-11(139.328546 35.810822) 6121.42383148M 13 下山口-11(139.441097 35.77941) 6309.44502193M 14 西所沢-11(139.455959 35.789303) 6607.71472248M 15 新狭山-11(139.433499 35.873993) 6740.36207839M 16 航空公園-11(139.465641 35.798272) 6917.51230648M 17 東飯能-11(139.325965 35.852928) 7107.75837244M 18 箱根ケ崎-13(139.346805 35.771158) 7122.20419001M 19 遊園地西-11(139.440166 35.769042) 7163.50373723M 20 西武遊園地-13(139.442747 35.765881) 7584.70286732M
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/管理人】
自営業プログラマーです。お仕事ください!ご連絡は以下アドレスまでお願いします★
【キーワード検索】
【最近の記事】【全部の記事】
CORESERVER v1プランからさくらインターネットスタンダートプランへ引っ越しメモさくらインターネットでPython MecabをCGIから使う
さくらインターネットのPHPでAnalytics-G4 APIを使う
インクルードパスの調べ方
【Git】特定ファイルを除外する.gitignore
【Ubuntu/Debian】NVIDIA関係のドライバを自動アップデートさせない
【Python】Spacyを使用して文章から出発地と目的地を抜き出す
HomeBrewでApache2を入れて自動起動つきで動かしPHPモジュールと連携する
macOSに標準付属のApacheを自動起動つきで動かす
HomeBrewでPostgreSQLを入れて自動起動つきで動かす
【人気の記事】【全部の記事】
【Windows10】リモートデスクトップ間のコピー&ペーストができなくなった場合の対処法Windows版Google Driveが使用中と言われアンインストールできない場合
【C/C++】小数点以下の切り捨て・切り上げ・四捨五入
進研ゼミチャレンジタッチをAndroid端末化する
Windows11+WSL2でUbuntuを使う【2】ブリッジ接続+固定IPの設定
Googleスプレッドシートで図形をコピーして使いまわすには
【Linux】iconv/libiconvをソースコードからインストール
【Apache】サーバーに同時接続可能なクライアント数を調整する
Pythonで処理にかかった時間を計測するには
Windows11のコマンドプロンプトでテキストをコピーする
【カテゴリーリンク】
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
ウマ娘
将棋
ドラレコ