Запрос Mongodb sphere2d

#mongodb

#mongodb

Вопрос:

Привет, у меня есть коллекция, которая содержит этот объект

 {
   "_id":"53b0807ca004f2ad5f0c9839",
   "id":"3427734",
   "version":"4",
   "timestamp":"2012-08-04T12:06:46Z",
   "changeset":"12608469",
   "uid":"604523",
   "user":"673a",
   "fenced":"yes",
   "landuse":"cemetery",
   "name":"Friedhof St. Peter (Alter Friedhof)",
   "poly":{
      "type":"Polygon",
      "coordinates":[
         [
            [
               8.6763586,
               49.5531628
            ],
            [
               8.6765129,
               49.553132
            ],
            [
               8.6763608,
               49.5528116
            ],
            [
               8.6767028,
               49.5527433
            ],
            [
               8.6765809,
               49.5524866
            ],
            [
               8.6770135,
               49.5524431
            ],
            [
               8.6784924,
               49.5520942
            ],
            [
               8.6788149,
               49.5521769
            ],
            [
               8.6789908,
               49.5524369
            ],
            [
               8.6793862,
               49.5525109
            ],
            [
               8.6786997,
               49.5530378
            ],
            [
               8.6779331,
               49.5531445
            ],
            [
               8.6769458,
               49.5532933
            ],
            [
               8.6766567,
               49.5533521
            ],
            [
               8.6764405,
               49.5533353
            ],
            [
               8.6763586,
               49.5531628
            ]
         ]
      ]
   }
}
  

теперь я создаю запрос

 {
   "poly":{
      $geoIntersects:{
         $geometry:{
            "type":"Polygon",
            "coordinates":[
               [
                  [
                     -180.0,
                     90.0
                  ],
                  [
                     180.0,
                     90.0
                  ],
                  [
                     180.0,
                     -90.0
                  ],
                  [
                     -180.0,
                     -90.0
                  ],
                  [
                     -180.0,
                     90.0
                  ]
               ]
            ]
         }
      }
   }
}
  

но он не возвращает объект.. он ничего не возвращает. Есть идеи, почему?

Ответ №1:

Объект GeoJSON, который вы передали, является неприемлемым. Я немного изменил параметр запроса, и теперь он работает. Как вы уже поняли, объект GeoJSON должен помещаться в пределах одного полушария. Если вам нужна некоторая демонстрация $geoIntersect функциональности MongoDB, вы можете запустить следующий запрос и увидеть, что он выдает ваш полигон в результатах:

 db.Test.find({
   "poly":{
      '$geoIntersects':{
         '$geometry':{
  "type": "Polygon",
  "coordinates": [
    [
      [
        8.6763586,
        49.5531628
      ],
      [
        8.6788149,
        49.5521769
      ],
      [
        8.6786997,
        49.5530378
      ],
      [
        8.6763586,
        49.5531628
      ],
      [
        8.6763586,
        49.5531628
      ]
    ]
  ]
}
      }
   }
});
  

Комментарии:

1. у меня уже есть этот индекс, но он ничего не меняет, работает ли он для вас?

2. вы знаете, какие полушария имеются в виду? север-юг или восток-запад?

3. @wutzebaer: Важно отметить, что запросы, поддерживаемые MongoDB, являются не географическими запросами, а запросами на основе геометрии. Поэтому, я думаю, речь идет не о N-S или E-W полушарии. Все, что имеет значение, это то, выходит ли он за пределы одной половины сферы.

4. означает, что начальная точка не важна, но ширина моего полигона запроса не должна превышать ширину 180 градусов?

5. я должен добавить, что кажется, что ширина должна быть <180, когда это ровно 180, проблема все еще возникает

Ответ №2:

Кажется, что мой запрос не будет работать, я нашел это в документах:

http://docs.mongodb.org/manual/reference/operator/query/geoIntersects/

 Note

Any geometry specified with GeoJSON to $geoIntersects queries, must fit within a single hemisphere. MongoDB interprets geometries larger than half of the sphere as queries for the smaller of the complementary geometries.
  

я могу запросить только fopr правильную hmisphere

 {
   "poly":{
      $geoIntersects:{
         $geometry:{
            "type":"Polygon",
            "coordinates":[
               [
                  [
                     1.0,
                     90.0
                  ],
                  [
                     180.0,
                     90.0
                  ],
                  [
                     180.0,
                     -90.0
                  ],
                  [
                     1.0,
                     -90.0
                  ],
                  [
                     1.0,
                     90.0
                  ]
               ]
            ]
         }
      }
   }
}