Frage

Diese Frage gilt für MySQL Geospatial-Experten.

Die folgende Abfrage ist nicht das Ergebnis, das ich erwarte:

create database test_db;

use test_db;

create table test_table (g polygon not null);

insert into test_table (g) values (geomfromtext('Polygon((0 5,5 10,7 8,2 3,0 5))'));
insert into test_table (g) values (geomfromtext('Polygon((2 3,7  8,9 6,4 1,2 3))'));

select

X(PointN(ExteriorRing(g),1)), Y(PointN(ExteriorRing(g),1)),
X(PointN(ExteriorRing(g),2)), Y(PointN(ExteriorRing(g),2)),
X(PointN(ExteriorRing(g),3)), Y(PointN(ExteriorRing(g),3)),
X(PointN(ExteriorRing(g),4)), Y(PointN(ExteriorRing(g),4))

from test_table where MBRContains(g,GeomFromText('Point(3 6)'));

Grundsätzlich erstellen wir 2 Polygone und versuchen, MBRContains zu verwenden, um festzustellen, ob sich ein Punkt in einem der beiden Polygone befindet.

Überraschenderweise gibt es beide Polygone zurück! Punkt 3,6 sollte nur in dem ersten einfügten Polygon existieren.

Beachten Sie, dass beide Polygone geneigt sind (sobald Sie die Polygone auf ein Stück Papier zeichnen, werden Sie sehen)

Wie kommt es, dass MySQL beide Polygone zurückgibt? Ich verwende MySQL Community Edition 5.1.

War es hilfreich?

Lösung

AKTUALISIEREN: Hoffentlich wurde diese Antwort von MySQL veraltet: http://forge.mysql.com/wiki/gis_functions! Wird als Referenz für ältere MBRContainer -Implementierungen verlassen, aber eine neue Antwort, die die Änderungen erklärt, wäre willkommen und sollte über diesem "akzeptiert" werden.

Beginnen Sie veraltete Antwort

Sie verwenden (notwendig) Minimale Begrenzungsrechtecke, nicht die Polygone als solche. Für den Zweck Ihrer Abfrage entspricht die Form, die verglichen wird, mit:

'POLYGON(0 2,0 10,7 10,7 2,0 2)'

für die erste Form und:

'POLYGON(2 1,9 1,9 9,2 9,2 1)'

für die zweite. (3,6) ist in beiden.

MBR ist eine grobe Art der Schätzung. Diese Formen sind für die Berechnung der Datenbank einfacher, MySQL unterstützt nicht alle Polygonfunktionen. (Bereich Ja, Linestringe im Allgemeinen ja, contains noch nicht. Mehr Details hier.). Wenn Sie derzeit eine genauere Geospatialgeometrie wünschen, ist die beste Wahl auf der Open -Source -Seite Postgis.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top