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]