Mysql根据经纬度筛选数据

Posted mojxtang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql根据经纬度筛选数据相关的知识,希望对你有一定的参考价值。

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

/*

    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根据经纬度筛选数据的主要内容,如果未能解决你的问题,请参考以下文章

mysql 筛选两列数据有重复的数据?比如a表,有A列经度B列纬度,坐标点1.经度116.123,纬度36.456

地理空间距离计算及优化(根据两个点经纬度计算距离)

mysql使用sql语句根据经纬度计算距离排序

请教在MySQL中怎样根据一些条件筛选重复值

mysql中如何根据经纬度优化这个距离查询

mysql左连接