在MySQL中存储矢量坐标

时间:2014-03-29 02:45:15

标签: mysql vector point spatial coordinate

我正在创建一个数据库来跟踪坐标系内事件的(标准化)坐标。想想:一个篮球投篮图,其中投篮尝试的坐标相对于他们在篮球场上的位置存储,从中心球场的正面和负面方向。

我不确定将此信息存储在数据库中的最佳方式,以便为自己提供最灵活的数据利用。我的选择是:

  1. 使用 X Y 属性
  2. 将JSON对象存储在TEXT / CHAR列中
  3. 将每个 X Y 坐标存储在两个DECIMAL列中
  4. 使用MySQL的空间POINT对象来存储坐标
  5. 我的目标是存储一个标准化的vector2(作为边界框的百分比),这样我就可以将这些位置映射回任意大小的矩形。

    能够进行计算会很愉快,比如距离另一个点的距离,但我对空间物体的理解是,它更适用于地理坐标而非标准化矢量。然而,其他选项使计算变得更加困难,目前对于我的项目,它们并不是一个明确的要求。

    是否可以为此使用空间POINT,并且计算方法与测量地理点的计算类似吗?

1 个答案:

答案 0 :(得分:3)

可以使用POINT,但它可能更麻烦地检索或修改值,因为它以二进制形式存储。您将无法直接查看或修改该字段;您将使用SQL语句来获取组件或创建新的POINT以替换旧的POINT。

它们存储为数字,您可以对它们进行常规的数学运算。距离的地理空间类型计算将使用其他地理空间数据类型,例如LINESTRING。

要插入一个点,您必须从两个数字创建一个点(我认为对于您的情况,数字的大小不会出现问题):

INSERT INTO coordinatetable(testpoint) VALUES (GeomFromText('POINT(-100473882.33 2133151132.13)'));

INSERT INTO coordinatetable(testpoint) VALUES (GeomFromText('POINT(0.3 -0.213318973)'));

要检索它,您必须单独选择X和Y值

SELECT X(testpoint), Y(testpoint) from coordinatetable;

对于您的情况,我会将X和Y坐标存储在两个DECIMAL列中。检索,修改和分开X和Y坐标更容易,您可以直接访问坐标,而不是从存储在单个字段中的数据中提取所需的值。对于较大的数据集,它可能会加快您的查询速度。

例如:

  • 球员是否过半场只需要Y坐标
  • 玩家可以从篮板获得多少帮助将更多地依赖于X坐标而不是Y坐标(X更接近于零=>更直接的射击)
  • 玩家是否通常从靠近球场长边的位置得分将更多地依赖于X坐标而不是Y坐标(X接近1或-1)