有什么意义?

我正在尝试处理空间数据类型,与其他编程主题相比,我发现它在互联网上没有得到广泛的理解。

我有一张桌子,其中包含地图上的对象。理论上,坐标在任何方向上都从0,0变为无穷大。在地图上的某个点上最多只能有1个对象,因此我按如下方式设计表格:

CREATE TABLE `map_objects` (
  `name` varchar(255) DEFAULT NULL,`position` point NOT NULL,`type` int(10) unsigned DEFAULT NULL,PRIMARY KEY (`position`(25)),SPATIAL KEY `position_2` (`position`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

到目前为止,我可以使用空间扩展提供的各种几何函数来选择对象,但是我不太了解Point的内容,为什么它长25个字节?令人惊讶的是,几乎没有任何地方记录它。我发现我在另一个项目中使用了一些旧代码,在该项目中,我曾经提取二进制点并在我的应用程序逻辑中提取了坐标(出于某种原因):

unpack('x/x/x/x/co/Lt/dlat/dlng',$point);

告诉我前四个字节为空,然后有一个字符,一个长整数和两个双精度坐标。我非常怀疑开头的字节实际上是未使用的,可能是我从中复制此代码的那个字节不需要它们。无论如何,我目前只能通过知道坐标来选择地图上的对象:

SELECT * FROM map_objects WHERE position = ST_GeomFromText('Point(1 1)')

这又意味着除坐标外,所有字节都可以在执行时由MySQL生成,这意味着它们无关紧要吗?在Point列中包含它们的要点是什么?

从理论上讲,应该还可以通过提供25个二进制字节并使用equals运算符来选择一条记录,但是我的尝试实际上没有做到,我得到的结果只是空的,为什么?

lzdfkwdz 回答:有什么意义?

这是well-known binary format

  

例如,对应于POINT(1 -1)的WKB值由以下21个字节的序列组成,每个序列由两个十六进制数字表示:

0101000000000000000000F03F000000000000F0BF
Component    | Size    | Value
Byte order   | 1 byte  | 01
WKB type     | 4 bytes | 01000000
X coordinate | 8 bytes | 000000000000F03F
Y coordinate | 8 bytes | 000000000000F0BF

大多数起始字节表示几何对象是Point

本文链接:https://www.f2er.com/2922069.html

大家都在问