gpt4 book ai didi

php - 在 PHP/MYSQL 中查找最近的邮政编码位置

转载 作者:行者123 更新时间:2023-11-29 11:03:27 27 4
gpt4 key购买 nike

下面的代码是我编写的,用于在所搜索的邮政编码 50 英里范围内进行半径搜索。如何更改此代码以仅查找最近的诊所地点,而不是诊所地点列表?因此,如果我输入科罗拉多州丹佛市的邮政编码,而我的地点主要位于纽约州、宾夕法尼亚州和俄亥俄州,那么如何才能找到位于俄亥俄州最近的地点?

 /* RADIUS SEARCH - 50 MILES FROM THE ZIP CODE VARIABLE */
$zipcode=trim($_REQUEST['zipcode']);


//Find Out The Longitude & Latitude of Zipcode in existing database
$zcquery = "SELECT * FROM wp_nava5jxxyp_zipcodes WHERE zipcode = $zipcode";
$result = mysqli_query($dbc, $zcquery);
$row = mysqli_fetch_array($result);

$lat = $row['latitude'];
$long = $row['longitude'];


//Setting the Default Distance 50 Miles
// (Equation 1 / 69 = 0.0144927536231884 * 50 miles equals result below)
$miles = 0.7246376811594203;

/* Query To Search for all of the Zip Codes within the range */
$query = 'SELECT zipcode from wp_nava5jxxyp_zipcodes
WHERE latitude between ' . $lat . ' - ' . $miles . ' and ' . $lat . ' + ' . $miles . '
and longitude between ' . $long . ' - ' . $miles . ' and ' . $long . ' + ' . $miles;
$result = mysqli_query($dbc, $query);


//Put those zip codes into a variable array
$variabele = array();
while($row = mysqli_fetch_array($result))
{
if($row['zipcode'] != '')
$variabele[] = $row['zipcode'];
}
$zipcodelist = implode(', ', $variabele);


// Close Connection
mysqli_close($dbc);

//Query Database For Any Clinics that are included in zip code list
$args = array(
'posts_per_page' => 10,
'orderby' => 'post_title',
'order' => 'DESC',
'post_type' => 'clinics',
'meta_query' => array (
array (
'key' => 'cliniczipcode',
'value' => $zipcodelist,
'compare' => 'IN'
)
) );

// the query
$the_query = new WP_Query( $args );

最佳答案

查看此Fastest Way to Find Distance Between Two Lat/Long Points

基本上,您计算到基本 latlon 的距离,按最短距离排序,然后将项目放在顶部。如果您不想进行复杂的查询,也可以在代码中执行此操作。

关键字是“大圆距离”和“半正矢公式”

编辑

假设我有洛杉矶 vert 诊所的数据库

Limehouse Veterinary Clinic   34.1534500122    -118.3630599976
LA Pet Clinic 34.0838623047 -118.3284454346
Bestfriends Animal Hospital 34.1692466736 -118.3970489502

我的基本坐标是好莱坞纬度 34.092324,经度 -118.337122

半正矢公式需要弧度坐标而不是度数。

360 度有 2 pi 弧度,所以y 弧度 = 6.28319 * x 度/360(求解 y)

以下是半正矢公式,其中 2 r arcsin 中的 r 是地球半径:6,371,000 米

-- haversine
-- latdif londif
-- 2 r arcsin [ sqrt[ sin^2(------) + cos(lat1) * cos(lat2) * sin^2(------) ] ]
-- 2 2

因此,要获取我所在位置附近最近的诊所,我可以使用此查询作为上述公式的翻译

select 
name,
2 * 6371000 * ASIN(
sqrt(
SIN(6.28319 * (34.092324 - lat) / 360 / 2) * SIN(6.28319 * (34.092324 - lat) / 360 / 2)
+
COS( 6.28319 * 34.092324 / 360 ) * COS( 6.28319 * lat / 360 )
*
SIN(6.28319 * (-118.337122 - lon) / 360 / 2) * SIN(6.28319 * (-118.337122 - lon) / 360 / 2)
)
)
as dist_in_meters
from locations ORDER BY dist_in_meters;

给我

name                              dist_in_meters
LA Pet Clinic 1234.3897096551932
Limehouse Veterinary Clinic 7204.075434291492
Bestfriends Animal Hospital 10177.689847331932

关于php - 在 PHP/MYSQL 中查找最近的邮政编码位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41820244/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com