用java为mongodb创建地理空间查询
我做我的项目。它与MongoDB和Java相关。我需要从MongoDB获取多边形数据 但是,我的查询始终未返回任何记录 以下是我的java代码:用java为mongodb创建地理空间查询,java,mongodb,geospatial,mongodb-java,Java,Mongodb,Geospatial,Mongodb Java,我做我的项目。它与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 L
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();
查询计数为零
我做错了什么?你能帮助我吗?
谢谢。您可以尝试以下查询 Geopolygon将阵列阵列作为坐标。使用
过滤器。geoWithinPolygon
辅助方法,因为中的已被弃用
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();
谢谢你的回答,但它再次返回零。输出查询是:运算符筛选器{fieldName='loc',运算符='$geointen',值={“$polygon”:[[13.82608128.03467],[13.82608128.03467],[13.82608128.03467],[13.82608128.03467]}。当我在mongoBooster上运行这个查询时,我收到了“Loop is not closed”(循环未关闭)。您是否尝试使用最新的代码?为什么所有的坐标都一样?我没有数据要测试。它应该是[[13.82608128.03467],[13.82608128.03467],[13.82608128.03467],[13.82608128.03467],[13.82608128.03467]
是的,我试过了。坐标相同,因为这些坐标有数据。你能在mongo booster中运行这个查询吗<代码>{loc:{$geointen:{$geometry:{$type:{Polygon',坐标:[[13.82608128.03467],[13.82608128.03467],[13.82608128.03467],[13.82608128.03467]}}
它返回的错误是“经度/纬度超出范围,lng:13.8261纬度:128.035”
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]
]
]
}
}
}
}