【发布时间】:2020-11-29 15:37:28
【问题描述】:
我看到的所有the examples 都是针对一个简单的 POINT,但是他们并没有详细说明 POLYGON 是如何表示的。
二维多边形的二进制格式是什么?
1 字节表示字节序,4 字节 int 3 表示多边形,然后呢?
这是PolyFromText('POLYGON((1 2,3 4,1 2))') 的二进制文件:
00000000 00 00 00 00 01 03 00 00 00 01 00 00 00 03 00 00 ................
00000010 00 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 00 .......ð?.......
00000020 40 00 00 00 00 00 00 08 40 00 00 00 00 00 00 10 @.......@.......
00000030 40 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 00 @......ð?.......
00000040 40 @
看起来它实际上是从一个点开始的??不知道这里发生了什么。
我已经对其进行了部分逆向工程。
select hex(PolyFromText('POLYGON((255 65535))'));
00000000 srid
01 little-endian
03000000 polygon
0100000001000000
0000000000E06F40 = bin2hex(pack('e',255))
00000000E0FFEF40 = unpack('e',hex2bin('00000000E0FFEF40'))
还没弄明白0100000001000000是什么意思。
这是两个 little-endian int32s。第一个似乎总是 1,第二个是点数。
【问题讨论】:
标签: mysql binary mariadb geospatial