Esri geometry api java 学习文档 (4) 面、多面 (Polygon)

面要素Polygon是是一个2维的空间数据,每个面要素一组环(Ring),每条环包含着一组点(n≥2)。

与Polyline相同, 面要素Polygon同样属于Geometry类中的MultiVertexGeometry(多顶点形状)中的MultiPath(多线),与Polyline不同的是Polygon的基础单位是Ring

 

Ring指构成Polygon的环(首尾相连),也同样是Polygon的边界(Boundary),当Polygon参与比较时实际上是它的边界参与了比较。

Ring的分为:

outer ring (外边界) ,外边界顺时针标绘,分割外部和内部

inner rings(内边界),内边界逆时针标绘,分割内部和孔洞

严格按照顺逆时针的意义在于:保证前进方向的右边是内部,前进方向的左边是外界。

 

构建多边形的时候需要注意自相交和悬空线,他们都让图形出现共有线(面),会对奇偶判断造成错误。

共有点不会对奇偶判断造成影响。

       

注意,精度小到一定程度的时候也会被认为是共线。

Polygon 的常用方法:

新增:

p1.startPath(6.15, 8.0);  //开始勾勒单线

p1.lineTo(7.15, 9.0);  //勾勒下一个点

p1.add //在P1后面新增另一个Polygon(P2)的全部单线

p1.addEnvelope; //在P1后面新增另一个Envelope

p1.addPath; //在P1后面新增另一个Polyline(P2)第“0”个单线

setXY(int i, double x, double y);       //为polygon在i处新增一个顶点

对 Polygon 整体的处理:

p1.getType();       //返回类型

p1.equals(p2)  //判断是否拓扑相等

p1.getDimension();   //判断维度

p1.copyTo(p2);    //整体复制p1到p2

p1.setFillRule(int rule);       //设置填充规则

p1.getFillRule();   //读取填充规则

              0:奇偶规则判断填充

              1:非零环绕数规则判断填充

判断规则可见https://blog.csdn.net/jianloubang5433/article/details/52094437

Transformation2D transformation = new Transformation2D();

p1.applyTransformation( transformation );  //做二维仿射变换

p1.isEmpty();       //判断是否为空

p1.setEmpty();    //p1置空

p1.estimateMemorySize();  //判断内存

对 Polygon 内部 Ring 的处理:

p1.calculateRingArea2D(0);       //计算第0条环的面积(°²)(WGS84)

p1.getExteriorRingCount();       //读取外边界数量

p1.isExteriorRing(0);          //判断第0条是否为外边界

p1.getBoundary();             //读取所有边界环

p1.getPathCount();            //读取所有边界数量

p1.calculatePathLength2D(0);  //读取第0条环的二维长度(°)(WGS84)

p1.getPathIndexFromPointIndex(0);//读取第0个点在哪个环上

p1.getPathSize(0);             //读取环长度

p1.reversePath(0);             //逆序第0条环

p1.removePath(0);            //删除第0条环

 对 Ring 内部 Point 的处理:

Point[] pz = new Point[p1.getPointCount()];

p1.queryCoordinates(pz);  //读取所有点到点数组pz中

p1.getPointCount();           //读取总点数

p1.getPoint(0);                  //取出某个点位

p1.removePoint(0,0);  //删除点(0,0)

线段处理:

p1.getSegmentCount();           //得到线段数

Envelope 处理:

p1.queryEnvelope();          //读取所有Envelope

附:

Polygon 的初始定义:

 1 public static Polygon createPolygon1()
 2 {
 3     Polygon poly = new Polygon();
 4 
 5     // clockwise => outer ring
 6     poly.startPath(0, 0);
 7     poly.lineTo(-0.5, 0.5);
 8     poly.lineTo(0.5, 1);
 9     poly.lineTo(1, 0.5);
10     poly.lineTo(0.5, 0);
11 
12     // hole
13     poly.startPath(0.5, 0.2);
14     poly.lineTo(0.6, 0.5);
15     poly.lineTo(0.2, 0.9);
16     poly.lineTo(-0.2, 0.5);
17     poly.lineTo(0.1, 0.2);
18     poly.lineTo(0.2, 0.3);
19 
20     // island
21     poly.startPath(0.1, 0.7);
22     poly.lineTo(0.3, 0.7);
23     poly.lineTo(0.3, 0.4);
24     poly.lineTo(0.1, 0.4);
25 
26     return poly;
27 }
2.读取JSON数据:

MapGeometry mapGeom = OperatorImportFromJson.local().execute(Geometry.Type.Polygon, jsonString);

3.读取GeoJSON数据:
MapGeometry mapGeom = OperatorImportFromGeoJson.local().execute(GeoJsonImportFlags.geoJsonImportDefaults, Geometry.Type.Polygon, geoJsonString, null);

4.读取WKT数据
Geometry geom = OperatorImportFromWkt.local().execute(WktImportFlags.wktImportDefaults, Geometry.Type.Polygon, wktString, null);
参考:
http://esri.github.io/geometry-api-java/doc/Polygon.html
http://esri.github.io/geometry-api-java/javadoc/com/esri/core/geometry/Polygon.html

猜你喜欢

转载自www.cnblogs.com/17th-trackwalker/p/10315676.html
今日推荐