Polígonos en Java

Polígonos en Java

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 !!!

LEAVE YOUR COMMENTS