• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

mysql函数-依据经纬度坐标计算距离

mysql 搞代码 4年前 (2022-01-09) 18次浏览 已收录 0个评论

mysql函数-根据经纬度坐标计算距离 在实际的Web开发中,越来越多的碰到一些特定领域的专业算法,比如本文提到的根据两点经纬度计算距离的方法。 通常的两种计算: 1。要算的距离是椭球面的距离 设第一点A的经纬度为(LonA, LatA),第二点B的经纬度为(LonB, LatB

mysql函数-根据经纬度坐标计算距离
在实际的Web开发中,越来越多的碰到一些特定领域的专业算法,比如本文提到的根据两点经纬度计算距离的方法。
通常的两种计算:
1。要算的距离是椭球面的距离
    设第一点A的经纬度为(LonA, LatA),第二点B的经纬度为(LonB, LatB),按照0度经线的基准,东经取经度的正值(Longitude),西经取经度负值(-Longitude),北纬取90-纬度值(90- Latitude),南纬取90+纬度值(90+Latitude),则经过上述处理过后的两点被计为(MLonA, MLatA)和(MLonB, MLatB)。那么根据三角推导,可以得到计算两点距离的如下公式:
C = sin(MLatA)*sin(MLatB)*cos(MLonA-MLonB) + cos(MLatA)*cos(MLatB)
Distance = R*Arccos(C)*Pi/180
    这里,R和Distance单位是相同,如果是采用6371.004千米作为半径,那么Distance就是千米为单位,如果要使用其他单位,比如mile,还需要做单位换算,1千米=0.621371192mile
如果仅对经度作正负的处理,而不对纬度作90-Latitude(假设都是北半球,南半球只有澳洲具有应用意义)的处理,那么公式将是:
C = sin(LatA)*sin(LatB) + cos(LatA)*cos(LatB)*cos(MLonA-MLonB)
Distance = R*Arccos(C)*Pi/180

2。google地图提供的方法(PHP版本)

class Distance{const EARTH_RADIUS = 6378.137; // earth radius (const) kilometer	/**	 *	 *	Example:	 *		$precision = 49;	 *		ini_set("precision", $precision);	 *		echo pi(); //will output 3.141592653589793115997963468544185161590576171875	 *	 *		1 kilometer = 0.621371192 mile	 *	 *	@param double d	 *	@return double data	 */	private function rad( $d )	{		return $d * M_PI / 180.0;	}	/**	 *	 *	Example : get_distance(44.2112,-88.4175,34.5082,-82.6498)	 *	Get Distance between two point : longitude,latitude(lat1,lng1 => lat2,lng2 )	 *	 *	@param double d	 *	@return double data	 *	 */	public function get_distance( $lat1, $lng1, $lat2, $lng2, $base = 1000 )	{		$radLat1 = floatval( $this->rad($lat1) );		$radLat2 = floatval( $this->rad($lat2) );		$a = $radLat1 - $radLat2;		$b = $this->rad($lng1) - $this->rad($lng2);		$s = 2 * asin(sqrt(pow(sin($a/2),2) + cos($radLat1) * cos($radLat2) * pow(sin($b/2),2)));		$s = $s * self::EARTH_RADIU本文来源[email protected]搞@^&代*@码)网5S;		$s = round($s * 10000) / 10000;		return $s;	}}

    第一种方法计算繁琐,我们通常采用的还是第二种方法。但是,无论是第一种还是第二种如果直接用编程语言来转换的话,会非常耗时,因为,我们通常不得不将全部结果查出,然后再逐个计算过滤以得到结果集,如果需要排序,那将更加耗时。
    一个优化的方法就是采用SQL函数,具体的Mysql Function请参见附件,注意其中的括号,默认单位是公里,如果要转换成英里,请参考本文中PHP Code注释部分自行修改。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:mysql函数-依据经纬度坐标计算距离
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址