我试图在MySQL数据库中存储Google Map Circle数据。我选择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.
型
如何在MySQL数据库中存储Google Map Circle数据?
2条答案
按热度按时间polhcujo1#
从显示的错误中可以很清楚地看到,要存储和检索此类数据,您应该使用MySQL的空间数据类型和函数。
“(只是为了修改)想象一下,你有一张Map,上面有一些圆圈,就像谷歌Map上的圆圈一样,每个圆圈都有一个中心(中点)和一个半径(它有多大)。
有一个使用空间数据类型的表
字符串
ST_GeomFromText
函数从中心坐标创建一个点。型
fwzugrvs2#
如果您使用此包,请确保将cycle_coordinates表中的circle_coordinates列定义为Model中的空间数据类型
grimzy/laravel-mysql-spatial
模型应该是这样的。
字符串
在您的迁移字段中,类型应位于
型
和
型
如果已确保正确定义了circle_coordinates和radius列,并且为**$point变量传递了有效的Point对象,则应该能够使用ST_Distance**而不会遇到“无效的GIS数据”错误。如果问题仍然存在,您可能需要检查数据库中的实际数据,以确保空间数据中没有异常或不一致。