ArcGIS Runtime SDK for Android端关于Polyline遍历获取segment报错:ArrayIndexOutOfBoundsException

ArcGIS Runtime SDK for Android端由polyline获取segment出错:
E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.ArrayIndexOutOfBoundsException: length=2; index=-1
已邀请:

张赛

赞同来自:

【解决办法】:
先普及一下基础知识:
Esri在Arcpy类对象Polyline中对于Polyline的官方定义是:
Polyline是由一个或多个path定义的形状,其中的path是一系列相连接的segment。
详细解释如下链接:
https://desktop.arcgis.com/en/ ... e.htm

因此,在通过Polyline获取segment的时候,实际需要两个步骤:
1遍历查找path
2遍历获取segment

在ArcGIS Runtime SDK for Android的帮助文档中,querySegmentIterator()方法所返回的SegmentIterator恰位于multipath的起始位置,需调用nextPath返回multipath的第一个path对象。而后,才能调用nextSegment()以遍历移动Iterator到下一个Segment并获取这一Segment。

具体示例如下:
1 构建Polyline

Polyline lineGeometry = new Polyline();
lineGeometry.startPath(-302557, 7570663);
lineGeometry.lineTo(-302959, 7570868);
lineGeometry.lineTo(-303042, 7571220);
lineGeometry.lineTo(-302700, 7571803);
lineGeometry.lineTo(-304043, 7576654);
lineGeometry.lineTo(-300544, 7585289);
lineGeometry.lineTo(-294365, 7592435);
lineGeometry.lineTo(-290122, 7594445);
lineGeometry.lineTo(-285283, 7595488);


2 获取SegmentIterator

SegmentIterator iterator = lineGeometry.querySegmentIterator();


3 获取Path

iterator.nextPath();


4 遍历Path下的所有Segment

while (iterator.hasNextSegment()) {
    System.out.println(Is there a next segment? + iterator.hasNextSegment() + !);
    Segment segment = iterator.nextSegment();
    System.out.println(The length of the segment is: + segment.calculateLength2D() + .);
}


补充:
​如果这个multipath由多个path组成,那么需要循环调用nextPath()以遍历移动Iterator到下一个path。

要回复问题请先登录注册