什么是MYSQL Spatial中使用的指标?

时间:2013-07-15 14:59:41

标签: mysql spatial spatial-index spatial-query

我正在尝试确定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等...

我在MySQL的任何地方都找不到任何相关文档?有谁知道在MySQL中使用什么度量系统?如果有,我怎么能把它转换成里程?

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

1 个答案:

答案 0 :(得分:0)

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

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