GeoTools

RECU-0245 (Recurso Ficha Técnica)

Descripción

GeoTools2 son un conjunto de librerías “open Source” para desarrollar soluciones GIS. Tiene una arquitectura modular que permite añadir nuevas funcionalidades de manera muy sencilla y presume de soportar Open GIS y otros estándares de desarrollo para sistemas geográficos. Geotools2 está dividido en diferentes módulos, cada uno de ellos implementa un requerimiento específico. Normalmente, solo algunos de estos módulos son necesarios para crear una aplicación GIS.

  • Nivel de aplicaciones: Son aplicaciones geográficas que usan primitivas de geotools2. Normalmente se usan para producir visores de mapas o “web map servers”
  • Nivel de geoInterfaces: Contiene interfaces para todas las primitivas geográficas, como “Features” (objeto geográfico) o “Data Source” (Almacén de datos espaciales).
  • Nivel de data : Son los objetos geográficos que maneja geotools2, pueden venir de base de datos (Postgis), ESRI shapefiles o cualquier otro formato geográfico
  • Nivel de JTS: Es una librería de Java que proporciona todas las primitivas para tratar con objetos geográficos como puntos, polígonos o líneas.

Está escrito en el lenguaje de programación Java y se encuentra actualmente en un desarrollo activo al nutrirse de una comunidad de usuarios muy dinámica. Su diseño y concepción modular hace que numerosas implementaciones de software libre en el ámbito de los Sistemas de Información Geográfica (SIG) hagan uso de los desarrollos de GeoTools. Geotools es usada en varios tipos de proyectos incluyendo Servidores Web de Características, Servidores Web de Mapas y aplicaciones de escritorio

Ejemplo de Uso

Se muestra un ejemplo de la creación de un mapa.

package proyecto;
import java.awt.*;
import java.util.logging.Logger;

//Logging system
import org.geotools.filter.FilterFactory;
import org.geotools.map.DefaultMap;
import org.geotools.map.Map;
import org.geotools.renderer.lite.LiteRenderer;
import org.geotools.data.*;
import org.geotools.renderer.*;
import junit.framework.*;
import org.geotools.gui.swing.*;
import javax.swing.JFrame;
import javax.swing.*;
import org.geotools.feature.FeatureCollection;
import org.geotools.gui.swing.StatusBar;
import org.geotools.gui.swing.StyledMapPane;
import org.geotools.map.Context;
import org.geotools.map.ContextFactory;
import org.geotools.map.Layer;
import org.geotools.renderer.j2d.RenderedMapScale;
;

public class Mapa {
   
     boolean nueva = false;
     boolean cerrar = false;
     Frame frame;
     Frame frameDatos;
     String nombre = null;
     ContextFactory factory = null;
     Context context = null;
     Map map ; 
     double maxx = 0.0;
     double minx = 0.0;
     double maxy = 0.0;
     double miny = 0.0;
     MenuDatos menuDatos;
       
 
  
public MapContext mapContext;

    public Mapa(String nombre) {
      
        map = new DefaultMap();
        this.nombre = nombre;
      
    }
   
   
    /*
     * Añade una nueva capa al mapa a partir de una colección de propiedades y un estilo
     */
    public void añadir_capa (FeatureCollection capa, Style estilo,String nombreSec){
     
          map.addFeatureTable(capa,estilo);
           System.out.println( "se añade capa a mapa");
        // Crea el contexto
        factory = ContextFactory.createFactory();
        context = factory.createContext();
        final Layer layer = factory.createLayer(capa,estilo);
        //añade la nueva capa al contexto
        context.getLayerList().addLayer(layer);
        context.getBoundingBox().setAreaOfInterest(capa.getBounds());
        //calcula las coordenadas del mapa
        maxx = context.getBoundingBox().getAreaOfInterest().getMaxX();
        minx = context.getBoundingBox().getAreaOfInterest().getMinX();
        maxy = context.getBoundingBox().getAreaOfInterest().getMaxY();
        miny = context.getBoundingBox().getAreaOfInterest().getMinY();
     
     
    }

     /*
    *Muestra un mapa en pantalla
      */
     public void mostrar () {
       
        //crea un panel con el mapa con los botones cerrar y nueva busqueda
        javax.swing.JButton jButton1;
        javax.swing.JButton jButton2;
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton1.setFont(new java.awt.Font("Comic Sans MS", 1, 12));
        jButton1.setText("CERRAR");
        jButton1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                 cerrar = true;
            }
        });
        jButton2.setFont(new java.awt.Font("Comic Sans MS", 1, 12));
        jButton2.setText("NUEVA BUSQUEDA");
        jButton2.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                 nueva = true;
            }
        });
       
       
        LiteRenderer renderer = new LiteRenderer();
        frame = new Frame();
        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {e.getWindow().dispose(); }
        });
       
        //se crea la envoltura para el mapa según las coordenadas y un espacio de borde
        Envelope ex = new Envelope(minx - 400, maxx+300,miny - 300,maxy+550);
        Panel p = new Panel();
        frame.add(p);
        p.add(jButton1, new org.netbeans.lib.awtextra.AbsoluteConstraints(30, 510, 170, -1));
        p.add(jButton2, new org.netbeans.lib.awtextra.AbsoluteConstraints(200, 510, 170, -1));

        frame.setSize(650,670);
        frame.setVisible(true);
        //Se renderiza el mapa en el panel
        renderer.setOutput(p.getGraphics(),p.getBounds());
        map.render(renderer,ex);//and finaly try and draw it!
       
  }
  
  //Crea un nuevo menú con los datos de las zonas verdes, líneas de bus y recogida de basura
  public void mostrarDatos(ZonaVerde zonav, Linea_bus lineaBus, Linea_basura lineaBasura) {
     
    menuDatos = new MenuDatos();
    menuDatos.iniciar(zonav,lineaBasura,lineaBus);
    menuDatos.setLocation(650,0);
    menuDatos.show();
 
     
  }
 
   //cierra el mapa y el panel de datos
   public void cerrar (){
       frame.dispose();
       menuDatos.dispose();
   }
  
   
   public boolean cerrarVentana () {
       return cerrar;
   }
  
   public boolean nuevaBusqueda() {
       return nueva;
   }
   
}

Requisitos e incompatibilidades

  • JDK 1.4.1 : Plataforma java.
  • Java Advanced Imagings: Librería java para el tratamiento avanzado de imágenes, es usado por geotools2 a la hora de renderizar. Debe estar instalado en el directorio /JRE.
  • Java Advanced Imaging Libraries I/O API: También es usado por geotools2 a la hora de renderizar. Debe estar instalado en el directorio /JRE.