sql查询多边形/矩形中的点

时间:2012-01-12 16:07:54

标签: mysql mapping

好的,所以我有一个非常大的属性信息数据库,包含地理坐标。我需要做的是运行一个查询,询问“给我所有属于给定矩形或多边形的属性”。用户界面将允许用户定义矩形或多边形的点(使用地图系统)。这些坐标将进入查询,sql应返回该区域中的属性列表。如果不能使用多边形,则至少有一个矩形会有所帮助。我已经知道如何进行半径搜索。

感谢您提供的任何帮助。

3 个答案:

答案 0 :(得分:3)

你的sql代码必须是这样的
SQL查询

SELECT 
    * 
FROM areas area
WHERE 
    ST_CONTAINS(`area`.`polygon`, GEOMFROMTEXT('POINT(34.262714 56.262714)')) = 1


CREATE TABLE IF NOT EXISTS `areas` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `polygon` polygon NOT NULL,
  `area_name` varchar(70) NOT NULL,
  PRIMARY KEY (`id`),
  SPATIAL KEY `polygon` (`polygon`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

另外要小心,对于大桌子你必须使用MyISAM, 因为InnoDB不支持SPATIAL索引。
注意 MySQL支持5.6+版本的ST_CONTAINS。

有关更多信息,请查看此有用的文章 http://www.mysqlperformanceblog.com/2013/10/21/using-the-new-spatial-functions-in-mysql-5-6-for-geo-enabled-applications/

答案 1 :(得分:1)

MySQL支持几何函数和查询。参考文档对您有所帮助:https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions.html

答案 2 :(得分:0)

使用Within(geom1, geom2)函数检查geom1是否在geom2中是空间的。 您的查询将类似于

select some_thing from your_table where Within( some_point,
        GeomFromText('POLYGON( some_polygon )'));