2010-08-20 89 views
11

我有一个mysql数据库和2张桌子让我们说客户和学校。现在每个表格都有经度和纬度的列。而且我需要从第二个表格中选择一个SELECT,例如第一个表格中的学校位于给定半径的一个记录中。计算应基于经度和纬度。 PS:我正在使用PHP。从基于纬度经度的mysql获取结果

+2

除了Piskvor的回答,本教程还是相当不错的:[使用MySQL的地理距离搜索](http://www.scribd.com/doc/2569355/Geo-Distance-用MySQL搜索),尽管我发现该页面加载不好。作为替代,PowerPoint演示文稿可以在[这里]找到(http://www.mysqlconf.com/mysql2008/public/schedule/detail/347)。 – Mike 2010-08-20 07:29:40

回答

9

您可以使用Spherical law of cosines计算距离 - 度和弧度
ACOS(X) -

SELECT DEGREES(ACOS(SIN(RADIANS(clients.latitude)) * SIN(RADIANS(schools.latitude)) + 
        COS(RADIANS(clients.latitude)) * COS(RADIANS(schools.latitude)) 
                * COS(RADIANS(clients.longitude 
                   – schools.longitude)))) 
     * 60 * 1.1515 * 1.609344 AS distance 
FROM clients, schools HAVING distance < $radius 

RADIANS(X) X的反余弦,即,余弦值是X
DEGREES(X) - 弧度度

60分钟一度
1.1515英里在nautical mile
1.609344 - 一英里里程数

+0

谢谢,我现在就试试并接受它是否正常工作。 – Centurion 2010-08-20 07:36:43

+1

因此,如果我的半径以千米为单位,则查询将如您所写或我应该更改它?谢谢 – Centurion 2010-08-20 07:40:25

+0

Mysql提供了一个错误:'字段列表'中的未知列'clients.longitude-schools.longitude'...,' - '在这里的含义是什么意思? – Centurion 2010-08-20 07:52:46