Lucene(4.0.0)の最新バージョンで地理検索機能を試しています。要件は簡単です:円の内側のポイントを取得します(中心と半径はクエリ条件として渡されます)。各結果の中心までの距離を出力する API が見つからないため、各結果の緯度と経度を取得してから距離を計算する必要があります。誰でも助けることができますか?コードを以下に示します。
SpatialContext sc = SpatialContext.GEO;
SpatialArgs args = new SpatialArgs(SpatialOperation.Intersects,
sc.makeCircle(lo, la, DistanceUtils.dist2Degrees(dist, DistanceUtils.EARTH_MEAN_RADIUS_KM)));
Filter geo_filter = strategy.makeFilter(args);
try {
Sort chainedSort = new Sort(sfArray).rewrite(searcher);
TopDocs docs = searcher.search(new MatchAllDocsQuery(), geo_filter, 10000, chainedSort);
logger.debug("search finished, num: " + docs.totalHits);
for (ScoreDoc scoreDoc : docs.scoreDocs){
Document doc = searcher.doc(scoreDoc.doc);
double la1 = Double.parseDouble(doc.get("la"));
double lo1 = Double.parseDouble(doc.get("lo"));
double distance = getDistance(la1, lo1, la, lo); // have to calc distance by myself here, not cool
}
} catch (IOException e) {
logger.error("fail to get the search result!", e);
}
Lucene 3.X で距離を取得するのは簡単ですが、Lucene 4.0.0 で地理 (空間) 検索に精通している人はいますか?