mysql - 选择多边形 mysql 内的点 - 没有错误,没有结果 -(出了什么问题?)

标签 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)

最佳答案

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

第三(上面也已修复)您没有闭合多边形,您的最后一个点和第一个点应该相等

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

关于mysql - 选择多边形 mysql 内的点 - 没有错误,没有结果 -(出了什么问题?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32510682/

相关文章:

mysql - 如何使mysql字段唯一?

gis - Tilecache 无法使用 Mapnik 生成图 block

gis - 我在哪里可以找到在墨卡托投影中绘制美国所需的坐标?

mysql - 插入前合并两个或多个字段

php - 如何计算 PHP Web 应用程序中的在线用户数?

c# - Windows Mobile 上有什么好的 GIS SDK?

maps - 如何在openlayers中添加 map 图层叠加?

r - 计算宽数据框中每对坐标之间的距离

MySQL JOIN 和 group by 因此每行有一个 ID

php - 数据库查询总是返回 TRUE