これは Sphinx を通じて可能です。latitude
データベースに各都市がありlongitude
、Sphinx に属性として追加する必要があります。
Sphinx は、魔法の関数を使用して@geodist
範囲内の関心のあるポイント (POI) を計算します。
以下のように Sphinx 設定ファイルを変更する必要があります。
source geolocation
{
sql_query = select city_id, radians(longitude) as longitude,
radians(latitude) as latitude from cities
sql_attr_float = longitude
sql_attr_float = latitude
}
sql_query
は関数を使用しradians
て変換することに注意してくださいdegrees to radians
。sql_attr_float
経度/緯度が float であることを Sphinx に伝えます。これはマジック@geodist
機能に必要です。sql_query_info
コマンドラインでデバッグする場合に便利です。
以下はPHP
、Sphinx Search を実行して Geo Location 検索を取得するコードです。
$_longitude = $_GET['longitude'];
$_latitude = $_GET['latitude'];
$_radius = $_GET['radius'];
$search = new SphinxClient();
$search->SetServer("localhost", 3312);
$search->SetMatchMode(SPH_MATCH_ALL);
$search->SetArrayResult(true);
$search->SetLimits(0, 100);
$search->SetGeoAnchor('latitude', 'longitude', (float) deg2rad($_latitude),
(float) deg2rad($_longitude));
$circle = (float) $_radius * 1.61;
$search->SetFilterFloatRange('@geodist', 0.0, $circle);
$result = $search->Query('', 'geolocation');