资阳市网站建设_网站建设公司_导航菜单_seo优化
2025/12/24 17:18:19 网站建设 项目流程

在 MySQL 中,POINT 是一种专门用于存储二维空间坐标(如经度、纬度)的空间数据类型(Spatial Data Type)。它是 OpenGIS 几何模型中定义的基础类型之一

建表语法

CREATE TABLE locations (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100),coordinate POINT NOT NULL SRID 4326, -- 推荐明确指定 SRIDSPATIAL INDEX(coordinate)           -- 创建空间索引以加速查询
) ENGINE=InnoDB;

有关4326的解释

它对应的是 WGS 84(World Geodetic System 1984)地理坐标系统,在 MySQL 中,SRID 4326 是处理地理空间数据(尤其是经纬度)时最核心的标准标识
在 MySQL 8.0 中,如果在定义 POINT 列时不指定 SRID,默认值为 SRID 0

  • SRID 0:代表笛卡尔平面(无限制的平面坐标),计算距离时仅使用简单的几何勾股定理
  • SRID 4326:代表球面(椭球体),计算距离(如使用 ST_Distance_Sphere)时会考虑地球曲率,结果更精确
  • SRID 3857 (Web Mercator):用于显示。它将地球投影为正方形平面,方便在浏览器瓦片地图(如 Google Maps 面板)上渲染,但高纬度地区面积形变严重

实际开发中注意点

在对接腾讯、百度的地图服务的时候,由于使用的并不是标准的SRID 4326 这种坐标,在mysql存储的时候需要进行坐标系的转换

地图/标准 坐标系名称 别名 特点
SRID 4326 WGS-84 地球坐标系 GPS 原始坐标,国际通用标准
高德/腾讯 GCJ-02 火星坐标系 国家测绘局规定,在 WGS-84 基础上加密偏转而来
百度地图 BD-09 百度坐标系 在 GCJ-02 基础上二次加密

数据操作

  1. 数据插入:使用 ST_GeomFromTextST_PointFromText 函数
INSERT INTO locations (name,coordinate) VALUES ('位置1',ST_PointFromText('POINT(39.1467 117.1947)', 4326));
INSERT INTO locations (name,coordinate) VALUES ('位置2',ST_PointFromText('POINT(39.1622 117.1803)', 4326));
INSERT INTO locations (name,coordinate) VALUES ('位置3',ST_PointFromText('POINT(39.0889 117.2222)', 4326));
INSERT INTO locations (name,coordinate) VALUES ('位置4',ST_PointFromText('POINT(39.1333 117.2000)', 4326));
INSERT INTO locations (name,coordinate) VALUES ('位置5',ST_PointFromText('POINT(39.1250 117.1917)', 4326));
  1. 数据读取:使用 ST_AsText(转换为字符串格式)或 ST_X / ST_Y 获取坐标分量
SELECT ST_AsText(coordinate), ST_X(coordinate), ST_Y(coordinate) FROM locations;
  1. 根据用户坐标获取位置最近的地点
SELECT name,ST_Distance_Sphere (coordinate, ST_GeomFromText ('POINT (40.1667 117.3333)',4326)) AS distance_m
FROMlocations
ORDER BYdistance_m ASCLIMIT 1;

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询