求交集求解MySQL中两点距离的交集(mysql两点距离)
今天我们来讲一个MySQL里求两点距离的交集的方法,对于获取数据库中两个点之间的距离最为重要,当我们想要计算它们之间的距离,必须解决一个求交集的问题。
比如,在MySQL中,现在有两个表t1, t2,t1和t2中都有经纬度列,假设给定的表表示的是点A(lat_A,long_A)和点B(lat_B,long_B)。现在需要求他们之间的距离。
我们可以用下面的 SQL 语句来求点 A 与点 B 之间的距离:
SELECT
( 6371 * acos( cos( radians( lat_A ) ) *
cos( radians( lat_B ) ) *
cos( radians( long_A ) – radians( long_B ) ) +
sin( radians( lat_A ) ) *
sin( radians( lat_B ) ) ) ) AS distance
FROM
t1, t2
另外也可以用如下的SQL语句用来求解两个表之间的交集:
SELECT
t1.lat_A, t1.long_A, t2.lat_B, t2.long_B,
( 6371 * acos( cos( radians( t1.lat_A ) ) *
cos( radians( t2.lat_B ) ) *
cos( radians( t1.long_A ) – radians( t2.long_B ) ) +
sin( radians( t1.lat_A ) ) *
sin( radians( t2.lat_B ) ) ) ) AS distance
FROM
t1, t2
WHERE
t1.lat_A = t2.lat_B
AND
t1.long_A = t2.long_B
上述SQL语句求得的是两个表之间重叠部分的距离,对于想要得到两个表之间的距离只需要将WHERE子句换成一个范围,如:
WHERE
t1.lat_A > t2.lat_B – 0.001
AND
t1.long_A > t2.long_B – 0.001
AND
t1.lat_A
AND
t1.long_A
用以上的sql语句就可以解决MySQL中两点距离的交集了。