Distance of two locations.

MySQLとPostgreSQLにて2拠点間の距離を測定してみました。

標準化のおかげで、Google Map, PostgreSQL, MySQL共に概ね同じ結果になりました。

Evaluate distance between old office and new office with MySQL and PostgreSQL.

Version Info:MySQL: 8.0.21 , PostgreSQL: 11.8

オフィス緯度・経度
トリトンスクエア35.65796, 139.78291
恵比寿ファーストスクエア35.64753, 139.71478
対象ロケーション

MySQLでの距離の算出方法

root@localhost [mysql]> select ST_Distance(
    -> ST_GeomFromText('POINT(35.65796 139.78291)',4326),
    -> ST_GeomFromText('POINT(35.64753 139.71478)',4326),'metre') as "from_old_office_to_new_office";
+-------------------------------+
| from_old_office_to_new_office |
+-------------------------------+
|             6277.260893339336 |
+-------------------------------+
1 row in set (0.00 sec)

PostgreSQLでの距離の算出方法

postgres=# select ST_Distance(
ST_GeomFromText('POINT(139.71478 35.64753)',4326),
ST_GeomFromText('POINT(139.78291 35.65796)',4326),true) as "from_old_office_to_new_office";
 from_old_office_to_new_office 
-------------------------------
                 6277.26149066
(1 行)

備考: 

MySQLではGIS関連の関数は、基本的にはDefaultのまま利用出来ますが、PostgreSQLの場合はEXTENSIONを追加する必要があります。(以下、WLS上のPG9.6で検証です。Flushされて無いので、WARNINGが出てますが実際に運用する事が無いWLSなのでスルーでOK)

postgres=# create database gis owner 'postgres' encoding 'UTF8' lc_collate 'C.UTF-8' lc_ctype 'C.UTF-8' template 'template0';
WARNING:  could not flush dirty data: Function not implemented
CREATE DATABASE
postgres=# \c gis
psql (13.3 (Ubuntu 13.3-1.pgdg18.04+1), server 9.6.22)
You are now connected to database "gis" as user "postgres".
gis=# create extension postgis;
CREATE EXTENSION
gis=# select ST_Distance(
gis(# ST_GeomFromText('POINT(139.71478 35.64753)',4326),
gis(# ST_GeomFromText('POINT(139.78291 35.65796)',4326),true) as "from_old_office_to_new_office";
 from_old_office_to_new_office
-------------------------------
                 6277.26149066
(1 row)

gis=#

詳細: https://techblog.lclco.com/entry/2020/12/17/104231

Categories:

Tags:

Comments are closed