Mysql-几何类型-POINT

发布于:2024-05-19 ⋅ 阅读:(174) ⋅ 点赞:(0)

在MySQL中,地理空间数据类型和功能被称为GIS(Geographic Information System,地理信息系统)。MySQL支持几种不同的空间数据类型,包括点(POINT)、线(LINESTRING)、多边形(POLYGON)等。以下是如何在MySQL中使用这些地理空间数据类型的一些示例。

创建包含地理空间数据类型和SPATIAL索引的表

-- 创建表
CREATE TABLE locations (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    location POINT NOT NULL,
    SPATIAL INDEX(location) -- 创建空间索引以提高查询性能
);

插入地理空间数据

可以使用ST_GeomFromText函数插入地理空间数据, 插入数据时,需要确保经度和纬度的顺序正确(经度在前,纬度在后):

-- 插入地理空间数据
INSERT INTO locations (name, location) 
VALUES ('潍坊站', ST_GeomFromText('POINT(119.10461 36.703028)')),  -- New York City (经度 -74.0060, 纬度 40.7128)
       ('潍坊北站', ST_GeomFromText('POINT(119.202107 36.803533)'));  -- Los Angeles (经度 -118.2437, 纬度 34.0522)

查询地理空间数据

以下是一些常见的查询示例:

查询所有点数据
-- 查询所有点数据
SELECT id, name, ST_AsText(location) AS location 
FROM locations;
查找在某个范围内的点

假设你想找到距离某个点(例如 119.027859 36.720155)在 10 公里范围内的所有点,可以使用以下查询:

-- 查找在10公里范围内的点
SELECT id, name, ST_Distance_Sphere(location, ST_GeomFromText('POINT(119.027859 36.720155)')) AS distance 
FROM locations 
WHERE ST_Distance_Sphere(location, ST_GeomFromText('POINT(119.027859 36.720155)')) <= 10000;

更新地理空间数据

可以使用 ST_GeomFromText 函数更新地理空间数据。例如:

-- 更新地理空间数据
UPDATE locations 
SET location = ST_GeomFromText('POINT(119.134322 36.703954)') 
WHERE id = 5;

删除地理空间数据

删除操作与普通的 SQL 删除操作相同。例如:

-- 删除地理空间数据
DELETE FROM locations 
WHERE id = 5;

示例:综合使用

以下是一个完整的示例,包括创建表、插入数据、查询数据、更新数据和删除数据:

-- 创建表
CREATE TABLE locations (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    location POINT NOT NULL,
    SPATIAL INDEX(location)
);

-- 插入地理空间数据
INSERT INTO locations (name, location) 
VALUES ('潍坊站', ST_GeomFromText('POINT(119.10461 36.703028)')),  
       ('潍坊北站', ST_GeomFromText('POINT(119.202107 36.803533)'));  


-- 查询所有点数据
SELECT id, name, ST_AsText(location) AS location 
FROM locations;

-- 查找在10公里范围内的点
SELECT id, name, ST_Distance_Sphere(location, ST_GeomFromText('POINT(119.027859 36.720155)')) AS distance 
FROM locations 
WHERE ST_Distance_Sphere(location, ST_GeomFromText('POINT(119.027859 36.720155)')) <= 10000;

-- 更新地理空间数据
UPDATE locations 
SET location = ST_GeomFromText('POINT(119.134322 36.703954)') 
WHERE id = 1;

-- 删除地理空间数据
DELETE FROM locations 
WHERE id = 1;

数据截图

在这里插入图片描述

查询结果

经纬度: 119.027859 36.720155
在这里插入图片描述

在线平台测试结果:

结果1:

在这里插入图片描述

结果2:
在这里插入图片描述

基本准确


网站公告

今日签到

点亮在社区的每一天
去签到