问题描述
我有一个带有地理围栏和定义点位置的 mongo 文档。我有一个用户四处走动,随着位置的变化发布他们的位置。我在发布的位置周围构建了一个地理围栏,并尝试查看该地理围栏是否包含文档的点位置或与文档的地理围栏相交。我得到的结果似乎不一致。
我希望以下两个查询都返回 1 个结果,但是,只有第一个查询返回结果。虽然这不是我期望地理空间交叉查询的工作方式,但似乎传递到查询中的地理围栏需要包含定义文档上地理围栏的点之一,而不仅仅是与其中一个边界相交。
如何编写 geoIntersects 查询,以便两个地理围栏都返回文档?或者我是否需要以某种方式以不同的方式定义文档的地理围栏?我已经尝试了文档和查询中地理围栏点的顺时针和逆时针定义。
// 文档(黑色地理围栏)
{
"_id" : ObjectId("5dbb51f8a6c14c000164dfcc"),"Name" : "Test Document","Location" : {
"Longitude" : 55.1165732575153,"Latitude" : 25.0430787023156
},"Hidden" : false,"Geofence" : [
{
"Longitude" : 55.1166610906269,"Latitude" : 25.0428277929586
},{
"Longitude" : 55.1166610906269,"Latitude" : 25.0428277929586
}
]
}
// 1 个结果(绿色地理围栏)
db.getCollection('MyDocuments').find({
"$or": [
{
"Geofence": {
"$geoIntersects": {
"$geometry": {
"type": "polygon","coordinates": [
[
[
55.11666456834192,25.042733676877324
],[
55.11676242159365,25.042760017397315
],[
55.11680236745489,25.042823609037915
],[
55.116761597245147,25.042887200678515
],[
55.11666456834192,25.042913541198506
],[
55.11656753943869,[
55.11652676922895,25.042733676877324
]
]
]
}
}
}
},{
"Location": {
"$geoWithin": {
"$polygon": [
[
55.11666456834192,25.042733676877324
],[
55.11676242159365,25.042760017397315
],[
55.11680236745489,25.042823609037915
],[
55.116761597245147,25.042887200678515
],[
55.11666456834192,25.042913541198506
],[
55.11656753943869,[
55.11652676922895,25.042733676877324
]
]
}
}
}
],"Hidden": {
"$ne": true
}
})
// 0 结果(红色地理围栏)
db.getCollection('MyDocuments').find({
"$or": [
{
"Geofence": {
"$geoIntersects": {
"$geometry": {
"type": "polygon","coordinates": [
[
[
55.116678546791337,25.042891386808234
],[
55.11677538065845,25.042917727328225
],[
55.116814920860168,25.042981318968825
],[
55.1167745795893,25.043044910609426
],[
55.116678546791337,25.043071251129417
],[
55.11658251399337,[
55.116542172722507,25.042891386808234
]
]
]
}
}
}
},{
"Location": {
"$geoWithin": {
"$polygon": [
[
55.116678546791337,25.042891386808234
],[
55.11677538065845,25.042917727328225
],[
55.116814920860168,25.042981318968825
],[
55.1167745795893,25.043044910609426
],[
55.116678546791337,25.043071251129417
],[
55.11658251399337,[
55.116542172722507,25.042891386808234
]
]
}
}
}
],"Hidden": {
"$ne": true
}
})
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)