如何将Google Map Circle数据存储在MySql数据库中

问题描述 投票:0回答:1

我正在尝试将 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 laravel geometry coordinates center
1个回答
0
投票

从显示的错误中可以很清楚地看出,要存储和检索此类数据,您应该使用 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
);
  • 使用MySQL的
    ST_GeomFromText
    函数从中心坐标创建一个点。
INSERT INTO restaurant_zones (circle_coordinates, radius) VALUES (ST_GeomFromText('POINT(11.1111.111)', 1000);
© www.soinside.com 2019 - 2024. All rights reserved.