我有一个经度的以下数据,它代表一个社会的多边形。我有 5000 条数据类型的记录,如下所示。我想使用 mongodb 地理空间查询来检查给定点(纬度,经度((12.948,77.66(是否位于该社会列表 [5000 条记录] 内。我可以使用 mongodb 地理空间查询来实现它吗?如果是,那么 mongodb 中的文档结构应该是什么,mongodb 查询应该是什么?下面是一个社会多边形点的示例数据。
数据:
"geofence": [
{
"latitude": 12.9475827,
"longitude": 77.67696
},
{
"latitude": 12.9477697,
"longitude": 77.674655
},
{
"latitude": 12.9463797,
"longitude": 77.67454
},
{
"latitude": 12.946131,
"longitude": 77.675466
},
{
"latitude": 12.947066,
"longitude": 77.675473
},
{
"latitude": 12.947198,
"longitude": 77.676847
},
{
"latitude": 12.94757,
"longitude": 77.67695
}
]
找到了答案。
使用以下java代码以geo-json多边形的形式存储在MongoDB中:
GeoJsonPolygon geoJsonPolygon = new GeoJsonPolygon(pointsList);
蒙戈数据库查询
db.mygate_geofencing.find({polygons:
{$geoIntersects:
{$geometry:{ "type" : "Point",
"coordinates" : [ 12.947874, 77.677494] }
}
}
});
爪哇代码:
创建一个点,然后检查相交面。
GeoJsonPoint geoJsonPoint = new GeoJsonPoint(truncate(customerLat,6),truncate(customerLng,6));
Query query = new Query().addCriteria(Criteria.where("polygons").intersects(geoJsonPoint));
List<GeoFencing> mygateGeoFencingList = mongoTemplate.find(query, GeoFencing.class);
地理围栏类
@Id
@Field("_id")
private String id;
@Field("polygons")
private GeoJsonPolygon polygons;
@Field("societyName")
private String societyName;