Point是一种在计算机图形学和GIS中常用的数据类型,表示二维平面上的一个点。通常由两个数字(x和y)组成,分别表示点在平面坐标系中的横纵坐标。Point类型可以用于表示地理位置、城市、建筑物等空间信息。 在计算机程序中,Point通常由一对有序数值来表示,例如(x, y)。这些数值可以存储为浮点数或整数,并且可以使用不同的单位来表示,例如像素、米或经纬度等。 在GIS应用中,Point类型通常与其他几何对象类型(如LineString和Polygon)结合使用,以构建更复杂的空间数据模型。例如,在地图应用中,可以使用Point类型来表示地图上某个位置的坐标,并将其与LineString或Polygon类型结合使用以构建道路网络或区域边界等模型。 总之,Point是一种简单但重要的空间数据类型,在计算机图形学和GIS领域都有广泛应用。


Point是Geometry类型中的一种,表示一个二维坐标点。
在GIS中,通常使用WKT(Well-Known Text)格式来表示Point对象。
Point对象的WKT格式如下:POINT(x y)其中,x和y分别表示点的横坐标和纵坐标。
例如,一个坐标为(1,1)的点可以表示为:POINT(1 1)在WKT格式中,Point对象的坐标可以用空格或逗号分隔。因此,以下两种格式都是合法的:POINT(1 1)
POINT(1,1)在实际应用中,通常使用数据库或GIS软件提供的函数来创建和操作Point对象,而不是手动编写WKT格式的字符串。
对应的WKB(Well-KnownBinary)MySQL存储格式:

POINT(120 36.1)
bytes[25]:
00 00 00 00, 01, 01 00 00 00, 00 00 00 00 00 00 5E 40, CD CC CC CC CC 0C 42 40
component           size(起-止) decimal hex
SRID                4(0-3)      0       00 00 00 00(这里没有指定SRID)
Byte order          1(4-4)  	1       01(1:小端,0:大端)
WKB type            4(5-8)  	1       01 00 00 00
X(经度)             8(9-16)     120.0   00 00 00 00 00 00 5E 40
Y(纬度)             8(17-24)    36.1    CD CC CC CC CC 0C 42 40


用Java解析上面的byte数组

//是否大端格式
boolean bigEndian = (bytes[4] == 0x00);
// 解析SRID
int srid = NumberUtil.byte2int(bytes, 0, 4, bigEndian);
int type = NumberUtil.byte2int(bytes, 5, 4, bigEndian);
/*
type表示具体的类型,在MySQL中
1:Point
2:Line
3:Polygon
4:MultiPoint
5:MultiLine
6:MultiPolygon
7:GeometryCollection
*/
//如果type=1表示Point 根据前面的格式说明解析Point
double x = NumberUtil.byte2double(bytes, 9); //byte数组转double,从下标9开始,Double在java中占用8个字节(64位)
double y = NumberUtil.byte2double(bytes, 17);
Point point = new Point(x, y);

源码参考: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
NumberUtil参考:https://gitee.com/anyline/anyline/blob/master/anyline-core/src/main/java/org/anyline/util/NumberUtil.java