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