【发布时间】:2016-11-20 15:10:13
【问题描述】:
我在数据库中有一个带有纬度和经度属性的表
CREATE TABLE `companies` (
`ID` int(11) NOT NULL,
`title` varchar(255) NOT NULL,
`latitude` decimal(12,8) NOT NULL,
`longitude` decimal(12,8) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `companies` (`ID`, `title`, `latitude`, `longitude`) VALUES
(NULL, 'John and SOns', '25.29064622', '55.368462502'),
(NULL, 'Evas', '25.28862850', '55.40107816');
在谷歌地图上,我有一个折线功能,用户可以在其中绘制折线,因此我们可以显示该多边形内的所有公司。
这是地图图片
如何查询以从位于绘制多边形内的数据库中获取所有记录?
【问题讨论】:
-
如果您乐于使用(投影到)欧几里得几何,那么从 MySQL v5.7.5
ST_Contains()将完全符合您的要求;早期版本的 MySQL 只能使用MBRContains()对指定多边形的最小边界矩形进行测试。 -
我使用的是 MySQL v5.6.28,由于谷歌地图 bounds.getCenter() 函数给出了多边形中心的纬度和经度,所以有什么方法可以获取多边形半径,以便可以通过数据库中的距离进行查询。
-
如果您对这种近似感到满意,
MBRContains()有什么问题? -
对于 MBRContains() 比较我应该将 lat long 存储在同一列吗?
-
最好将 Lat 和 Long 存储在单个
POINT类型列中,因为这样您就可以在其上构建空间 R-Tree 索引(这极大地有助于跨 2 执行有界搜索尺寸,如您所愿)。
标签: mysql sql google-maps polygon spatial