我正在尝试确定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中使用什么度量系统?如果有,我怎么能把它转换成里程?
这意味着,如果我需要运行上面的查询来获取一英里内的所有记录,我该如何重建它呢?
答案 0 :(得分:0)
MySQL Spatial使用几何的空间参考系统作为GLength。您尚未定义用于数据的SRID(如果有),但根据您提供的值进行猜测,SRID是默认值。因此,您获得的值只是两点之间的笛卡尔距离,使用度数作为单位。
由于您只计算一条线的距离,您可以使用Haversine公式自行删除GLength并计算距离。请参阅MySQL Great Circle Distance (Haversine formula)。