Создать геопространственный запрос в Java для mongodb

2

Я делаю свой проект. Это связано с MongoDB и Java. Мне нужно получить данные, которые находятся в многоугольнике от MongoDB.

Однако мой запрос всегда возвращает Нет найденных записей.

Вот мой код Java:

 string coords = "28.56402,79.93652a27.27569,26.16394a42.69404,20.02808a48.61541,51.37207a"
 String[] coors = coords.split("a")
 final LinkedList<double[]> polygon = new LinkedList<double[]>();
 for(int i= 0;i<coors.length;i++)
 {
    String[] coo = coors[i].split(",");
    System.out.println("coors" + i + " : " + coors[i]);
    polygon.addLast(new double[]{Double.parseDouble(coo[0]),Double.parseDouble(coo[1])});
 }
 BasicDBObject query = new BasicDBObject("loc", new BasicDBObject("$within", new BasicDBObject("$polygon", polygon)));
 FindIterable<Document> results = this.getMongoCollectionProcessor().queryDocument(query);
 MongoCursor<Document> resultsIterator = results.iterator();

Этот мой выходной запрос:

{ "loc" : { "$within" : { "$polygon" : [ [ 28.56402 , 79.93652] , [ 27.27569 , 26.16394] , [ 42.69404 , 20.02808] , [ 48.61541 , 51.37207]]}}}

количество запросов равно нулю.

Что я делаю не так? Вы можете мне помочь? Благодарю.

Теги:
geospatial
mongodb-java

1 ответ

0
Лучший ответ

Вы можете попробовать следующий запрос.

Геополигон берет массив массивов в виде координат. Использовать вспомогательный метод Filters.geoWithinPolygon как within, устарел.

 String coords = "28.56402,79.93652a27.27569,26.16394a42.69404,20.02808a48.61541,51.37207a";
 String[] coors = coords.split("a");
 final List<List<Double>> polygons = new ArrayList<>();

 for(int i= 0;i<coors.length;i++)
    {
       String[] coo = coors[i].split(",");
       System.out.println("coors" + i + " : " + coors[i]);
       polygons.add(Arrays.asList(Double.parseDouble(coo[0]),Double.parseDouble(coo[1])));
    }

 Bson query = Filters.geoWithinPolygon("loc", polygons);
 FindIterable<Document> results = this.getMongoCollectionProcessor().queryDocument(query);
 MongoCursor<Document> resultsIterator = results.iterator();

Ожидаемый запрос:

{
    loc: {
        $geoWithin: {
            $geometry: {
                type: "Polygon",
                coordinates: [
                    [
                        [28.56402, 79.93652],
                        [27.27569, 26.16394],
                        [42.69404, 20.02808],
                        [48.61541, 51.37207]
                    ]
                ]
            }
        }
    }
}
  • 0
    спасибо за ваш ответ, но он возвращается снова ноль. выходной запрос: Фильтр оператора {fieldName = 'loc', operator = '$ geoWithin', value = {"$ polygon": [[13.82608, 128.03467], [13.82608, 128.03467], [13.82608, 128.03467], [13.82608 , 128.03467]]}}. И когда я запустил этот запрос на mongoBooster, я получил «Цикл не закрыт».
  • 0
    Вы пробовали с последним кодом? Почему все координаты одинаковы? У меня нет данных для проверки. Это должны быть [[[13.82608, 128.03467], [13.82608, 128.03467], [13.82608, 128.03467], [13.82608, 128.03467]]]
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню