在多边形mysql中选择点 - 没有错误,没有结果 - (有什么问题?)

时间:2015-09-10 20:03:41

标签: mysql gis

我的MySQL数据库中有一个名为property

的表
CREATE TABLE IF NOT EXISTS `property` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `latitude` double NOT NULL,
  `longitude` double NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT ;

INSERT INTO `property` (`id`, `latitude`, `longitude`) VALUES
                       ( 1,   35.489623,   6.250875),
                       ( 2,   35.489341,   6.250135),
                       ( 3,   36.749996,   5.059664),
                       ( 4,   36.749996,   5.059664);

我已尝试使用以下两个查询来查看多边形内的点。 没有错误也没有结果,尽管应该出现两行

SELECT id FROM `property` WHERE
ST_Contains( GeomFromText('POLYGON(35.49088 6.25108,35.48954 6.24853,35.48732 6.25164,35.48912 6.25381,35.49109 6.2525)'),
             POINT(property.latitude, property.longitude)
            )

SELECT id FROM `property` WHERE
ST_Contains( GeomFromText('POLYGON(35.49088 6.25108,35.48954 6.24853,35.48732 6.25164,35.48912 6.25381,35.49109 6.2525)'),
             GeomFromText( CONCAT( 'POINT(', property.latitude, ' ', property.longitude, ')' ) )
           )

我无法弄清楚为什么没有结果。

ps:我已经检查过多边形完全包含两个点(35.489623,6.250875)和(35.489341,6.250135)

1 个答案:

答案 0 :(得分:1)

Theres 3问题

首先geomfromtext是错误的功能。您应该使用PolygonFromText

其次语法,在多边形函数示例中需要2个括号

 select  PolygonFromText('POLYGON((35.49088 6.25108,35.48954 6.24853,35.48732 6.25164,35.48912 6.25381,35.49109 6.2525, 35.49088 6.25108))')

Thirly(这也在上面修复)你没有一个封闭的多边形,你的最后一点和第一个点应该是相等的

在您的示例中,多边形代码返回null并打破