最新のサイトを開発する場合、多くの場合、近くの地理的ポイントを出力する機能を実装する必要があります。 この問題を解決する最も最適な方法は、ポイント定義を実装する作業をMySQLの肩に移すことです。 具体的には、MySQL空間拡張機能が必要です(バージョン5.0.16より前は、これらの拡張機能はMyISAMでのみ使用可能でした。MySQLの以降のバージョンでは、InnoDB、NDB、BDB、ARCHIVEによる空間拡張がサポートされています)。
ポイント間の距離は、
Haversine式を使用し
て計算されます。 この式を使用すると、非常に低いエラーでポイント間の距離を取得できます(エラー値はポイント間の距離に直接比例し、カリフォルニアのGoogle本社(37.422045、-122.084347)とOpera Houseオーストラリア、シドニー(-33.856553、151.214696))。
距離を使用して近くのポイントを正しく計算するには、次のストアド関数とプロシージャを作成する必要があります。
ジオディスト関数
geodist()は、座標によってポイント間の距離を決定します。
geodist_pt関数
geodist_pt()はgeodist()のラッパーであり、POINTタイプのオブジェクトの形式でポイントの座標を処理します。
DELIMITER $$ DROP FUNCTION IF EXISTS geodist_pt $$ CREATE FUNCTION geodist_pt (src POINT, dst POINT) RETURNS DECIMAL(6,2) DETERMINISTIC BEGIN RETURN geodist(X(src), Y(src), X(dst), Y(dst)); END $$ DELIMITER ;
geobox_ptプロシージャ
geobox()プロシージャを使用して、検索領域の左上隅と右下隅の座標を計算し、結果の座標をPOINTオブジェクトに変換します。
ジオボックス手順
検索領域の座標を計算します。
使用例:
地理データが保存されているテーブルがあるとします。 テーブルの構造は次のとおりです。
CREATE TABLE geo ( id INT, name VARCHAR(100), x DECIMAL(9,6), y DECIMAL (9,6) );
次に、開始点から200キロメートルの距離にあるすべての集落を取得するには、次の手順を実行する必要があります。