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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM