我正在使用我在网上找到的以下脚本来获取给定集合坐标之间的所有邮政编码。
使用时,我担心的是当抓取的某些邮政编码大于输入的距离时;不是太多 - 约20公里。
function GetPostalCodes($latitude, $longitude, $range) {
$radius = 3959;
$north = rad2deg(asin(sin(deg2rad($latitude)) * cos($range / $radius) + cos(deg2rad($latitude)) * sin($range / $radius) * cos(deg2rad(0))));
$south = rad2deg(asin(sin(deg2rad($latitude)) * cos($range / $radius) + cos(deg2rad($latitude)) * sin($range / $radius) * cos(deg2rad(180))));
$east = rad2deg(deg2rad($longitude) + atan2(sin(deg2rad(90)) * sin($range / $radius) * cos(deg2rad($latitude)), cos($range / $radius) - sin(deg2rad($latitude)) * sin(deg2rad($north))));
$west = rad2deg(deg2rad($longitude) + atan2(sin(deg2rad(270)) * sin($range / $radius) * cos(deg2rad($latitude)), cos($range / $radius) - sin(deg2rad($latitude)) * sin(deg2rad($north))));
$return = DBSelectAllArrays("SELECT postal FROM postalcodes WHERE (latitude <= $north AND latitude >= $south AND longitude <= $east AND longitude >= $west)");
krsort($return);
if (empty($return)) return false;
return $return;
}
我有什么遗漏才能获得更准确的结果吗?
答案 0 :(得分:0)
鉴于您的意见:
$radius = 6371.0; // mean radius of Earth in km
这是来自维基百科,但我已经看到它在距离其他来源+/- 3公里的范围内。 我开始质疑你是否使用great circle distance计算,但由于地球表面的曲率,这对于更长距离的准确性更为重要。
答案 1 :(得分:0)