[ https://issues.apache.org/jira/browse/SIS-49?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Martin Desruisseaux closed SIS-49. ---------------------------------- > ArrayIndexOutOfBoundsException caused by method > getCircularRegionApproximation(int numberOfPoints) in LatLonPointRadius class > ----------------------------------------------------------------------------------------------------------------------------- > > Key: SIS-49 > URL: https://issues.apache.org/jira/browse/SIS-49 > Project: Spatial Information Systems > Issue Type: Bug > Components: Geometry objects > Reporter: Ross Laidlaw > Assignee: Ross Laidlaw > Priority: Minor > Labels: gsoc2012 > Fix For: 0.3 > > Attachments: SIS-49.rlaidlaw.2012-07-06.patch.txt > > > The method public LatLon[] getCircularRegionApproximation(int numberOfPoints) > throws an ArrayIndexOutOfBoundsException under certain conditions. This is > because of an error in the following loop: > {code} > LatLon[] points = new LatLon[numberOfPoints + 1]; > for (int i = 0; i < 360; i += (360 / numberOfPoints)) > { > points[i] = DistanceUtils.getPointOnGreatCircle(this.center.getLat(), > this.center.getLon(), radius, i); > } > {code} > The exception arises because integer i is used as the array index for the > points array, but the value of i jumps up by (360/numberOfPoints) on every > iteration of the loop. For example, if numberOfPoints is 10, then i will > increase by 36 each time, resulting in the exception. The points array size > is set before the loop to 'numberOfPoints + 1'. > As an experiment, I changed the loop as shown below and this appeared to fix > the problem. There may be a more elegant solution: > {code} > LatLon[] points = new LatLon[numberOfPoints + 1]; > for (int i = 0, j = 0; i < 360; i += (360 / numberOfPoints), j++) > { > points[j] = DistanceUtils.getPointOnGreatCircle(this.center.getLat(), > this.center.getLon(), radius, i); > } > {code} -- This message was sent by Atlassian JIRA (v6.4.14#64029)