首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用对象化的GeoSpatial半径搜索

使用对象化的GeoSpatial半径搜索
EN

Stack Overflow用户
提问于 2013-03-08 11:22:19
回答 1查看 900关注 0票数 6

我正在使用GeoModel开发一个应用程序。我需要根据给定的纬度和经度在特定半径内执行搜索。我能够使用Objectify在数据存储中生成GeoCells,但无法在特定半径内返回结果。

我在下面分享我的代码。

实体类

代码语言:javascript
复制
@Entity
public class NewsFeed implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Index
private Long feedID;
@Index
private String topic;
@Index
private String title;
private String description;
@Index
private Date createDate;
private String imageOrVideo;
private String imageUrl;
private String blobKey;
@Latitude
private Double latitude;
@Longitude
private Double longitude;
@Geocells
private List<String> cells;

    // getter and setters ...
}

自定义GeocellQueryEngine类 从这个来源

代码语言:javascript
复制
public class ObjectifyGeocellQueryEngine implements GeocellQueryEngine {
private String geocellsProperty;
private Objectify ofy;
public static final String DEFAULT_GEOCELLS_PROPERTY = "cells";

public ObjectifyGeocellQueryEngine(Objectify ofy) {
    this(ofy, DEFAULT_GEOCELLS_PROPERTY);
}

public ObjectifyGeocellQueryEngine(Objectify ofy, String geocellsProperty) {
    this.ofy = ofy;
    this.geocellsProperty = geocellsProperty;
}

@Override
public <T> List<T> query(GeocellQuery baseQuery, List<String> geocells, Class<T> entityClass) {
    StringTokenizer st;
    int tokenNo = 0;
    Query<T> query = ofy.query(entityClass);
    if (baseQuery != null) {
        st = new StringTokenizer(baseQuery.getBaseQuery(), ",");
        while (st.hasMoreTokens()) {
            query.filter(st.nextToken(), baseQuery.getParameters().get(tokenNo++));
        }
    }
    return query.filter(geocellsProperty + " IN", geocells).list();
}
}

在这里获取数据

代码语言:javascript
复制
    Point p = new Point(24.8993714, 79.5839124);
    // Generates the list of GeoCells
    List<String> cells = GeocellManager.generateGeoCell(p);
    List<Object> params = new ArrayList<Object>();
    params.add("Movies");
    GeocellQuery baseQuery = new GeocellQuery("topic == topic", "String topic",params);
    ObjectifyGeocellQueryEngine objectifyGeocellQueryEngine = new ObjectifyGeocellQueryEngine(ofy(), "cells");
    List<NewsFeed> list = objectifyGeocellQueryEngine.query(baseQuery, cells, NewsFeed.class);
    List<NewsFeed> list2 = GeocellManager.proximitySearch(p, 10, 10000,NewsFeed.class, baseQuery, objectifyGeocellQueryEngine, GeocellManager.MAX_GEOCELL_RESOLUTION);
    System.out.println(list+" : "+list2);

现在的问题是,我没有从这里得到任何结果。你们能帮我解决这个问题吗,因为我没有什么例外,只是得到了一个空的列表。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-18 10:59:43

针对这种情况,我已经做了一个解决办法,我添加了一个并行JDO类来存储和检索地理空间结果。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15292834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档