[英]MongoDB $geoIntersects does not match LineString type
我有一個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中運行相同的查詢,則答案為true。
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源代碼和它們的測試,除了端點之外,沒有一個在線上的點。 在https://github.com/mongodb/mongo/blob/master/src/mongo/db/geo/geoquery.cpp中找到的MongoDB相交函數實際上使用了第三方s2模塊來進行實際的數學相交,請參見https: //github.com/mongodb/mongo/blob/master/src/third_party/s2/s2latlngrect.cc 。 據我所知。
我沒有將其作為答案,因為我沒有答案,但是格式比注釋中的格式好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.