GeometryCollection  用于表示包含多个几何对象的集合。它可以包含点、线、多边形等不同类型的几何对象。
在地理信息系统 (GIS) 中,GeometryCollection 可以用来表示复杂的空间对象,如具有多个内部环的多边形、多个线段的路径等。
以下是一个GeometryCollection  其中包含了一个点,一条线,一个多面(多个多边形)
GEOMETRYCOLLECTION(POINT(120 36.1), LINESTRING(120 36.1, 120 36.2, 120 36.3), MULTIPOLYGON(((0 0, 0 10, 10 10, 10 0, 0 0), (2 2, 2 8, 8 8, 8 2, 2 2)), ((15 15, 15 20, 20 20, 20 15, 15 15))))

byte[370]
00 00 00 00, 01, 07 00 00 00, 03 00 00 00,
01, 01 00 00 00, 00 00 00 00 00 00 5E 40, CD CC CC CC CC 0C 42 40,
01, 02 00 00 00, 03 00 00 00, 00 00 00 00 00 00 5E 40, CD CC CC CC CC 0C 42 40, 00 00 00 00 00 00 5E 40, 9A 99 99 99 99 19 42 40, 00 00 00 00 00 00 5E 40, 66 66 66 66 66 26 42 40,
01, 06 00 00 00, 02 00 00 00,
01, 03 00 00 00, 02 00 00 00, 05 00 00 00,
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 24 40 00 00 00 00 00 00 24 40 00 00 00 00 00 00 24 40 00 00 00 00 00 00 24 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 40 00 00 00 00 00 00 20 40 00 00 00 00 00 00 20 40 00 00 00 00 00 00 20 40 00 00 00 00 00 00 20 40 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 40 01 03 00 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 2E 40 00 00 00 00 00 00 2E 40 00 00 00 00 00 00 2E 40 00 00 00 00 00 00 34 40 00 00 00 00 00 00 34 40 00 00 00 00 00 00 34 40 00 00 00 00 00 00 34 40 00 00 00 00 00 00 2E 40 00 00 00 00 00 00 2E 40 00 00 00 00 00 00 2E 40
Byte Order (1 byte): 用于指示字节顺序的字节,常见的取值为 0 表示大端字节序,1 表示小端字节序。
Geometry Type (4 bytes): 用于表示 GeometryCollection 对象的类型,对应于几何类型代码。在 WKB 格式中,GeometryCollection 对象的类型代码为 7。
Num Geometries (4 bytes): 用于表示 GeometryCollection 中包含的几何对象的数量。
Geometry 1, Geometry 2, ..., Geometry N: 表示 GeometryCollection 中的每个几何对象的 WKB 表示。

component        size(起-止)   decimal         hex                          comment
SRID              4(0-3)       0              00 00 00 00
Endian            1(4-4)       1              01
WKB type          4(5-8)       7              07 00 00 00                  GeometryCollection
Geometry count    4(9-12)      2              03 00 00 00                  包含3个直接子元素:1个点,一条线,一个多面(多个多边形)

第0个直接子元素:Point
Endian          1(13-13)       1              01
WKB type        4(14-17)       1              01 00 00 00                  Point
X               8(18-25)       120            00 00 00 00 00 00 5E 40
Y               8(26-33)       36.1           CD CC CC CC CC 0C 42 40

第1个直接子元素:LINESTRING
Endian          1(34-34)       1              01
WKB type        4(35-38)       2              02 00 00 00                  LINESTRING
Point count     4(39-42)       3              03 00 00 00                  包含3个点
X               8(43-50)       120            00 00 00 00 00 00 5E 40
Y               8(51-58)       36.1           CD CC CC CC CC 0C 42 40
X               8(59-66)       120            00 00 00 00 00 00 5E 40
Y               8(67-74)       36.2           9A 99 99 99 99 19 42 40
X               8(75-82)       120            00 00 00 00 00 00 5E 40
Y               8(83-90)       36.3           66 66 66 66 66 26 42 40

第2个直接子元素:MULTIPOLYGON
Endian            1(91-91)     1              01
WKB type          4(92-95)     6              06 00 00 00                  MultiPolygon
polygon count     4(96-99)     2              02 00 00 00                  共2个直接子元素(Polygon)

面0
Endian          1(100-100)     1              01                           针对第0个直接子元素(Polygon)
WKB type        4(101-104)     3              03 00 00 00                  第0个直接子元素(Polygon)类型:Polygon
ring count      4(105-108)     2              02 00 00 00                  第0个Polygon中共2个环

面0外环
point count     4(109-112)    5              05 00 00 00                  第0个Polygon外环点数量
X1(经度)         8(113-120)    0              00 00 00 00 00 00 00 00
Y1(纬度)         8(121-128)    0              00 00 00 00 00 00 00 00
X2(经度)         8(129-136)    0              00 00 00 00 00 00 00 00
Y2(纬度)         8(137-144)    10             00 00 00 00 00 00 24 40
X3(经度)         8(145-152)    10             00 00 00 00 00 00 24 40
Y3(纬度)         8(153-160)    10             00 00 00 00 00 00 24 40
X4(经度)         8(161-168)    10             00 00 00 00 00 00 24 40
Y4(纬度)         8(169-176)    0              00 00 00 00 00 00 24 40
X5(经度)         8(177-184)    0              00 00 00 00 00 00 00 00
Y6(纬度)         8(185-192)    0              00 00 00 00 00 00 00 00
面0内环0
point count     4(193-196)    5              05 00 00 00                  第0个Polygon第0个内环点数量
X1(经度)         8(197-204)    2              00 00 00 00 00 00 00 40
Y1(纬度)         8(205-212)    2              00 00 00 00 00 00 00 40
X2(经度)         8(213-220)    2              00 00 00 00 00 00 00 40
Y2(纬度)         8(221-228)    8              00 00 00 00 00 00 20 40
X3(经度)         8(229-236)    8              00 00 00 00 00 00 20 40
Y3(纬度)         8(235-244)    8              00 00 00 00 00 00 20 40
X4(经度)         8(245-252)    8              00 00 00 00 00 00 20 40
Y4(纬度)         8(253-260)    2              00 00 00 00 00 00 00 40
X5(经度)         8(261-268)    2              00 00 00 00 00 00 00 40
Y5(纬度)         8(269-276)    2              00 00 00 00 00 00 00 40
面1
Endian          1(277-277)    1              01                           针对第1个直接子元素(Polygon)
WKB type        4(278-281)    3              03 00 00 00                  第1个直接子元素(Polygon)类型:Polygon
ring count      4(282-285)    1              01 00 00 00                  第1个Polygon中共2个环
面1外环
point count     4(286-289)    5              05 00 00 00                  第0个Polygon外环点数量
X1(经度)         8(290-297)   15              00 00 00 00 00 00 2E 40
Y1(纬度)         8(298-305)   15              00 00 00 00 00 00 2E 40
X2(经度)         8(306-313)   15              00 00 00 00 00 00 2E 40
Y2(纬度)         8(314-321)   20              00 00 00 00 00 00 34 40
X3(经度)         8(322-329)   20              00 00 00 00 00 00 34 40
Y3(纬度)         8(330-337)   20              00 00 00 00 00 00 34 40
X4(经度)         8(338-345)   20              00 00 00 00 00 00 34 40
Y4(纬度)         8(346-353)   15              00 00 00 00 00 00 2E 40
X5(经度)         8(354-361)   15              00 00 00 00 00 00 2E 40
Y5(纬度)         8(362-369)   15              00 00 00 00 00 00 2E 40

Java解析以上结构,由于这个比较啰嗦,点线面在前几篇也都解析过了,所以直接上最终代码,不逐个字节解析了

 /**
     * 解析MGeometryCollection
     * @param bytes bytes
     * @return GeometryCollection
     */
    public static GeometryCollection parseGeometryCollection(byte[] bytes){
        GeometryCollection collection = new GeometryCollection();
        ByteBuffer buffer = new ByteBuffer(bytes, bytes[4], 9);
        //Geometry count
        int geometryCount = buffer.readInt();
        for(int g=0; g<geometryCount; g++){
            //Endian
            buffer.step(1);
            //WKB type
            int type = buffer.readInt();
            Geometry geometry = null;
            if(type == 1){
                geometry = point(buffer);
            }else if(type == 2){
                geometry = line(buffer);
            }else if(type == 3){
                geometry = polygon(buffer);
            }else if(type == 4){
                geometry = multiPoint(buffer);
            }else if(type == 5){
                geometry = multiLine(buffer);
            }else if(type == 6){
                geometry = multiPolygon(buffer);
            }
            if(null != geometry) {
                collection.add(geometry);
            }
        }

        return collection;
    }


    /**
     * 生成wkb格式要
     * @param geometry geometry
     * @return bytes
     */
    public static byte[] wkb(Geometry geometry){
        if(geometry instanceof Point){
            return wkb((Point)geometry);
        }else if(geometry instanceof Line){
            return wkb((Line)geometry);
        }else if(geometry instanceof Polygon){
            return wkb((Polygon)geometry);
        }else if(geometry instanceof MultiPoint){
            return wkb((MultiPoint)geometry);
        }else if(geometry instanceof MultiLine){
            return wkb((MultiLine)geometry);
        }else if(geometry instanceof MultiPolygon){
            return wkb((MultiPolygon)geometry);
        }else if(geometry instanceof GeometryCollection){
            return wkb((GeometryCollection)geometry);
        }
        return null;
    }
源码参考:https://gitee.com/anyline/anyline/blob/master/anyline-data-jdbc-dialect/anyline-data-jdbc-mysql/src/main/java/org/anyline/data/jdbc/mysql/MySQLGeometryAdapter.java