+
80
-

mysql怎么存储经纬度,并且查询指定经纬度附近1公里内的数据?

mysql怎么存储经纬度,并且查询指定经纬度附近1公里内的数据?


网友回复

+
0
-

使用point类型来存储经纬度

CREATE TABLE locations (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
coordinates POINT
);
插入经纬度数据:
INSERT INTO locations (name, coordinates) VALUES
('Location A', POINT(40.7128, -74.0060)),
('Location B', POINT(34.0522, -118.2437)),
('Location C', POINT(51.5074, -0.1278));

创建索引

CREATE SPATIAL INDEX sp_index ON locations(coordinates);

查询一公里内的数据

-- 假设指定的经纬度是 (40.7128, -74.0060)(纽约市中心)
SET @center_lat = 40.7128;
SET @center_lng = -74.0060;
SET @radius_km = 1;

SELECT
    id,
    name,
    ST_X(coordinates) AS latitude,
    ST_Y(coordinates) AS longitude,
    ST_DISTANCE(coordinates, POINT(@center_lat, @center_lng)) AS distance
FROM
    locations
WHERE
    ST_DISTANCE(coordinates, POINT(@center_lat, @center_lng)) <= @radius_km * 1000;

我知道答案,我要回答