我有一个MySQL数据库,它包含我的客户名称以及他们业务的相应经度/纬度。我有一些代码是从互联网派生出来的,并且调整为在一个邮政编码的半径范围内进行搜索以找到它们,但它不在附近的某些地方。有谁知道API会搜索半径并只返回我的数据库中的POI?我可以想出10个这样做不起作用的原因,但我认为它不会受到伤害。提前致谢!寻找我的兴趣点在半径内?
- EDIT-- 这是我的工作代码。我的数据库具有lat/lng的正确数据。这就像乌鸦苍蝇一样,所以我正在寻找一些更具体的东西。思考?再次感谢!
session_start();
$MyID = $_SESSION['UserID'];
$MyZip = $_SESSION['HomeZip'];
function getCityData(){
$MyZip = $GLOBALS['MyZip'];
$db = $GLOBALS['db'];
$Qry = $db->query("SELECT * FROM 02_driver_geodata WHERE zip = $MyZip");
$Res = $Qry->fetch(PDO::FETCH_ASSOC);
$MyLat = $Res['Lat'];
$MyLng = $Res['Lng'];
return array('Lat' => $MyLat, 'Lng' => $MyLng);
}
function getRestData($SearchRadius = 25, $CreateDate = 'ALL'){
$db = $GLOBALS['db'];
//$R = 6371; // earth's mean radius, km
$R = 3959; //earth's mean radius, miles
$Specs = getCityData();
$lat = $Specs['Lat'];
$lon = $Specs['Lng'];
$rad = $SearchRadius;
// first-cut bounding box (in degrees)
$maxLat = $lat + rad2deg($rad/$R);
$minLat = $lat - rad2deg($rad/$R);
// compensate for degrees longitude getting smaller with increasing latitude
$maxLon = $lon + rad2deg($rad/$R/cos(deg2rad($lat)));
$minLon = $lon - rad2deg($rad/$R/cos(deg2rad($lat)));
$sql = "Select *, (acos(sin(:lat)*sin(radians(Lat)) + cos(:lat)*cos(radians(Lat))*cos(radians(Lng)-:lon)) * :R) As D
From 04_rest_00_locations
Where (acos(sin(:lat)*sin(radians(Lat)) + cos(:lat)*cos(radians(Lat))*cos(radians(Lng)-:lon)) * :R) < :rad
AND Lat Between :minLat And :maxLat
AND Lng Between :minLon And :maxLon
AND CreateDate > 01/01/2015 AND CreateDate <= NOW()
Order by D";
$params = array(
'lat' => deg2rad($lat),
'lon' => deg2rad($lon),
'minLat' => $minLat,
'minLon' => $minLon,
'maxLat' => $maxLat,
'maxLon' => $maxLon,
'rad' => $rad,
'R' => $R,
);
$points = $db->prepare($sql);
$points->execute($params);
$Return['Data'] = $points->fetchAll(PDO::FETCH_ASSOC);
$Return['Count'] = $points->rowCount();
return $Return;
}
您需要将每个邮政编码与(纬度,经度)对关联。完成之后,您可以尝试使用Haversine公式来查找每个邮政编码和每个业务之间的距离。请在此阅读有关Haversine公式的更多信息:http://en.wikipedia.org/wiki/Haversine_formula – 2015-03-03 03:45:01
谢谢。我已经这样做了。它实际上工作,我有lats/lngs,但它是像乌鸦飞,而不是确切的里程。这就是为什么我暂时在寻找一个API。谢谢! – b3tac0d3 2015-03-03 04:31:18