这个问题是Mysql地理空间扩展的专家。

下面的查询不会的结果,我期待:

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

基本上我们正在创造2面,我们正在试图使用MBRContains,以确定是否一点是内的两个面。

令人惊讶的是,返回这两个面!点3,6应该仅仅存在于第一次插入多边形。

注意到两面倾斜(一旦你画面上的一张纸,你会看到)

怎么MySql返回的两个面?我使用的MySql社会版5.1.

有帮助吗?

解决方案

更新:希望这个答案已经废MySQL: http://forge.mysql.com/wiki/GIS_Functions!将离开作为参考,用于老年MBRContains实现,但一个新的答案说明的改动将是受欢迎的,并应为"接受"上述这一点。

开始过时的答案

你正在使用(必要的) 最低边界的矩形, 不面是这样。为目的的查询的形状是相比,相当于:

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

第一形,并且:

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

第二。(3,6)是在两个。

MBR是一个粗略的方式的估计,图像矩形成具有垂直的线在min(x)和max(x)和水平线在最大(y)和(y)。这些形状是更容易的数据库计算,MySQL不支持所有多边形功能。(区域是的,线串通常是的 contains 还没有。更多细节 在这里,.).如果你想更精确的地理空间几何形状的时刻的最佳选择的开放源侧 PostGIS.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top