mysql 下 计算 两点 经纬度欧式距离 含具体sql语句

 

mysql距离计算,单位m,以及排序

lon 经度 lat 纬度

一般地图上显示的坐标顺序为,纬度在前(范围-90~90),经度在后(范围-180~180)

首先新建一张表,里面包含经纬度
  

/*
 Navicat Premium Data Transfer

 Source Server         : localhost
 Source Server Type    : MySQL
 Source Server Version : 50553
 Source Host           : localhost:3306
 Source Schema         : fastadmin

 Target Server Type    : MySQL
 Target Server Version : 50553
 File Encoding         : 65001

 Date: 20/08/2018 16:48:32
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for fa_circle
-- ----------------------------
DROP TABLE IF EXISTS `fa_circle`;
CREATE TABLE `fa_circle`  (
  `circle_id` mediumint(8) UNSIGNED NOT NULL AUTO_INCREMENT,
  `cat_id` smallint(5) NULL DEFAULT 0 COMMENT '类别ID',
  `content` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `user_nick` varchar(150) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `user_avatar` varchar(150) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `user_id` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '文章作者',
  `is_top` tinyint(1) UNSIGNED NOT NULL DEFAULT 1,
  `createtime` int(10) UNSIGNED NOT NULL DEFAULT 0,
  `link` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '链接地址',
  `click` int(11) NULL DEFAULT 0 COMMENT '浏览量',
  `publish_time` int(11) NULL DEFAULT NULL COMMENT '文章预告发布时间',
  `pics` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '图片',
  `circle_type` tinyint(2) NOT NULL COMMENT '1:图文 2文章腾讯视频',
  `is_recommend` tinyint(2) NOT NULL DEFAULT 0,
  `longitude` double(11, 6) NOT NULL DEFAULT 0.000000,
  `latitude` double(11, 6) NOT NULL DEFAULT 0.000000,
  `address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地址',
  PRIMARY KEY (`circle_id`) USING BTREE,
  INDEX `cat_id`(`cat_id`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of fa_circle
-- ----------------------------
INSERT INTO `fa_circle` VALUES (1, 2, '测试一个内容', 'test', NULL, '1', 1, 1534747823, 'http://www.baidu.com', 0, NULL, 'http://pic1,http://pic2', 1, 0, 120.396202, 36.307442, NULL);
INSERT INTO `fa_circle` VALUES (2, 2, '测试一个内容', 'test', NULL, '2', 1, 1534748669, 'http://www.baidu.com', 0, NULL, 'http://pic1,http://pic2', 1, 0, 120.396201, 36.307441, NULL);
INSERT INTO `fa_circle` VALUES (3, 2, '测试一个内容', 'test', NULL, '3', 1, 1534748670, 'http://www.baidu.com', 0, NULL, 'http://pic1,http://pic2', 1, 0, 120.396102, 36.307342, NULL);
INSERT INTO `fa_circle` VALUES (4, 2, '测试一个内容', 'test', NULL, '4', 1, 1534748670, 'http://www.baidu.com', 0, NULL, 'http://pic1,http://pic2', 1, 0, 120.396202, 36.307443, NULL);
INSERT INTO `fa_circle` VALUES (5, 2, '测试一个内容', 'test', NULL, '1', 1, 1534748671, 'http://www.baidu.com', 0, NULL, 'http://pic1,http://pic2', 1, 0, 120.396190, 36.307444, NULL);
INSERT INTO `fa_circle` VALUES (6, 2, '测试一个内容', 'test', NULL, '1', 1, 1534748671, 'http://www.baidu.com', 0, NULL, 'http://pic1,http://pic2', 1, 0, 120.396192, 36.307440, NULL);
INSERT INTO `fa_circle` VALUES (7, 2, '测试一个内容', 'test', NULL, '1', 1, 1534748672, 'http://www.baidu.com', 0, NULL, 'http://pic1,http://pic2', 1, 0, 120.396193, 36.307449, NULL);

SET FOREIGN_KEY_CHECKS = 1;

 然后我们开始用mysql自带的函数,计算customer表中,每个地方具体。

1

传入参数 纬度36.307449 经度 120.396193

php 代码:

 
$lat=120.396193;
$lng=36.307449;
$sql="select *,(2 * 6378.137* ASIN(SQRT(POW(SIN(3.1415926535898*(".$lat."-latitude)/360),2)+COS(3.1415926535898*".$lat."/180)* COS(lat * 3.1415926535898/180)*POW(SIN(3.1415926535898*(".$lng."-longitude)/360),2)))) as juli from `fa_circle` order by juli asc";

SQL语句:

SELECT
	*,
	(
	2 * 6378.137 * ASIN(
	SQRT(
	POW( SIN( 3.1415926535898 * ( 120- latitude ) / 360 ), 2 ) + COS( 3.1415926535898 * 120 / 180 ) * COS( latitude * 3.1415926535898 / 180 ) * POW( SIN( 3.1415926535898 * ( 36- longitude ) / 360 ), 2 ) 
	) 
	) 
	) AS juli 
FROM
	`fa_circle` 
ORDER BY
	juli ASC

  至此,我们就能清楚的查看到纬度 36.307449经度 120.396193 距离 fa_circle表中的每个地区的距离(单位 km)

猜你喜欢

转载自blog.csdn.net/oZhengTuoJiaSuo/article/details/81557184