Sphinx SetGeoAnchor 经纬度查找附近地点

理解Sphinx的SetGeoAnchor方法及其实现
本文深入探讨了Sphinx的SetGeoAnchor方法的用途和实现原理,包括如何设置地理锚点,利用@geodist特殊属性进行地表距离计算,并通过SQL和PHP示例展示具体应用。
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('', '*');
Coreseek 全文检索服务器 2.0 (Sphinx 0.9.8)参考手册和源程序 手册內容: 文档版本:v0.9 目录 1. 简介 1.1. 什么是 Sphinx 1.2. Sphinx 的特性 1.3. 如何获得 Sphinx 1.4. 许可协议 1.5. 作者和贡献者 1.6. 开发历史 2. 安装 2.1. 支持的操作系统 2.2. 依赖的工具 2.3. 安装 Sphinx 2.4. 已知的问题和解决方法 2.5. Sphinx 快速入门教程 3. 建立索引 3.1. 数据源 3.2. 属性 3.3. 多值属性 ( MVA : multi-valued attributes) 3.4. 索引 3.5. 数据源的限制 3.6. 字符集 , 大小写转换 , 和转换表 3.7. SQL 数据源 (MySQL, PostgreSQL) 3.8. xmlpipe 数据源 3.9. xmlpipe2 数据源 3.10. 实时索引 更新 3.11. 索引合并 4. 搜索 4.1. 匹配模式 4.2. 布尔查询 4.3. 扩展查询 4.4. 权值计算 4.5. 排序模式 4.6. 结果分组(聚类) 4.7. 分布式搜索 4.8. searchd 日志格式 5. API 参考 5.1. 通用 API 方法 5.1.1. GetLastError 5.1.2. GetLastWarning 5.1.3. SetServer 5.1.4. SetRetries 5.1.5. SetArrayResult 5.2. 通用搜索设置 5.2.1. SetLimits 5.2.2. SetMaxQueryTime 5.3. 全文搜索设置 5.3.1. SetMatchMode 5.3.2. SetRankingMode 5.3.3. SetSortMode 5.3.4. SetWeights 5.3.5. SetFieldWeights 5.3.6. SetIndexWeights 5.4. 结果集过滤设置 5.4.1. SetIDRange 5.4.2. SetFilter 5.4.3. SetFilterRange 5.4.4. SetFilterFloatRange 5.4.5. SetGeoAnchor 5.5. GROUP BY 设置 5.5.1. SetGroupBy 5.5.2. SetGroupDistinct 5.6. 搜索 5.6.1. Query 5.6.2. AddQuery 5.6.3. RunQueries 5.6.4. ResetFilters 5.6.5. ResetGroupBy 5.7. 额外的方法 5.7.1. BuildExcerpts 5.7.2. UpdateAttributes 6. MySQL 存储引擎 (SphinxSE) 6.1. SphinxSE 概览 6.2. 安装 SphinxSE 6.2.1. 在 MySQL 5.0.x 上 编译 SphinxSE 6.2.2. 在 MySQL 5.1.x 上编译 SphinxSE 6.2.3. SphinxSE 安装测试 6.3. 使用 SphinxSE 7. 报告 bugs 8. sphinx.conf 选项参考 8.1. Data source 配置选项 8.1.1. type 8.1.2. sql_host 8.1.3. sql_port 8.1.4. sql_user 8.1.5. sql_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值