当前位置:Gxlcms > 数据库问题 > Mysql根据经纬度筛选数据

Mysql根据经纬度筛选数据

时间:2021-07-01 10:21:17 帮助过:60人阅读

创建位置表,并且插入测试数据

/*

    Navicat MySQL Data Transfer     Source Server         : localhost     Source Server Version : 80011     Source Host           : localhost:3306     Source Database       : test     Target Server Type    : MYSQL     Target Server Version : 80011     File Encoding         : 65001     Date: 2018-11-07 16:58:27     */ SET FOREIGN_KEY_CHECKS = 0;   -- ---------------------------- -- Table structure for location -- ---------------------------- DROP TABLE IF EXISTS `location`;   CREATE TABLE `location` (     `id` INT (10) UNSIGNED NOT NULL AUTO_INCREMENT,     `nameVARCHAR (50) NOT NULL,     `longitude` DECIMAL (13, 10) NOT NULL,     `latitude` DECIMAL (13, 10) NOT NULL,     PRIMARY KEY (`id`),     KEY `long_lat_index` (`longitude`, `latitude`) ) ENGINE = INNODB AUTO_INCREMENT = 5 DEFAULT CHARSET = utf8;   -- ---------------------------- -- Records of location -- ---------------------------- INSERT INTO `location` VALUES     (         ‘1‘,         ‘广东省深圳市龙岗区坂田街道五和大道万科四季花城北区‘,         ‘22.6265210000‘,         ‘114.0606880000‘     );   INSERT INTO `location` VALUES     (         ‘2‘,         ‘广东省深圳市龙华区民治(地铁站)‘,         ‘22.6175280000‘,         ‘114.0406460000‘     );   INSERT INTO `location` VALUES     (         ‘3‘,         ‘广东省深圳市龙华区红山(地铁站)‘,         ‘22.6218860000‘,         ‘114.0234800000‘     );   INSERT INTO `location` VALUES     (         ‘4‘,         ‘广东省深圳市南山区西丽街道沙河西路名典商旅酒店(深圳西丽店)‘,         ‘22.5801670000‘,         ‘113.9543000000‘     );   搜索附近50KM的数据 #经度:22.626521  #纬度:114.060688 #50KM范围   SELECT     * FROM     (         SELECT             *, sqrt(                 (                     (                         (22.626521 - longitude) * PI() * 12656 * cos(                             ((114.060688 + latitude) / 2) * PI() / 180                         ) / 180                     ) * (                         (22.626521 - longitude) * PI() * 12656 * cos(                             ((114.060688 + latitude) / 2) * PI() / 180                         ) / 180                     )                 ) + (                     (                         (114.060688 - latitude) * PI() * 12656 / 180                     ) * (                         (114.060688 - latitude) * PI() * 12656 / 180                     )                 )             AS lc         FROM             location     ) location WHERE     lc < 50 ##距离小于50KM ORDER BY     ##距离小于排序     lc 显示结果 技术分享图片

 

 

Mysql根据经纬度筛选数据

标签:targe   set   get   dex   mysql   not   local   type   酒店   

人气教程排行