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 一英里内的所有记录。这是我为此运行的查询:

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 中使用的是什么公制系统?如果有,我如何将其转换为里程?

这意味着,如果我需要运行上面的查询来获取一英里内的所有记录,我该如何重建它?

4

1 回答 1

0

MySQL Spatial 使用 GLength 几何的空间参考系统。您尚未定义用于数据的 SRID(如果有),但根据您提供的值猜测,SRID 是默认值。因此,您获得的值只是两点之间的笛卡尔距离,使用度数作为单位。

由于您只计算一条线的距离,您可以删除 GLength 并使用 Haversine 公式自己计算距离。请参阅 MySQL 大圆距离(Haversine 公式)

于 2013-08-24T20:02:54.700 回答