多点(MultiPoint) 很容易被认为是简单的Point数组,但是在Esri geometry api 中,多点被归类为多顶点几何形状(MultiVertexGeometry)。
多顶点几何形状(MultiVertexGeometry)不仅继承了几何类(Geometry)所规定的基本几何处理函数(见https://blog.youkuaiyun.com/wtr1717/article/details/87871204 常用的什么长度、面积、边界、Envelope等等都在里面)
还因其内部包含着子形状,更多的定义了对子形状的操作。比如说
getPointCount | 内部点数 |
getPoint | 得到点 |
setPoint | 设置点 |
queryCoordinates | 获取所有点 MultiPoint -> Point[] |
MultiPoint 与 MultiVertex 非常相似(毕竟多点和多顶点只是含义有区别)下面就说MultiPoint对内部Point的操作
增
add(double x, double y)
add(Point point)
或者像Point一样由JSON、GeoJSON、WKT直接批量导入
还可以使用 insertPoint(int beforePointIndex, Point pt) 插入
删
removePoint(int pointIndex)
改
setPoint(int index, Point pointSrc)
查
可以只查一个:getPoint(int index)
也可以查出列表:queryCoordinates(Point[] dst) (配合getPointCount())
Point[] pa1 = new Point[mp1.getPointCount()];
mp1.queryCoordinates(pa1);
此外作为配套,还使用
getPointCount()查询点数
getStateFlag()查询是否改动(上次检查之后,出现改动会使得返回值+1)
比如说:
mp1.getStateFlag();
mp1.insertPoint(0, p2);
mp1.getStateFlag();
mp1.removePoint(0);
mp1.getStateFlag();
会返回1 、2 、3,但是
mp1.getStateFlag();
mp1.insertPoint(0, p2);
mp1.removePoint(0);
mp1.getStateFlag();
mp1.getStateFlag();
会返回1 、2 、2,而不是1 、3 、3。
使用queryEnvelope(Envelope env)获得域
Envelope env1 = new Envelope();
mp1.queryEnvelope(env1);
使用 resize(int pointCount) 来调整大小(像是保留小数?)
如果MultiPoint包含n个点,
pointCount ≤ n :则取前pointCount个点(虽然剩下的点不删除还可以恢复,但是已经不参与任何操作)
pointCount > n :则不足pointCount的点在后面补(0,0)
参考:
http://esri.github.io/geometry-api-java/javadoc/com/esri/core/geometry/MultiVertexGeometry.html
http://esri.github.io/geometry-api-java/javadoc/com/esri/core/geometry/MultiPoint.html