如何有效地选择给定坐标(点)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?