This method depends totally on the projected coordinates of the
OMCircle. For smaller OMCircle sizes at larger projection scale
values, I wouldn't be surprised if the PathIterator needs to be
flattened a little to interpolate between the points a little better.
Either that, or make the projection scale number smaller so the
OMCircle is projected at a bigger size, with more pixel space between
coordinates.
The other alternative is to call the getCoordLists() method on the
OMCircle to get the raw lat/lon points of the circle.
- Don
On Nov 1, 2004, at 3:02 PM, Whanger, Thomas wrote:
> Hello,
>
>
>
> The com.bbn.openmap.dataAccess.shape.EsriPolygonList.convert(OMCircle,
> Projection) method converts the given OMCircle to an OMPoly using the
> given Projection, and it works great for circles with a larger radius.
>
>
>
>
> However, if the radius is less than approximately 0.2 decimal degrees,
> then the converted OMPoly is a rectangle or triangle (not a circular
> shaped polygon). In addition, if the radius is less than 0.04 decimal
> degrees, then the converted OMPoly is a vertical line (not a circular
> shaped polygon).
>
>
>
> Does anyone know why this method fails for these circles with a
> smaller radius and/or how to get the method to work with these circles
> with a smaller radius? Any help is greatly appreciated.
>
>
>
> Thanks,
>
> -Tom
>
>
>
> Here is the method's code:
>
>
>
> //converts circles into polygons
>
> public static OMPoly convert(OMCircle omCircle, Projection proj) {
>
> GeneralPath shape = omCircle.getShape();
>
>
>
> //get the PathIterator that defines the outline of the circle
>
> PathIterator circle = shape.getPathIterator(null);
>
> Vector initialPoints = new Vector();
>
> float[] segPoints = new float[2];
>
>
>
> while (!circle.isDone()) {
>
> //by passing segpoints the array is filled with each x\y
> point
>
> //iterated by the circle
>
> int segType = circle.currentSegment(segPoints);
>
> initialPoints.add(new Float(segPoints[0]));
>
> initialPoints.add(new Float(segPoints[1]));
>
> circle.next();
>
> }
>
>
>
> float[] circlePoints = new float[initialPoints.size()];
>
>
>
> if (proj == null) {
>
> return null;
>
> }
>
>
>
> //convert the x/y points to lat/lon points
>
> for (int p = 0; p < initialPoints.size(); p += 2) {
>
> LatLonPoint llp = proj.inverse(
>
> ((Float)initialPoints.elementAt(p)).intValue(),
>
> ((Float)initialPoints.elementAt(p +
> 1)).intValue());
>
>
>
> circlePoints[p] = llp.getLatitude();
>
> circlePoints[p + 1] = llp.getLongitude();
>
> }
>
>
>
> //using the circle data create an OMPoly
>
> OMPoly poly = new OMPoly(circlePoints,
> OMGraphic.DECIMAL_DEGREES, omCircle.getLineType());
>
> poly.setAppObject(omCircle.getAppObject());
>
> DrawingAttributes da = new DrawingAttributes();
>
> da.setFrom(omCircle);
>
> da.setTo(poly);
>
> return poly;
>
> }
>
>
>
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Don Dietrick, dietrick_at_bbn.com
BBN Technologies, Cambridge, MA
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
--
[To unsubscribe to this list send an email to "majdart_at_bbn.com"
with the following text in the BODY of the message "unsubscribe openmap-users"]
Received on Mon Nov 01 2004 - 15:01:01 EST