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