MySQL空间数据查询

MySQL spatial data query

我正在尝试实施一个区域 table,其中一个字段中有一个多边形。稍后我将使用它来检查某个点是否包含在多边形中。

据我所知,我已经实现了它,但在测试之后我发现某些点(接近但在多边形之外)在不应该返回的时候被返回了。

CREATE TABLE `zones` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `geom` geometry NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO zones (created_at, updated_at, name, `geom`)
VALUES (NOW(),NOW(), "Purmerend", PolygonFromText('POLYGON(( 
52.37811421553942 4.98779296875,
52.36637614192118 5.002899169921875,
52.381467377903476 5.04547119140625,
52.46688700596046 5.156707763671875,
52.62306005822956 5.04547119140625,
52.64223014513886 4.84222412109375,
52.61555643344044 4.769439697265625,
52.51287794429004 4.7186279296875,
52.45684622754481 4.833984375,
52.37811421553942 4.98779296875))') );

#1 outside
SELECT * FROM zones WHERE CONTAINS(geom, POINT(52.306024, 4.913726)); 
#2 **-- false positive --**
SELECT * FROM zones WHERE CONTAINS(geom, POINT(52.434471, 4.817571));
#3 inside
SELECT * FROM zones WHERE CONTAINS(geom, POINT(52.501924, 4.964426));

我正在使用 MySQL 5.5,想知道升级到 5.6 是否对我有帮助,或者是否有其他解决方案?

MySql 5.5 CONTAINS 在计算点是否在多边形内时使用有界矩形。 MySql 5.6 ST_CONTAINS 函数不执行此操作并正确计算 2 的位置

McAdam331 证明了这一点:5.6 ST_CONTAINS works in this [SQL Fiddle][1]