SELECt *FROM mytable mJOIN mytable mnON ACOS(COS(RADIANS(m.latitude)) * COS(RADIANS(mn.latitude)) * COS(RADIANS(mn.longitude) - RADIANS(m.longitude)) + SIN(RADIANS(m.latitude)) * SIN(radians(mn.latitude))) <= 20 / 6371.0WHERe m.name = 'grey river'
如果是表,则
MyISAM可能要以本机几何格式存储点并
SPATIAL在其上创建索引:
ALTER TABLE mytable ADD position POINT;UPDATe mytableSET position = POINT(latitude, longitude);ALTER TABLE mytable MODIFY position NOT NULL;CREATE SPATIAL INDEX sx_mytable_position ON mytable (position);SELECT *FROM mytable mJOIN mytable mnON MBRContains ( LineString ( Point ( X(m.position) - 0.009 * 20, Y(m.position) - 0.009 * 20 / COS(RADIANS(X(m.position))) ), Point ( X(m.position) + 0.009 * 20, Y(m.position) + 0.009 * 20 / COS(RADIANS(X(m.position)) ) ), mn.position ) AND ACOS(COS(RADIANS(m.latitude)) * COS(RADIANS(mn.latitude)) * COS(RADIANS(mn.longitude) - RADIANS(m.longitude)) + SIN(RADIANS(m.latitude)) * SIN(radians(mn.latitude))) <= 20 / 6371.0WHERe m.name = 'grey river'



