Как я могу повторить этот геопространственный запрос в морфию? - PullRequest
0 голосов
/ 16 марта 2012

Запросы геопространственных данных в mongodb выглядят достаточно просто через сценарий оболочки, однако я пытаюсь воспроизвести некоторый код в morphia (playmorphia).

Получите все точки в пределах определенного радиуса, документы говорят:

> center = [50, 50]
> radius = 10
> db.places.find({"loc" : {"$within" : {"$center" : [center, radius]}}})

Вот мой код в моей модели Peak:

Double[] loc = new Double(2);
// it's set to my [Longitude, Latitude]

List<Peak> peaks = play.modules.morphia.Model.ds().find(Peak.class).field("loc").near(loc[0], loc[1], 10/111.12).limit(50).asList();

Это работает, но я делаю что-то не так, используя ds (). Find ()? Есть ли более элегантный способ сделать это, используя модель, например Peak.find ..? Спасибо!

Ответы [ 2 ]

0 голосов
/ 12 июля 2016

** @ Indexed (IndexDirection.GEO2D) public Double [] geo = new Double [2];

public static string getResult`enter code here`() {
        DB datastore = ConnectionFactory.getInstance().getDatabaseMongo();
        double[] near = { 20.593684, 78.96288 };
        BasicDBObject basicDBObject = new BasicDBObject();
        basicDBObject.put("type", "Point");
        basicDBObject.put("coordinates", near);
        BasicDBObject geoNearParams = new BasicDBObject();
        geoNearParams.append("geoNear", <collection name>);
        geoNearParams.append("near", basicDBObject);
        geoNearParams.append("spherical", true);
        geoNearParams.append("maxDistance", 100);
        geoNearParams.append("limit", 10);
        CommandResult commandResult = datastore.command(geoNearParams);
        commandResult.getErrorMessage();
        Object data = commandResult.get("results");
        System.out.println(data.toString());
    }**
0 голосов
/ 17 марта 2012

Вам нужно поместить индексы в гео поля.

Пример кода из моего проекта:

@Indexed(IndexDirection.GEO2D)
public Double[] geo = new Double[2];


List<User> pharmacist = MorphiaQuery.ds()
.createQuery(User.class)
.filter("isPharmacist",true)
.field("geo")
.within(nelat, nelng, swlat, swlng)
.field("geo")
.near(u.geo[0], u.geo[1])
.limit(limit)
.asList();

Проверьте руководство: http://code.google.com/p/morphia/wiki/Query#Geo-spatial

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...