0

MySQL Spatial 5.6.12のメトリック システムを決定しようとしています。

たとえば、複数のレコードのポイント ジオメトリを格納するために作成された次のテーブルがあります。

CREATE TABLE POINTS_DATA(
    RECORD_ID         INT(15), 
    STREET_ADDRESS      VARCHAR(50), 
    CITY                VARCHAR(50), 
    STATE               VARCHAR(25), 
    ZIPCODE             VARCHAR(11), 
    LOCATION_GEO_CODES_SDO  POINT NOT NULL, 
    SPATIAL INDEX(LOCATION_GEO_CODES_SDO),
    PRIMARY KEY(RECORD_ID)
) ENGINE=MyISAM;

テーブルが作成された後、いくつかのレコードをテーブルに正常に挿入しました。

ここで、指定された LAT/LONG から 1 マイル以内にあるすべてのレコードを取得する次のクエリを作成しました。そのために実行するクエリは次のとおりです。

SELECT RECORD_ID, STREET_ADDRESS, CITY, STATE, ZIPCODE
       , GLength(LineStringFromWKB(LineString(LOCATION_GEO_CODES_SDO
       , POINT(-85.123,39.113))) AS DISTANCE 
FROM   POINTS_DATA  
HAVING DISTANCE < 1 ORDER BY DISTANCE;

このクエリを実行した後、いくつかのレコードを取得しましたが、距離がマイルまたはメートル単位ではないようです。これは、0.0123、0.0145 などの小数値です…</p>

これに関するドキュメントは MySQL のどこにも見つかりませんでしたか? MySQLで使用されているメトリックシステムを知っている人はいますか? また、ある場合、どうすればマイルに換算できますか?

つまり、上記のクエリを実行して 1 マイル以内のすべてのレコードを取得する必要がある場合、どのように再構築すればよいでしょうか?

4

1 に答える 1

0

MySQL Spatial は、GLength のジオメトリの空間参照系を使用します。データに使用している SRID (存在する場合) を定義していませんが、指定した値から推測すると、SRID がデフォルトです。その結果、得られる値は、単位として度を使用した 2 点間のデカルト距離にすぎません。

線の距離のみを計算しているので、GLength をドロップして、Haversine 式を使用して自分で距離を計算できます。MySQL Great Circle Distance (Haversine formula)を参照 してください。

于 2013-08-24T20:02:54.700 に答える