先に distance_sphere(), distance_spheroid() for MySQL を公開しましたが、
ドキュメントがダウンロードして解凍しないと見れないのは不便だということなので、ここに置きます。
また配布物の中に日本語ドキュメントがなかったので、まずは日本語ドキュメントを。
はじめに
------------------------
このプログラムはユーザ定義関数(UDF)として、PostGISのdistance_sphere(),distance_spheroid()と同様の関数をMySQLに追加するものです。
機能
------------------------
distance_sphere(point, point)
2つの緯度経度を結ぶ直線距離をメートルで返します。地球を半径6,370,986mの球形として計算します。distance_spheroidより速く計算できますが,正確さは劣ります。点間のみが実装されています。
distance_spheroid(point, point, spheroid)
回転楕円体を指定して2つの緯度経度を結ぶ直線距離を計算します。現在、点間のみが実装されています。
ビルド
------------------------
mysql-5.1.*-beta-GIS のソースコードとともにコンパイルします。
予め、mysql-5.1.*-beta-GISのソースコードを入手しておいてください。
(例: http://downloads.mysql.com/forge/mysql-5.1.23-beta-GIS/ )
1) この配布物に含まれているソースコードをmysql-5.1.*-beta-GIS/sql の中に置いてください。
2) mysql-5.1.*-beta-GIS のソースコードと共にコンパイルしてください。
(例)
g++ -DMYSQL_SERVER -shared -o udf_distance_spheroid.so -I../regex -I../sql -I../include spatial.cc calc_distance_spheroid.cc udf_distance_spheroid.cc
3) "udf_distance_spheroid.so" を mysqlライブラリが置かれているディレクトリに移動してください。
(例)
mv udf_distance_spheroid.so /usr/local/mysql/lib/mysql
使用方法
------------------------
1) 関数をUDFとしてMySQLに追加してください。
(例)
mysql> CREATE FUNCTION distance_sphere RETURNS REAL SONAME "udf_distance_spheroid.so";
mysql> CREATE FUNCTION distance_spheroid RETURNS REAL SONAME "udf_distance_spheroid.so";
2) 以下のようなクエリで使ってください。
(例)
mysql> SELECT distance_sphere(GEOMFROMTEXT('POINT(136 36)',4326),GEOMFROMTEXT('POINT(135 35)',4326)) AS dist;
mysql> SELECT distance_spheroid(GEOMFROMTEXT('POINT(136 36)',4326),GEOMFROMTEXT('POINT(135 35)',4326),'SPHEROID["GRS_1980",6378137,298.257222101]') AS dist;






