1. 程式人生 > >Mysql根據經緯度篩選數據

Mysql根據經緯度篩選數據

x64 decimal 根據 struct auto 分享 utf check sel

創建位置表,並且插入測試數據

/*

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, `name` VARCHAR (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根據經緯度篩選數據