MongoDB $ geoIntersects findet keine Polygon-Zeile, die vollständig enthalten ist, findet aber eine andere

8

Ich habe eine MongoDB-Datenbank mit einer Sammlung namens fooCollection . Diese Sammlung enthält Dokumente mit Geodaten in der Art eines Polygons. Ich verwende den C # MongoDB-Treiber in meiner App. Ich bemerkte, dass es keine Dokumente mit bestimmten räumlichen Abfragen fand, obwohl es mit den meisten von ihnen funktioniert. Ich habe die Sammlung geleert, bis auf ein beleidigendes Dokument, und ich habe versucht, es zu finden, indem ich direkt Abfragen durchführte.

Mein Dokument sieht folgendermaßen aus:

%Vor%

Ich habe auch diesen Index für diese Sammlung:

%Vor%

Die folgende Abfrage gibt dieses Dokument korrekt zurück:

%Vor%

Diese Abfrage funktioniert jedoch nicht:

%Vor%

Wenn Sie diese drei Geometrien plotten, kann ich nicht wirklich sehen, warum das eine funktioniert, aber nicht das andere.

  • Beide Linien liegen vollständig innerhalb des Polygons
  • Die Arbeitslinie ist viel länger
  • Die Arbeitslinie hat eine Peilung zwischen 0 ° und 90 °, die andere zwischen 90 ° und 180 °.

Kann jemand dieses Verhalten erklären?

BEARBEITEN: Ich habe die Punkte auch einzeln getestet, anstatt die LineStrings zu verwenden. Der einzige Treffer ist [24.7698287, -28.7353533] . Ich brauche die LineStrings - die Abfrage sollte ein Treffer sein, auch wenn nur die Kante das Polygon schneidet und keine Punkte innerhalb von

liegen

Sie können das Geojson hier sehen oder Sie können die drei Geometrien selbst plotten, indem Sie die folgende Zeile in Ссылка :

%Vor%     
Ivan 17.01.2017, 12:23
quelle

1 Antwort

4
  

Kann jemand dieses Verhalten erklären?

Dies liegt daran, dass die Erde nicht flach, sondern ziemlich kugelförmig (gekrümmt) ist. Die Erdoberfläche kann nicht in einer Ebene ohne Verzerrung dargestellt werden. Das bedeutet, dass jede Kartenprojektion die Erde in irgendeiner Weise verzerrt. Siehe auch Kartenprojektionen

MongoDB 2Dsphere-Index , unterstützt Abfragen, die Geometrien auf einer erdähnlichen Kugel berechnen.

Wenn Sie die Koordinate auf Ссылка abbilden, wird die sphärische Natur der Erde nicht berücksichtigt. Der kürzere LineString befindet sich innerhalb des "quadratischen" Polygons.

Wenn Sie die GeoJSON-Geometrien auf Ссылка abbilden, die die Tatsache berücksichtigen, dass es eine sphärische Verzerrung gibt, sehen Sie unten:

Der kürzere LineString befindet sich tatsächlich außerhalb des "quadratischen" Polygons. Dies wird mit MongoDB 2dsphere index / query durchgeführt.

Der Einfluss des Verzerrungseffekts wächst mit den längeren / größeren Flächenprojektionen.

Beispiel:

%Vor%

PS: Um geodndmap.mongodb.com zu verwenden, ziehen Sie GeoJSON per Drag & Drop auf die Karte, entweder als Datei oder als Text aus einem Bearbeitungsprogramm.

    
Wan Bachtiar 05.05.2017, 02:21
quelle