我正在创建一个数据库来跟踪坐标系内事件的(标准化)坐标。想一想:一张篮球投篮图,其中存储了投篮尝试的坐标,这些坐标相对于他们在篮球场上的位置,从中心球场的正方向和负方向。
我不确定将此信息存储在数据库中以便让自己在使用数据时具有最大灵 active 的最佳方式。我的选择是:
- 使用 X 和 Y 属性将 JSON 对象存储在
TEXT
/CHAR
列中 - 将每个 X 和 Y 坐标存储在两个
DECIMAL
列中 - 使用MySQL的空间
POINT
对象来存储坐标
我的目标是存储归一化的 vector2(作为边界框的百分比),这样我就可以将位置映射回任意大小的矩形。
如果能够进行计算就好了,比如与另一点的距离,但我对空间对象的理解是它更多地用于地理坐标而不是归一化向量。然而,其他选项虽然使计算有点困难,但目前对于我的项目而言,它们并不是明确的要求。
是否可以为此使用空间点,计算是否类似于测量地理点?
最佳答案
可以使用 POINT,但检索或修改值可能更麻烦,因为它以二进制形式存储。您将无法直接查看或修改该字段;您将使用 SQL 语句获取组件或创建一个新的 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)
关于mysql - 在 MySQL 中存储矢量坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22726363/