经度纬度是两个字段储存 mysql中两张表的经纬度怎么用ST_Distance 计算距离最近的
时间: 2023-07-23 10:08:47 浏览: 40
假设有两张表 `table1` 和 `table2`,它们分别存储了一些地点的经纬度信息,现在需要计算距离最近的两个地点之间的距离和它们的位置信息。可以使用以下 SQL 语句实现:
```
SELECT
t1.id AS id1,
t2.id AS id2,
ST_Distance(Point(t1.longitude, t1.latitude), Point(t2.longitude, t2.latitude)) AS distance
FROM
table1 t1
CROSS JOIN table2 t2
WHERE
t1.id <> t2.id
ORDER BY
distance ASC
LIMIT 1;
```
这里使用了 `CROSS JOIN` 将两张表的记录组合在一起,使用 `WHERE` 条件去掉了两个相同的地点的情况,使用 `ST_Distance` 计算了两个地点之间的距离,并使用 `ORDER BY` 按照距离升序排序,最后使用 `LIMIT` 限制只返回一条记录。这样就可以得到距离最近的两个地点的 ID 和它们之间的距离。如果需要得到地点的其他信息,可以在 `SELECT` 语句中添加相应的字段。
相关问题
经度纬度是两个字段mysql中ST_Distance 怎么用
在MySQL中,可以使用空间函数`ST_Distance`来计算两个地点之间的距离,其中需要将经纬度转换为空间点(Point)类型。假设有两个地点,分别存储在`location`表中,可以使用以下语句计算它们之间的距离:
```
SELECT ST_Distance(
Point(longitude1, latitude1),
Point(longitude2, latitude2)
) AS distance
FROM location
WHERE id = 1;
```
其中`Point(longitude1, latitude1)`和`Point(longitude2, latitude2)`将经度和纬度转换为空间点类型,`ST_Distance`函数计算两个点之间的距离,并将结果命名为`distance`。这里假设需要计算id为1的地点与另一个地点之间的距离,因此使用`WHERE`条件限定查询结果。
需要注意的是,`ST_Distance`函数返回的距离单位与经纬度的单位相同,因此可能需要进行单位转换。例如,如果需要将距离转换为千米,可以将查询语句改为:
```
SELECT ST_Distance(
Point(longitude1, latitude1),
Point(longitude2, latitude2)
) / 1000 AS distance_km
FROM location
WHERE id = 1;
```
这里将距离除以1000,将单位从米转换为千米,并将结果命名为`distance_km`。
mysql计算两个坐标经纬度之间的距离
可以使用MySQL内置的地理空间函数ST_Distance_Sphere来计算两个经纬度坐标之间的距离,示例如下:
假设我们有一个名为location的表,其中包含id、longitude和latitude字段,分别表示地点的唯一标识、经度和纬度。
首先,需要为location表的longitude和latitude字段创建一个地理空间索引,命令如下:
```
ALTER TABLE location ADD SPATIAL INDEX(lonlat);
```
接下来,可以使用ST_Distance_Sphere函数来计算两个经纬度坐标之间的距离,如下所示:
```
SELECT ST_Distance_Sphere(point(longitude1, latitude1), point(longitude2, latitude2)) AS distance
FROM location
WHERE id = 1;
```
其中,point(longitude, latitude)函数用于将经度和纬度转换为地理坐标点,distance表示两个坐标点之间的距离,单位为米。
注意:在MySQL 8.0以前的版本中,建议使用ST_Distance函数来计算两个经纬度坐标之间的距离。