2017-02-23 1 views
0

Jungs Ich versuche, alle Polygone innerhalb von Bounding Box abzufragen, aber es gibt einfach 0 .. Es sollte viele Polygone zurückgeben!

Alternativ versuche ich eine viel größere Bounding Box abzufragen und es passiert nichts!

Meine Frage ist:

{ 
geometry: 
    { $geoWithin: 
     { $box: 
      [ [-73.995762,40.764826], [-73.934034,40.802038] ] 
     } 
    }      
} 

Beachten Sie, dass die gleiche Abfrage ein gültiges Ergebnis für Geometrien vom Typ gibt Point

Points

Antwort

1

alle Polygone innerhalb abfragen durch den Begrenzungsrahmen aber es gibt einfach 0

zurück

Die $box operator für $geoWithin unterstützt nur Dokumente basierend auf grid coordinates und unterstützt kein GeoJSON Shapes-Format.

die gleiche Abfrage gibt ein gültiges Ergebnis für Geometrien vom Typ Point

auf Ihren Dokumenten Struktur Je, und wie Sie sie abfragen, wird dies wahrscheinlich als Gitterkoordinaten dh {geometry: [<long>, <lat>]} Dieses behandelt möglicherweise nicht für Ihr Polygondokument gearbeitet, da GeoJSON Polygons einen zusätzlichen Array-Wrapper erfordern. d.h. [[ [<long>, <lat>] ]] das Gitterkoordinatenformat ungültig machen. Wenn Ihre Dokumente im GeoJSON-Format vorliegen und Sie einen Bereich auswählen möchten, können Sie statt dessen $geometry verwenden.

db.places.find(
    { 
    'geometry': { 
     $geoWithin: { 
      $geometry: { 
      type : "Polygon" , 
      coordinates: [ [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] ] 
      } 
     } 
    } 
    } 
) 

erwähnenswert, dass MongoDB Compass geospatial Visualisierung zur Zeit (v1.6) unterstützt keine GeoJSON noch.

+0

Wan, sie bietet Unterstützung GeoJSON für Punkte und Polygone .. Vielleicht haben Sie eine ältere Dokumentation gesehen? Sie haben zwar einen entrra Wrap für das Array, aber es funktioniert immer noch gut, überprüfen Sie die Lösung, die ich gepostet habe. Danke für die Hilfe. – bobleujr

+0

Basiert auf dem MongoDB-Handbuch [$ box] (https://docs.mongodb.com/manual/reference/operator/query/box/#box), wie es für die aktuelle stable v3.4 veröffentlicht wurde. "Wenn es mit dem $ box-Operator verwendet wird, $ geoWithin gibt Dokumente basierend auf Gitterkoordinaten zurück und fragt nicht nach GeoJSON-Formen ". Bitte aktualisieren Sie Ihren Post mit der Musterstruktur/dem Schema Ihrer Dokumente, damit andere versuchen können, Ihr Problem zu replizieren. –

0

geht hier die Antwort:

$ Box mit GeoJSON funktionieren, aber nicht mit Polygonen! Sie müssen stattdessen eine Geometrie mit der $ - Box erzeugen.

Außerdem hat es immer den Startpunkt und Punkt hat, so dass ein 4-Punkt-Polygon hat 5 Tupeln

koordinieren, aber es wird schwieriger, hat es die rechte Hand-Regel folgen (gegen den Uhrzeigersinn).

it's anticlockwise

TESTEN GeoJSON MIT $ BOX UND PUNKTE

meiner Anfrage {Geometrie: {$ geoWithin: {$ Box: [[-71.934034,38.764826], [-75.995762,43.802038]]}}}

+0

Dies sollte nicht die akzeptierte Antwort sein. Nicht nur das widerspricht der Dokumentation (bis zu aktuellen MongoDB v3.4), die Antwort schlägt einen unbewiesenen (gegen den Uhrzeigersinn) Workaround vor, zusammen mit zerbrochenen Bildern, die dem Punkt nicht helfen. –

+0

https://data.ny.gov/ - datasets = "Gebäude Fußabdrücke" und "Ausgewählte Einrichtungen und Programm Sites" Der Rest der Informationen von Ihnen kann auf die Frage finden. Versuchen Sie es zu reproduzieren und vielleicht können wir der Lösung auf den Grund gehen, um sie an die Menschen weiterzugeben, die sie brauchen könnten! Ich habe die richtige Antwort entfernt, bis wir sie gefunden haben =) Danke! – bobleujr

+0

Danke für die Aktualisierung der Screenshots mit Arbeitsbildern. Die letzten beiden Screenshots verwenden [$ geometrie] (https://docs.mongodb.com/manual/reference/operator/query/geometry/) anstelle von "$ box". Wie in der obigen Antwort vorgeschlagen, sollten Sie '$ geometry' anstelle von' $ box' für das GeoJSON-Format verwenden. '$ box' unterstützt GeoJSON nicht, es gibt nur den Typ' Point' zurück wegen seiner Ähnlichkeit der Formatierung mit den alten Koordinaten. Weitere Informationen finden Sie in [Leitfaden: minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve), wenn Sie Fragen stellen. –