Mysql 按邮政编码公式计算的距离

Mysql 按邮政编码公式计算的距离,mysql,math,distance,Mysql,Math,Distance,我发现了这个公式,它是有效的,但我试图做的是,让他的邮政编码距离过滤的能力 我找到了计算两个纬度和经度坐标之间距离的公式 (3956 * ACOS(COS(RADIANS(start_lat)) * COS(RADIANS(end_lat)) * COS(RADIANS(end_lon) - RADIANS(start_lon)) + SIN(RADIANS(start_lat)) * SIN(RADIANS(end_lat)))) 我在发送以下信息的页面上有过滤器 $_POST["start

我发现了这个公式,它是有效的,但我试图做的是,让他的邮政编码距离过滤的能力

我找到了计算两个纬度和经度坐标之间距离的公式

(3956 * ACOS(COS(RADIANS(start_lat)) * COS(RADIANS(end_lat)) * COS(RADIANS(end_lon) - RADIANS(start_lon)) + SIN(RADIANS(start_lat)) * SIN(RADIANS(end_lat))))
我在发送以下信息的页面上有过滤器

$_POST["start_latitude"] = 34.023179;
$_POST["start_longitude"] = -118.303965;
$_POST["max_distance"] = 50;
如果我这样做

SELECT (3956 * ACOS(COS(RADIANS({$_POST["start_latitude"]})) * COS(RADIANS(34.018626)) 
        * COS(RADIANS(-118.249978) - RADIANS({$_POST["start_longitude"]}))
         + SIN(RADIANS({$_POST["start_latitude"]})) * SIN(RADIANS(34.018626))))
在这种情况下,将输出距离为英里数4英里

我如何将这个公式转换为我的目标,以找到距离输入坐标不超过50英里的地方?我知道所有需要做的是改变公式中的位置,但我不擅长学校数学

SELECT place_name FROM places 
    WHERE place_latitude = ? AND place_longitude = ?
编辑:

我有一张表格,其中有1000条格式的记录

id place_name latitude longitude
 1  xxx        432423   -43432
 2  yyy        523452   -54353
 3  zzz        553453   -53422
etc.
所以这个公式必须做如下的事情

SELECT place_name FROM places 
   (CALCULATE each place distance from 
    $_POST["start_latitude"] and $_POST["start_longitude"]
    and select only ones that) < 50
从地点中选择地点\u名称
(计算每个位置与的距离)
$\u POST[“起始纬度”]和$\u POST[“起始经度”]
并且只选择那些小于50的

将距离公式放入
WHERE
子句中:

SELECT place_name
FROM places
WHERE (3956 * ACOS(COS(RADIANS(:start_latitude)) * COS(RADIANS(latitude)) * COS(RADIANS(-longitude) - RADIANS(:start_longitude)) + SIN(RADIANS(:start_latitude)) * SIN(RADIANS(latitude))))
    < :max_distance
选择地点名称
从某处
其中(3956*ACOS(COS(弧度(:起始纬度))*COS(弧度(纬度))*COS(弧度(:起始经度)-弧度(:起始经度))+SIN(弧度(:起始纬度))*SIN(弧度(纬度)))
<:最大距离

此资源和web服务是否可用,请检查:


编辑 查看页面:

--


我想在SQL请求中有一个公式,而不是PHPSplendid,这只是我所需要的。让我编辑一下我的问题,这是相同的公式。我以为您只是想知道如何使用它来选择特定的行。我修复了它以引用表列,而不是硬编码的纬度和经度。
function calc_distance($point1, $point2)
{
    $radius      = 3958;      // Earth's radius (miles)
    $deg_per_rad = 57.29578;  // Number of degrees/radian (for conversion)

    $distance = ($radius * pi() * sqrt(
                ($point1['lat'] - $point2['lat'])
                * ($point1['lat'] - $point2['lat'])
                + cos($point1['lat'] / $deg_per_rad)  // Convert these to
                * cos($point2['lat'] / $deg_per_rad)  // radians for cos()
                * ($point1['long'] - $point2['long'])
                * ($point1['long'] - $point2['long'])
        ) / 180);

    return $distance;  // Returned using the units used for $radius.
}
DECLARE @98001 GEOGRAPHY;
DECLARE @Patzip GEOGRAPHY;

SELECT @98001 = Coordinates  FROM         ZipCodeLKUP INNER JOIN
                      Facility ON ZipCodeLKUP.ZipCode = Facility.ZipCode
                      Where Facility.ZipCode=98001

SELECT @Patzip = Coordinates  FROM         ZipCodeLKUP INNER JOIN
                      HIDIMV_year ON ZipCodeLKUP.ZipCode = HIDIMV_year .Patzip
                      where PATZIP in ('98001', '98466','97202')

SELECT @98001.STDistance(@Patzip)/1000 AS [Distance in KM]