Sphinx SetGeoAnchor 经纬度查找附近地点

Sphinx 的 SetGeoAnchor方法,(LinkWith:http://sphinxsearch.com/docs/manual-0.9.9.html#api-func-setgeoanchor) 
coreseek提供的中文翻译手册: 
function SetGeoAnchor ( $attrlat, $attrlong, $lat, $long ) 
为地表距离计算设置锚点,并且允许使用它们。$attrlat 和$attrlong 是字符串,分别指定了对应经度和纬度的属性名称。$lat 和$long 是浮点值, 
指定了锚点的经度和纬度值,以角度为单位。一旦设置了锚点,您就可以在您的过滤器和/或排序表达式中使用@geodist 特殊属性。Sphinx 将在每一次全文检索中计算给定经纬度与锚点之前的地表距离,并把此距离附加到匹配结果 
上去。SetGeoAnchor 和索引属性数据中的经纬度值都是角度。而结果会以米为单位返回,因此地表距离 1000.0 代表 1 千米。一英里大约是 1609.344 米。 
 
 
coreseek这部分翻译有个问题,原文说的是弧度,而coreseek翻译成了角度,这是个错误。 
 
一般由GPS提供的经纬度格式(角度)如:longitude:111.177579, latitude:53.051679 ,转换成弧度,公式为 (角度*Pi)/180, 
 
 
首先在做索引的时候 ,得将经纬度数据源转换成弧度。 
 
SQL:select id, radians(longitude) as longitude, radians(latitude) as latitude from locations 
 
PHP: 
$long = (float)$_GET['longitude']; 
$lat = (float)$_GET['latitude']; 
$radius = (float) 10000.0 * 1.61; //搜索10公里以内的地点 
 
$cl = new SphinxClient(); 
$cl->SetServer("localhost", 3312); 
$cl->SetMatchMode(SPH_MATCH_ANY); 
$cl->SetArrayResult(true); 
$cl->SetLimits(0, 100); 
$cl->SetGeoAnchor('latitude', 'longitude', (float) deg2rad($long), (float) deg2rad($lat)); //角度转换成弧度 
 
$cl->SetSortMode(SPH_SORT_EXTENDED, '@geodist asc'); // 按距离正向排序 
$cl->SetFilterFloatRange('@geodist', 0.0, $radius); // 过滤掉大于10公里的地点 
 
$result = $cl->Query('', '*');
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值