我正在设计一个招聘数据库,我需要它来执行几项所有涉及整合计算距离的方法的任务:
1)计算候选人与客户的距离?
2)计算任何一天可供工作的候选人半径范围内的客户?
3)计算在客户范围内具有正确空缺资格的候选人人数。
你可以看到我需要以两种主要方式计算距离1)半径2)随着乌鸦飞行,我宁愿准确的距离,但第一个会做。 我知道我可以集成谷歌地图或其他一些基于网络的映射,但我希望系统是独立的,这样它可以在没有互联网连接的情况下运行。 系统将有一个HTML5前端,后端是在Mysql和PHP中。
谢谢biagio
答案 0 :(得分:6)
可以使用以下公式计算2点之间的距离:
6371*acos(cos(LatitudeA)*cos(LatitudeB)*cos(longitudeB-longitudeA)+sin(LatitudeA)*sin(latitudeB))
当然这是一个“乌鸦苍蝇”近似于公里。
可以通过以下方式翻译成php:
$longA = 2.3458*(M_PI/180); // M_PI is a php constant
$latA = 48.8608*(M_PI/180);
$longB = 5.0356*(M_PI/180);
$latB = 47.3225*(M_PI/180);
$subBA = bcsub ($longB, $longA, 20);
$cosLatA = cos($latA);
$cosLatB = cos($latB);
$sinLatA = sin($latA);
$sinLatB = sin($latB);
$distance = 6371*acos($cosLatA*$cosLatB*cos($subBA)+$sinLatA*$sinLatB);
echo $distance ;
这样你可以计算两点(人)之间的距离,当然也可以确定一个点是否在另一个点的半径内。
答案 1 :(得分:2)
只是一个想法:如果您的客户和候选人住在一个非常有限的区域,我会使用一个矩形地图,并在数据库中输入该区域内所有城市的x和y值。
由于毕达哥拉斯定理,你可以说:
距离²=(x值客户端 - x值候选者)²+(y值客户端 - y值候选者)²
答案 2 :(得分:0)
首先,实际上是不是半径实际上是从客户到候选人的“像乌鸦一样”的距离?无论如何......你需要找出一个根据点之间的距离来计算你需要的算法。
如果您希望系统独立,则需要获得点的坐标(纬度,经度)的值。为此,您可能需要和互联网连接以及使用谷歌地图等服务来根据点的地址查找坐标。但是,一旦你在数据库中存储,你将不需要互联网连接。
有一个公式可以根据坐标计算两点之间的距离,你会很容易找到它:)