Следующая DOC:
{
"_id" : ObjectId("56dd4fb755eb122ee622e17d"),
"geo_segments" : {
"type" : "MultiPoint",
"coordinates" : [
[
90,
0
]
]
}
}
Может быть найден с помощью:
db.collection.find({
"geo_segments": {
$geoWithin: {
$geometry: {
type : "Polygon" ,
coordinates: [ [
[-131, -90], [-131, 90],
[131, 90], [131, -90],
[-131, -90]
] ]
}
}
}
});
Но ничего не найдено, когда я меняю все 131 вхождений до 132:
db.collection.find({
"geo_segments": {
$geoWithin: {
$geometry: {
type : "Polygon" ,
coordinates: [ [
[-132, -90], [-132, 90], [132, 90], [132, -90], [-132, -90]
] ]
}
}
}
});
Почему это не будет работать? CRS функции также не похож на работу:
db.collection.find({
"geo_segments": {
$geoWithin: {
$geometry: {
type : "Polygon" ,
coordinates: [ [
[-132, -90], [-132, 90], [132, 90], [132, -90], [-132, -90]
] ],
crs: {
type: "name",
properties: { name: "urn:x-mongodb:crs:strictwinding:EPSG:4326" }
}
}
}
}
});
поля индексируются с 2dsphere
, Монго является 3.3.1
UPD:
Пытался установить точки в обратном порядке для лечения многоугольника как "включать" область, без результатов:
db.geo_series.find({
"geo_segments": {
$geoWithin: {
$geometry: {
type : "Polygon" ,
coordinates: [ [
[-132, -90], [132, -90], [132, 90], [-132, 90], [-132, -90]
] ]
}
}
}
});
Решил это, разделив большую площадь на восемь небольших сегментов 90 ° x 90 ° и построил из них $ или инструкцию. Но почему -132 ° до 132 ° не работает? Да, он больше полушария, но от -131 ° до 131 ° также больше, это 262 °. Мне нужно понять, что такое математика. – odiszapc
@odiszapc Работает для меня так же, как отображается, и точно, как это объясняется на соответствующей странице руководства. –
Получил, спасибо большое. Мне нужно использовать против часовой стрелки + crs для широких полигонов. Теперь нужно понять, как распространять CRS в Spring Data Mongo query builder ... – odiszapc