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

标签 mysql mapping

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

感谢您提供的任何帮助。

最佳答案

你的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/

关于mysql - sql查询多边形/矩形中的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8838230/

相关文章:

php - 从多个表中检索记录 MySQL

c# - Dapper 中的映射实体

php - 对象关系映射 : What's the best way to implement getters?

php - 将所有数据库表放入数组的函数

mysql - 将值从一个表添加到另一个表,匹配特定条件

mysql - 如何将流程添加为数据库中的关系,例如捐赠记录等

INSERT INTO...ON DUPLICATE UPDATE 的 MySQL 索引

hibernate - 为什么 hibernate/jpa 在删除映射列表中的已删除元素之前将 @OrderColumn 字段设置为 null?

c# - 使用特定于枚举的方法将枚举映射到函数/操作

c# - Entity Framework 代码优先 : map list of ids to entity using reference table