MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

mongodb sprawdź, czy punkt jest w wieloboku

Wydaje się, że ma to związek z zamówieniem. Jeśli używasz $geoWithin i próbujesz znaleźć punkty wewnątrz wielokąta, rzecz, która jest w środku, to pole, którego szukasz. Jednak $geoIntersects działa w obu kierunkach, więc możesz wyszukiwać punkty wewnątrz wielokątów lub wielokątów zawierających punkty, np.:

db.geom.insert({
  "polygons": {
    "type":"Polygon",
    "coordinates": [[
      [ 17.60083012593064, 78.18557739257812],
      [ 17.16834652544664, 78.19381713867188],
      [ 17.17490690610013, 78.739013671875],
      [ 17.613919673106714, 78.73489379882812],
      [ 17.60083012593064, 78.18557739257812]
    ]]
  }
});

db.geom.find({
  polygons: {
    $geoIntersects: {
      $geometry: {
        "type": "Point",
        "coordinates": [17.3734, 78.4738]
      }
    }
  }
});

Zauważ też, że musisz powtórzyć pierwszy punkt wielokąta na końcu. Jeśli usuniesz ostatnią parę, otrzymasz $err :

Nie można kanonizować zapytania:błąd „BadValue bad geo query”.

Wygląda na to, że MongoDB pozwala wstawiać nieprawidłowe geometrie i narzeka tylko wtedy, gdy próbujesz dodać indeks 2dsphere lub wykonujesz zapytanie przecięcia/w/w pobliżu, co, jak sądzę, jest rozsądne, ponieważ GeoJSON może być prawidłowym JSON, nie będąc prawidłową geometrią.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Obsługa rozłączeń/ponownych połączeń MongoDB z węzła

  2. Co to jest pole __v w Mongoose?

  3. Mongoose limit/przesunięcie i zapytanie zliczania

  4. Przechowywanie małych (poniżej 1 MB) plików za pomocą MongoDB w NodeJS BEZ GridFS

  5. MongoDB Object.bsonSize()