在 java 中为 mongodb 创建地理空间查询
Create a geospatial query in java for mongodb
我做我的项目。它与 MongoDB 和 Java 有关。我需要从 MongoDB.
获取多边形数据
但是,我的查询总是return找不到记录。
这是我的 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]]}}}
查询计数为零。
我做错了什么?你能帮助我吗?
谢谢
您可以尝试以下查询。
Geopolygon 以数组的数组作为坐标。使用 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]
]
]
}
}
}
}
我做我的项目。它与 MongoDB 和 Java 有关。我需要从 MongoDB.
获取多边形数据但是,我的查询总是return找不到记录。
这是我的 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]]}}}
查询计数为零。
我做错了什么?你能帮助我吗? 谢谢
您可以尝试以下查询。
Geopolygon 以数组的数组作为坐标。使用 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]
]
]
}
}
}
}