首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在MySQL中存储矢量坐标

在MySQL中存储矢量坐标
EN

Stack Overflow用户
提问于 2014-03-29 02:45:14
回答 1查看 2.4K关注 0票数 4

我正在创建一个数据库来跟踪坐标系统中事件的(规范化)坐标。想想看:一张篮球投篮图,在那里,投篮尝试的坐标相对于他们在篮球场上的位置进行存储,无论是正向还是负向,都来自中央球场。

我不太确定在数据库中存储这些信息的最佳方法,以便在使用这些数据时给予自己最大的灵活性。我的选择是:

  1. 将JSON对象存储在具有X和Y属性的TEXT/CHAR列中
  2. 将每个X和Y坐标存储在两个DECIMAL列中
  3. 使用MySQL的空间POINT对象存储坐标

我的目标是存储一个规范化的vector2 (作为包围框的百分比),这样我就可以将位置映射回任意大小的矩形上。

能做计算是很好的,就像距离另一点的距离,但我对空间物体的理解是,它更适合地理坐标,而不是归一化向量。然而,其他选项使计算变得更加困难,尽管目前对于我的项目来说,它们并不是一个明确的要求。

是否可以使用空间点,计算是否类似于测量地理点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-29 05:15:22

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

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

要插入一个点,就必须从两个数字中创建一个点(我认为就您的情况而言,这些数字的大小没有问题):

代码语言:javascript
运行
复制
INSERT INTO coordinatetable(testpoint) VALUES (GeomFromText('POINT(-100473882.33 2133151132.13)'));

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

要检索它,您必须分别选择X和Y值

代码语言:javascript
运行
复制
SELECT X(testpoint), Y(testpoint) from coordinatetable;

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

例如:

  • 球员是否通过半场只需要Y坐标。
  • 玩家可以从篮板上得到多少帮助,这比Y坐标更依赖于X坐标(X更接近零=>直射)。
  • 无论球员通常是在靠近球场边缘的位置得分,还是更多地依赖于X坐标而不是Y坐标(X接近1或-1)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22726363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档