Domanda

Questa domanda è per gli esperti geospaziali-estensione MySQL.

La seguente query non è così il risultato che mi aspetto:

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)'));

Fondamentalmente stiamo creando 2 poligoni, e stiamo cercando di utilizzare MBRContains per determinare se un punto è all'interno di una delle due poligoni.

A sorpresa, restituisce entrambi i poligoni! Point 3,6 dovrebbe esistere solo nel primo poligono inserito.

Si noti che entrambi i poligoni sono inclinati (una volta si disegna i poligoni su un pezzo di carta, si vedrà)

Come mai MySQL restituisce entrambi poligoni? Sto usando MySQL Community Edition 5.1.

È stato utile?

Soluzione

Aggiorna : Speriamo che questa risposta è stata resa obsoleta da MySQL: http: / /forge.mysql.com/wiki/GIS_Functions ! Lascerà come riferimento per i più anziani MBRContains implementazioni, ma una nuova risposta che spiega i cambiamenti sarebbe il benvenuto e dovrebbe essere "accettato" di cui sopra questo.

iniziare risposta obsoleto

Si sta utilizzando (per necessità) rettangoli minimi di delimitazione , non i poligoni in quanto tali. Ai fini della query della forma a confronto è equivalente a:

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

Per la prima forma e:

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

per la seconda. (3,6) è in entrambi.

MBR è un modo approssimativo di stima, ritratto rettangolo come avente linee verticali a min (x) e max (x), e linee orizzontali dur (y) e min (y). Quelle forme sono più facili per il database di calcolare, MySql non supporta tutte le funzioni del poligono. (Area sì, stringhe lineari in generale sì, contains non ancora. Maggiori dettagli qui .). Se si desidera che la geometria geospaziali più precisa al momento la scelta migliore sul lato open source è PostGIS .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top