2020年12月3日

LBS附近地点搜索算法资料集合

方法一:基于球面距离搜索附近地点

    点评:需要使用2个字段进行查询,查询效率差,适用于数据量较少的小型应用。

    维基百科推荐使用 Haversine 公式计算球面距离

 

方法二:基于Geohash算法搜索附近地点

    点评:精度可控,使用单字段字符串前缀查询,查询效率较高,适用于大数据的应用。

 

其它方法:

 

PHP源代码

//
// 使用 Haversine 公式计算两个地理坐标点之间的球面距离。
//
// 参数说明:
// $lat1        点1的纬度值,单位:degree
// $lng1        点1的经度值,单位:degree
// $lat2        点2的纬度值,单位:degree
// $lng2        点2的经度值,单位:degree
//
// 返回值:两点之间的球面距离,单位: km
//
function haversine_distance($lat1, $lng1, $lat2, $lng2) {
  $EARTH_RADIUS = 6371.00;   // 地球平均半径,6371km

  // 角度转换成弧度
  $rlat1 = deg2rad($lat1);
  $rlng1 = deg2rad($lng1);
  $rlat2 = deg2rad($lat2);
  $rlng2 = deg2rad($lng2);

  $rlat_diff = abs($rlat1 - $rlat2);
  $rlng_diff = abs($rlng1 - $rlng2);

  $h = pow(sin($rlat_diff/2), 2) + cos($rlat1) * cos($rlat2) * pow(sin($rlng_diff/2), 2);
  return 2 * $EARTH_RADIUS * asin(sqrt($h));
}

//
// 根据到中心点的距离计算东西两侧的经度边界范围,采用 Haversine 公式计算。
//
// 参数说明:
// $lat         中心点的纬度,单位:degree
// $lng         中心点的经度,单位:degree
// $distance    到中心点的距离,单位:km
//
// 返回值: array($lat_diff, $lng_diff)
// $lat_diff    到中心点的纬度边界范围,单位: degree
// $lng_diff    到中心点的纬度边界范围,单位: degree
//
function lbs_haversine_diff($lat, $lng, $distance) {
  $EARTH_RADIUS = 6371.00;   // 地球平均半径,6371km

  // 纬度边界
  $rlat_diff = $distance / $EARTH_RADIUS;
  $dlat_diff = rad2deg($rlat_diff);

  // 经度边界
  $rlat = deg2rad($lat);
  $rlng_diff = 2 * asin( sin($distance / (2 * $EARTH_RADIUS)) / cos($rlat) );
  $dlng_diff = rad2deg($rlng_diff);

  return array($dlat_diff, $dlng_diff);
}

 

posted @ 2020-12-03 11:15 意扬 阅读(321) 评论(0) 推荐(0) 编辑

根据给定点的经纬度和特定距离取范围类的数

摘要: 一、计算两个经纬度的距离 根据经纬度计算距离 R为地球半径,可取平均值 6371km; φ1, φ2 表示两点的纬度; Δλ 表示两点经度的差值。 /** * Created by yuliang on 2015/3/20. */ public class LocationUtils { priva 阅读全文

posted @ 2020-12-03 11:10 意扬 阅读(743) 评论(0) 推荐(0) 编辑

PHP Mysql 根据一个给定经纬度的点,进行附近地点查询–算法 转载

摘要: 几个星期以前的一个项目,需求是根据当前用户上传的经纬度坐标,在数据库几十万万条数据中查询出符合“周围3公里范围内”条件的坐标点。 Mysql本身是支持空间索引的,但是在5.X版本中取消了Distance()和Related(),无法使用空间的距离函数去直接查询距离在一定范围内的点。所以,我首先想到的 阅读全文

posted @ 2020-12-03 10:52 意扬 阅读(603) 评论(0) 推荐(0) 编辑

2020年11月9日

使用正则表达式匹配JS函数代码

摘要: function\s*?\S\(.*?\)\s*?\{[^{}]*?(\{.*?\})*[^{}]*?\} 阅读全文

posted @ 2020-11-09 16:48 意扬 阅读(758) 评论(0) 推荐(0) 编辑

2019年1月7日

随便写点

摘要: gbk2big5Date:2018-6-7 阅读全文

posted @ 2019-01-07 14:26 意扬 阅读(82) 评论(0) 推荐(0) 编辑

2018年10月14日

test

摘要: Date:2018-10-7 阅读全文

posted @ 2018-10-14 22:34 意扬 阅读(100) 评论(0) 推荐(0) 编辑

Dat

摘要: Date:2018-10-7 阅读全文

posted @ 2018-10-14 21:41 意扬 阅读(140) 评论(0) 推荐(0) 编辑

2018年9月4日

数据格式

摘要: 数据格式 Date:2018-6-7 Date:2018-6-7 Date:2018-6-7 阅读全文

posted @ 2018-09-04 11:06 意扬 阅读(104) 评论(0) 推荐(0) 编辑

2018年7月21日

recod

摘要: Date:2018-6-7 阅读全文

posted @ 2018-07-21 16:02 意扬 阅读(163) 评论(0) 推荐(0) 编辑

2018年7月10日

扫描

摘要: Date:2018-6-7 阅读全文

posted @ 2018-07-10 21:23 意扬 阅读(73) 评论(0) 推荐(0) 编辑

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示