Mysql-几何类型-POINT

在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:
在这里插入图片描述

基本准确

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yfs1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值