3.0 / 5
Hola buenas a todos. Hoy vamos a ver un poco como crear polÃgonos en Java, algo que me sirvio para recrear posiciones en una ciudad de acuerdo a la latitud y longitud de un celular.
Necesitaba que de acuerdo a una posición de latitud y longitud, verificar si estaba dentro de un polÃgono previamente definido.
Para este caso voy a usar la clase Polygon de Javafx.
Supongamos que tenemos un Array de coordenadas con los siguientes puntos.
String puntos[]; puntos = new String[] {"-24.1852919,-65.3002024", "-24.1864335,-65.300131", "-24.1853531,-65.2990609", "-24.1863644,-65.2989768"};
Y tenemos estos puntos para verificar si esta o no entre esos puntos que formarian un poligono.
Latitud: -24.1857989
Longitud: -65.2993033
Ahora con este método, vamos a armar un polÃgono con las coordenadas que tenemos.
public Polygon getPoints(String[] coordenas) { Polygon polygon = new Polygon(); Double[] coordenasGeo = null; if (coordenas.length > 0) { coordenasGeo = new Double[coordenas.length * 2]; int index = -1; for (String c : coordenas) { String[] pair = c.split(","); if (StringUtils.isNotBlank(pair[0]) && StringUtils.isNotBlank(pair[1])) { coordenasGeo[++index] = Double.parseDouble(pair[0]); coordenasGeo[++index] = Double.parseDouble(pair[1]); } } polygon.getPoints().addAll(coordenasGeo); } return polygon; }
Bien ahora con el siguiente método vamos a verificar si la posición que buscamos esta o no dentro del polÃgono que armamos.
public Boolean containInCerca(Polygon polygon, Double latitude, Double longitude){ return polygon.contains(latitude, longitude); }
y listo, el metodo nos va a retornar TRUE si esta dentro del poligono o FALSE en el caso contrario.
Usando Latitud: -24.1857989 Longitud: -65.2993033, obtengo TRUE.
Usando Latitud -24.185806 Longitud -65.2987292, obtengo FALSE.
public static void main(String[] args) { try { String puntos[]; puntos = new String[] {"-24.1852919,-65.3002024", "-24.1864335,-65.300131", "-24.1853531,-65.2990609", "-24.1863644,-65.2989768"}; Polygon points = getPoints(puntos); if(containInCerca(points, -24.1857989, -65.2993033)){ System.out.println("esta en el poligono"); }else{ System.out.println("no esta en el poligono"); } //probando otro punto if(containInCerca(points, -24.185806, -65.2987292)){ System.out.println("esta en el poligono"); }else{ System.out.println("no esta en el poligono"); } System.out.println("\nDone!"); } catch (Exception e) { e.printStackTrace(); } }
Usando Polygon de Javafx es muy sencillo resolver este problema. Espero sea de su agrado el articulo, Espero sus comentarios.
Saludos !!!