5

I have a set of points that i want to turn into a closed polygon in Java. I'm currently trying to use java.awt.geom.Point2D and java.awt.geom.Area but can't figure out how to turn a group of the points into an Area.

I think I can define a set of Line2Ds based on the points and then add those to the Areas, but that's a lot of work and I'm lazy. So is there an easier way to go.

The problem is I have a list of lat/lon coordinates and want to build up an area that I can use for hit testing.

Non-core Java libraries are a possibility as well.

Update, I looked at using java.awt.Polygon but it only supports ints and I'm operating with doubles for the coordinates.

Matt
  • 2,226
  • 16
  • 18

3 Answers3

3

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4077518

Hear that, "customer"? You should be using GeneralPath, even though the absence of Polygon2D since the late 1990s is an obvious monster-truck-sized hole in the API.

M1EK
  • 820
  • 5
  • 10
  • 1
    Notice there is a Polygon2D implementation floating around which originally came from the Berkeley UI lab: http://www.google.com/url?sa=t&source=web&ct=res&cd=5&url=http%3A%2F%2Fptolemy.eecs.berkeley.edu%2F~ptII%2FptolemyII%2FptIIlatest%2FptII%2Fdiva%2Futil%2Fjava2d%2FPolygon2D.java&ei=BNSeSqr3O4y4M7eMmIwC&usg=AFQjCNErxCV1f6zlpi60FEqPkgG1rAfx5A&sig2=eWfBVNHxVQzY1eJ3DZvC1Q – M1EK Sep 02 '09 at 20:22
  • 1
    better link: http://ptolemy.eecs.berkeley.edu/~ptII/ptolemyII/ptIIlatest/ptII/diva/util/java2d/ – M1EK Sep 02 '09 at 20:26
  • `GeneralPath` is a legacy class by now. See [this question and answers for some alternatives](http://stackoverflow.com/q/11465330/935676). We can celebrate the 20th anniversary of this bug in September ;) – amoebe Mar 14 '17 at 16:51
1

If you are actually working with Geodetic lat/lon values, you can actually use OpenMap to do some of this work. I just spent some time using the Geo class in that API to bounce an object around an area defined by a polygon of lat/lon points. There are intersection calls and everything and all of the math is done spherically so that the points are more correct as far as projections go.

Jay R.
  • 31,911
  • 17
  • 52
  • 61
0

The simplest (and laziest) thing to do is to create a bounding box for the points from the maximum and minimum of the X, Y ordinate values.

If you need a closer fit then rather than devise your own algorithm, this might be a good place to start:

richj
  • 7,499
  • 3
  • 32
  • 50