我正在尝试将 Google Map Circle 数据存储在 MySql 数据库中。我选择
text
数据类型来存储中心坐标,并选择 int
来存储中心半径。现在我使用下面的代码从这些列中获取数据。
$zone = RestaurantZones::whereRaw( "ST_Distance(circle_coordinates, ?) <= radius", [$point] )->pluck( 'id' );
我遇到以下错误。
Illuminate\Database\QueryException: SQLSTATE[22023]: Invalid parameter value: 3037 Invalid GIS data provided to function st_distance.
如何将 Google 地图圆数据存储在 MySql 数据库中?
从显示的错误中可以很清楚地看出,要存储和检索此类数据,您应该使用 MySQL 的空间数据类型和函数。
“(仅供修改)想象一下你有一张地图,上面有圆圈,就像谷歌地图圆圈一样。每个圆圈都有一个中心(中点)和一个半径(它有多大)。
拥有一个使用空间数据类型的表
CREATE TABLE restaurant_zones (
id INT AUTO_INCREMENT PRIMARY KEY,
circle_coordinates POINT, -- for storing the center coordinates
radius INT,
SPATIAL INDEX(circle_coordinates) -- create a spatial index for better performance
);
ST_GeomFromText
函数从中心坐标创建一个点。INSERT INTO restaurant_zones (circle_coordinates, radius) VALUES (ST_GeomFromText('POINT(11.1111.111)', 1000);