gpt4 book ai didi

MongoDB $geoIntersects 与 LineString 类型不匹配

转载 作者:行者123 更新时间:2023-12-03 15:59:05 24 4
gpt4 key购买 nike

我有一个 Mongo 集合,我正在尝试对其执行 $geoIntersects 查询。

mongo中的数据格式为:

{
"_id" : ObjectId,
"created_at" : ISODate,
"sentiment" : 0.631925,
"yyyy-mm" : "2012-9",
"lat_lon" : [
-2.0566385,
52.84265
]
}

以以下形式运行 $geoIntersects 查询:

db.gbSmall.findOne({
lat_lon: {
$geoIntersects: {
$geometry: {
type: "Point",
coordinates: [-2.0566385,52.84265]
}
}
}
})

db.gbSmall.findOne({
lat_lon: {
$geoIntersects: {
$geometry: {
type: "LineString",
coordinates: [[-2.0566385,52.84265],[-3.0566385,52.84265]]
}
}
}
})

都正确返回记录;但是,如果我更改查询,使线穿过该点,例如:

db.gbSmall.findOne({
lat_lon: {
$geoIntersects: {
$geometry: {
type: "LineString",
coordinates: [[-1.0566385,52.84265],[-3.0566385,52.84265]]
}
}
}
})

记录未返回。

记录是否必须落在 geoJSON lineString 的某个点上才能匹配,或者我正在执行的查询是否存在其他问题?

最佳答案

如果您在 Postgis 中运行相同的查询,您会得到正确的答案。

Select ST_Intersects(ST_GeomFromText('POINT(-2.0566385 52.84265)', 4326),
ST_GeomFromText('LINESTRING(-1.0566385 52.84265,-3.0566385 52.84265)', 4326));

对于类似的健全性检查查询,您也会得到相同的答案:

Select ST_Intersects(ST_GeomFromText('POINT(-2 50)',4326),
ST_GeomFromText('LINESTRING(-3 50, -1 50)',4326));

而两个 MongoDB 版本对于您上面给出的等效查询均不返回任何内容。

对我来说,这看起来像是一个错误。我检查了 MongoDB 源代码及其测试,除了端点之外,没有任何在线点。 MongoDB 相交函数可在 https://github.com/mongodb/mongo/blob/master/src/mongo/db/geo/geoquery.cpp 中找到实际上使用第 3 方 s2 模块来进行实际的数学交集,请参阅 https://github.com/mongodb/mongo/blob/master/src/third_party/s2/s2latlngrect.cc 。据我所知。

我不会将此作为答案,因为我没有答案,但格式比评论中的更好。

关于MongoDB $geoIntersects 与 LineString 类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23917190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com