2016-03-07 1 views
2

Следующая 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] 
      ] ] 
     } 
     } 
    } 
}); 

ответ

1

Как documentation says, «одно кольцо Многоугольник в против часовой стрелки обмотки» (так в оригинале)

db.geo_series.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" } 
      } 
     } 
     } 
    } 
}); 

Таким образом, направление многоугольник определяется важно, так как это „CRS“, так как ваш многоугольник имеет выходить за пределы одно полушарие.

FYI, ваш многоугольник в основном такой же, как ссылочный многоугольник в документации, в котором пересекаются полусферы и обратные порядки долготы и широты, но чуть больше чуть большей площади.

+0

Решил это, разделив большую площадь на восемь небольших сегментов 90 ° x 90 ° и построил из них $ или инструкцию. Но почему -132 ° до 132 ° не работает? Да, он больше полушария, но от -131 ° до 131 ° также больше, это 262 °. Мне нужно понять, что такое математика. – odiszapc

+0

@odiszapc Работает для меня так же, как отображается, и точно, как это объясняется на соответствующей странице руководства. –

+0

Получил, спасибо большое. Мне нужно использовать против часовой стрелки + crs для широких полигонов. Теперь нужно понять, как распространять CRS в Spring Data Mongo query builder ... – odiszapc

Смежные вопросы