我正在创建一个数据库来跟踪坐标系内事件的(标准化)坐标。想想:一个篮球投篮图,其中投篮尝试的坐标相对于他们在篮球场上的位置存储,从中心球场的正面和负面方向。
我不确定将此信息存储在数据库中的最佳方式,以便为自己提供最灵活的数据利用。我的选择是:
TEXT
/ CHAR
列中
DECIMAL
列中POINT
对象来存储坐标我的目标是存储一个标准化的vector2(作为边界框的百分比),这样我就可以将这些位置映射回任意大小的矩形。
能够进行计算会很愉快,比如距离另一个点的距离,但我对空间物体的理解是,它更适用于地理坐标而非标准化矢量。然而,其他选项使计算变得更加困难,目前对于我的项目,它们并不是一个明确的要求。
是否可以为此使用空间POINT,并且计算方法与测量地理点的计算类似吗?
答案 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坐标更容易,您可以直接访问坐标,而不是从存储在单个字段中的数据中提取所需的值。对于较大的数据集,它可能会加快您的查询速度。
例如: