CREATE TABLE `locations` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `latitude` decimal(10,8) NOT NULL, `longitude` decimal(11,8) NOT NULL, `location` point NOT NULL, PRIMARY KEY (`id`), SPATIAL INDEX `location_index` (`location`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; INSERT INTO `locations` (`id`, `name`, `latitude`, `longitude`, `location`) VALUES (1, '北京', 39.904690, 116.407170, Point(116.407170, 39.904690)), (2, '上海', 31.230390, 121.473700, Point(121.473700, 31.230390)), (3, '深圳', 22.543099, 114.057869, Point(114.057869, 22.543099));
上面的代码创建了一个名为locations的表,其中包含了id、name、latitude、longitude和location字段。location字段用Point类型存储了经纬度信息,并创建了一个空间索引location_index,以便在查询时使用。
下面是使用ST_Distance_Sphere函数查询距离的示例:
SELECT *, ST_Distance_Sphere(location, Point(121.473700, 31.230390)) AS distance FROM locations WHERE ST_Distance_Sphere(location, Point(121.473700, 31.230390))< 500000;
上面的代码可以查询距离上海不超过500公里的位置信息,并将距离保存在名为distance的新字段中。
在查询时,大家还可以使用ST_AsText函数将Point类型的经纬度转换为字符串。
SELECT id, name, ST_AsText(location) AS location FROM locations;
上面的代码将查询locations表中的id、name和location(经纬度信息)字段,并使用ST_AsText函数将location从Point类型转换为字符串。
使用MySQL的空间数据类型,查询经纬度信息将变得更加简单、高效。