【问题标题】:Well-known binary (WKB) format for a Polygon?多边形的众所周知的二进制(WKB)格式?
【发布时间】: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


    【解决方案1】:

    多边形是一个循环列表 - 第一个循环是多边形的外壳,后面的循环是孔。

    多边形格式是

    • 字节序标志
    • 3 用于多边形标记
    • 循环数的 4 字节整数
    • 循环

    每个循环都是

    • 循环中的顶点数
    • 顶点(点)

    每个点都是

    • 经度(双)
    • 纬度(双精度)

    【讨论】:

    • 啊哈! SRID 呢?那是可选的吗?或者这是特定于 EWKB 格式的,它看起来像 MariaDB 使用的那样。
    • 是的,SRID 是 EWKB 功能
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多