2014-04-25 32 views
0
String loc_expr = "distance(location, geopoint(" + userLatitude + ", " + userLongitude + "))"; 

    // Build the SortOptions 
    SortOptions sortOptions = SortOptions.newBuilder() 
      .addSortExpression(SortExpression.newBuilder().setExpression(loc_expr).setDirection(SortExpression.SortDirection.ASCENDING).setDefaultValueNumeric(0)) 
      .setLimit(200).build(); 

    // Build the QueryOptions 
    QueryOptions options = QueryOptions.newBuilder().addExpressionToReturn(FieldExpression.newBuilder().setExpression(loc_expr).setName("distance")).setLimit(limit) 
      .setCursor(cursor).setSortOptions(sortOptions).build(); 

    String queryString = loc_expr + " < " + searchRadius * 1000; 

    // Build the Query and run the search 
    Query query = Query.newBuilder().setOptions(options).build(queryString); 

    IndexSpec indexSpec = IndexSpec.newBuilder().setName("restaurants").build(); 
    Index index = SearchServiceFactory.getSearchService().getIndex(indexSpec); 

    Results<ScoredDocument> result = index.search(query); 
    if (result.getNumberFound() > 0) { 
     Collection<ScoredDocument> coll = result.getResults(); 

     for (ScoredDocument sd : coll) { 
      Key<Restaurant> key = Key.create(String.valueOf(sd.getId())); 
      Restaurant rest = ofy().load().key(key).now(); 

      Field f = sd.getExpressions().get(0); 
      log.info("distance in meter : " + f.getNumber()); 
     } 
    } 

我正在使用上述代碼獲取附近區域的餐館。以下是我的觀察: -Google AppEngine Search API的距離函數行爲不一致

案例1:searchRadius =0.5公里---距離的最大值=0.9公里

案例2:searchRadius =1公里---距離的最大值=1.8公里

情況3:searchRadius =2公里---距離的最大值=2.8公里

情況4:searchRadius =3公里---距離的最大值=4.8公里

爲什麼會出現值的距離更多的半徑指定?

注意: - 我不是我自己計算距離。搜索API正在返回距離。

回答

0

這是一個已知issue

直到谷歌修復它,你必須篩選代碼中的結果