2013-05-13 159 views
0

我有一个地图页面,它具有计算距离的形式,但是这包含2个下拉列表,用于处理数据库中的所有城市,以允许用户从第一个下拉列表中选择第一个点列表和第二个下拉列表中的第二个点,然后使用存储在数据库中的每个城市的经度和纬度来计算距离。使用mysql和php计算2点之间的距离

village table: 

- id 
- village_name 
- lattitude 
- longiude 
- district_id 

i have this query untill now but i do not know if it is right 

<?php 
    if(isset($_POST['calculate'])) 
    { 
     $sql = mysql_query("SELECT (3959 * acos(cos(radians(37)) * cos(radians(lattitude)) * cos(radians(longitude) - radians(-122)) + sin(radians(37)) * sin(radians(lat))))FROM village")or die(mysql_error()); 
    } 

?> 

的问题是,我不知道如何使用存储在数据库中的纬度和经度2点之间计算距离

我没有读到haversine公式,但我不知道如何使用它在这里

我不想让任何人为我做这件事,但向我解释并帮助我 任何人都可以帮助我吗?

+0

作为乌鸦飞(?智能乌鸦) – Drew 2013-05-13 21:23:24

+0

http://stackoverflow.com/questions/1006654/fastest-way-to-find-distance-between-two- lat-long-points – Drew 2013-05-13 21:24:31

+0

可能的重复:http://stackoverflow.com/questions/574691/mysql-great-circle-distance-haversine-formula – 2013-05-13 21:25:04

回答

1

在我看来,你应该使用php来计算它。

首先取纬度和从数据库LON(我想他们在浮点格式)

$LonS - Start lon 
$LonE - End lon 
$LatS - Start lat 
$LatE - End lat 

这是大圆式 http://en.wikipedia.org/wiki/Haversine_formula

点(。)指乘法,在PHP '*'。所以,最终的代码在PHP:

$R = 6371; //km 
$A = pow(sin(($LatE - $LatS)/2), 2) + cos($LatS) * cos($LatE) * pow(sin(($LonE - $LonS)/2) , 2); 
$C = 2 * atan2(sqrt($A), sqrt(1 - $A)); 
$D = $R * $C;