MySQL空间 - 在X km范围内

时间:2016-12-06 21:55:28

标签: mysql sql gis spatial mysql-5.6

如何有效地选择给定坐标(点)X km半径内的所有城市(点),并按距离MySQL表的距离进行排序?

我正在使用具有以下表格结构的MySQL 5.6(从Open Street Maps导入):

CREATE TABLE `cities` (
 `OGR_FID` int(11) NOT NULL AUTO_INCREMENT,
 `SHAPE` geometry NOT NULL,
 `osm_id` varchar(10) COLLATE utf8_general_ci DEFAULT NULL,
 `code` decimal(4,0) DEFAULT NULL,
 `fclass` varchar(20) COLLATE utf8_general_ci DEFAULT NULL,
 `population` decimal(10,0) DEFAULT NULL,
 `name` varchar(100) COLLATE utf8_general_ci DEFAULT NULL,
 UNIQUE KEY `OGR_FID` (`OGR_FID`),
 SPATIAL KEY `SHAPE` (`SHAPE`)
) ENGINE=MyISAM;

此表将城市的坐标存储为SHAPE列(geometry类型)中的POINTS。城市数量相当多(至少对整个国家而言)。

我在考虑从SHAPE列中提取点坐标以分离纬度和经度列,然后使用Haversine formula计算距离,但这不会有多大效果。
也许是一个简单的查询,首先将城市限制在一个信封(类似大小的方形区域)?

你会怎么做?11 什么是最终的SQL?

0 个答案:

没有答案