MySql错误地理空间..?
-
16-09-2019 - |
题
这个问题是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.
不隶属于 StackOverflow