【问题标题】:calculate distance计算距离
【发布时间】:2012-05-03 09:06:34
【问题描述】:

我正在设计一个招聘数据库,我需要它来执行几项任务,这些任务都涉及集成一种计算距离的方法:

1) 计算候选人与客户的距离?

2) 计算任何一天可上班的候选人半径范围内的客户?

3) 计算客户半径范围内具有正确职位空缺资格的候选人数量。

如您所见,我需要以 2 种主要方式计算距离 1) 半径 2) 当乌鸦飞过时,我更喜欢精确的距离,但第一种方法可以。 我知道我可以集成谷歌地图或其他一些基于网络的地图,但我希望系统是独立的,这样它就可以在没有互联网连接的情况下运行。 系统将有一个HTML5前端,后端是Mysql和PHP。

谢谢比亚乔

【问题讨论】:

  • SO 上已经有数百个此类问题。你试过搜索吗?
  • 半径如乌鸦飞...

标签: php html gis geospatial distance


【解决方案1】:

两点之间的距离可以用以下公式计算:

6371*acos(cos(LatitudeA)*cos(LatitudeB)*cos(longitudeB-longitudeA)+sin(LatitudeA)*sin(latitudeB))

当然这是以公里为单位的“乌鸦”近似值。

Wich 可以通过以下方式翻译成 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 ;

通过它,您可以计算两点(人)之间的距离,当然还可以确定一个点是否在另一个点的半径内。

【讨论】:

  • 6371 代表什么?
  • 6371 是以千米为单位的地球半径。这个值是一个平均值,因为地球当然不是一个完美的球体。有关它的更多信息,请查看维基百科:en.wikipedia.org/wiki/Earth_radius
  • 在我们之间,地球并不完全是一个球体。但我会原谅你的。 +1。
【解决方案2】:

只是一个想法:如果您的客户和候选人居住在一个非常有限的区域,我会使用矩形地图并在数据库中输入该区域所有城市的 x 和 y 值。

由于勾股定理,你可以说:

距离² =(x 值客户端 - x 值候选)² +(y 值客户端 - y 值候选)²

【讨论】:

    【解决方案3】:

    首先,半径实际上不是从客户到候选人的“如乌鸦一样”的距离吗?无论如何...你需要找出一个算法来根据点之间的距离计算你需要的东西。

    如果您希望系统是独立的,您需要获取点的坐标(纬度、经度)值。为此,您可能需要互联网连接并使用谷歌地图等服务来根据点的地址查找坐标。但是,一旦您将其存储在您的数据库中,您将不需要互联网连接。

    有一个公式可以根据坐标计算两点之间的距离,你会很容易找到它:)

    【讨论】:

    • 亲爱的,谢谢你的回复,我有公式,是的,我正在寻找的部分是乌鸦飞翔。 (半径)数据库中的第二部分计算与客户的距离,以便候选人以正确的顺序出现。我一直在寻找的是 PHP 中这个过程的编程脚本或任何东西?这个网站freemaptools.com/map-tools.htm 得到了我需要的东西,但我需要该过程的编码以及获取免费地图的方法,我可以将其插入数据库并用于绘制信息,有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    • 2014-08-28
    • 1970-01-01
    • 2019-06-22
    • 2011-04-26
    • 2017-08-10
    • 1970-01-01
    相关资源
    最近更新 更多