3.0 / 5

Polígonos en Java

7.616K
3

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

THIS IS AN OPTIONAL

Related Post

LEAVE YOUR COMMENTS