Geotools-exemplos

  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Geotools-exemplos as PDF for free.

More details

  • Words: 758
  • Pages: 12
  

Alguns exemplos muito simples com  GeoTools 2 Material adicional para a disciplina CAP365

Rafael Santos

Outubro/2006

http://www.lac.inpe.br/~rafael.santos

1

A API GeoTools ● ● ● ●

● ● ●

Não é uma solução GIS. Permite o desenvolvimento de aplicações georeferenciadas. 100% Java: sem necessidade de instalação de .so ou .dll. Código aberto, implementa especificações do Open  Geospatial Consortium (OGC). Base para outros projetos. Algumas de suas classes usam a API JAI. http://docs.codehaus.org/display/GEOTOOLS/Home

Outubro/2006

http://www.lac.inpe.br/~rafael.santos

2

Exemplos – Dados

Outubro/2006

http://www.lac.inpe.br/~rafael.santos

3

Hello World (1 de 2) package basic; import import import import import import

java.io.*; java.net.URL; org.geotools.data.FeatureSource; org.geotools.data.shapefile.ShapefileDataStore; org.geotools.feature.*; com.vividsolutions.jts.geom.Geometry;

public class ShapefileInfo { public static void main(String[] args) throws IOException { // Onde estão nossos shapefiles? String baseDir = "/home/rafael/Java/Geo/kernelestimator/WebContent/Shapefiles/"; // Criamos uma URL com o shapefile que nos interessa. URL s = new File(baseDir+"Brasil/55mu2500gc.shp").toURL(); // Criamos um DataStore a partir do Shapefile ShapefileDataStore data = new ShapefileDataStore(s); // O nome do DataStore é o próprio nome do Shapefile (só tem um) String nome = data.getTypeNames()[0];

Outubro/2006

http://www.lac.inpe.br/~rafael.santos

4

Hello World (2 de 2)

}

// Recuperamos o schema para estes dados. FeatureType ft = source.getSchema(); // Imprimimos pares atributo/tipo for (int i=0; i
Outubro/2006

http://www.lac.inpe.br/~rafael.santos

5

Hello World (resultados) Oct 14, 2006 6:31:43 PM org.geotools.data.shapefile.ShapefileDataStore openPrjReader WARNING: projection (.prj) for shapefile: file:/home/rafael/Java/Geo/kernelestimator/WebContent/Shapefiles/Brasil/55mu2500gc.shp is not available Oct 14, 2006 6:31:44 PM org.geotools.data.shapefile.ShapefileDataStore openPrjReader WARNING: projection (.prj) for shapefile: file:/home/rafael/Java/Geo/kernelestimator/WebContent/Shapefiles/Brasil/55mu2500gc.shp is not available 0: Geometry 1: Feature GEOCODIGO java.lang.Long 2: Feature NOME java.lang.String 3: Feature UF java.lang.String 4: Feature ID_UF java.lang.Long 5: Feature REGIAO java.lang.String 6: Feature MESOREGIAO java.lang.String 7: Feature MICROREGIA java.lang.String 8: Feature LATITUDE java.lang.String 9: Feature LONGITUDE java.lang.String 10: Feature SEDE java.lang.Boolean Temos 5807 features.

Outubro/2006

http://www.lac.inpe.br/~rafael.santos

6

Visualização (1 de 5) package basic; import import import import import import import import import import

java.awt.*; java.awt.Dimension; java.awt.geom.AffineTransform; java.io.IOException; javax.swing.JComponent; org.geotools.data.shapefile.ShapefileDataStore; org.geotools.map.*; org.geotools.renderer.shape.ShapefileRenderer; org.geotools.styling.*; com.vividsolutions.jts.geom.*;

/** * Esta classe representa um componente gráfico capaz de desenhar o conteúdo * (geometria) de uma instância de ShapefileDataStore. */ public class ShapefileComponent extends JComponent { private ShapefileDataStore sds; private ShapefileRenderer renderer; private Envelope envelope; private final Coordinate center; private double zoom; private final int width = 640; private final int height = 640;

Outubro/2006

http://www.lac.inpe.br/~rafael.santos

7

Visualização (2 de 5) public ShapefileComponent(ShapefileDataStore sds) throws IOException { this.sds = sds; // Criamos um Style StyleBuilder sb = new StyleBuilder(); // Criamos símbolos para a linha LineSymbolizer lineSymb = (LineSymbolizer) sb.createLineSymbolizer(Color.RED, 1); Style style = sb.createStyle(lineSymb); // Criamos um MapContext com os dados e um estilo MapContext mc = new DefaultMapContext(); mc.addLayer(sds.getFeatureSource(),style); // Agora com o contexto criamos um ShapefileRenderer renderer = new ShapefileRenderer(mc); envelope = mc.getLayerBounds(); center = new Coordinate((envelope.getMinX()+envelope.getMaxX())/2, (envelope.getMinY()+envelope.getMaxY())/2); zoom = 1; } public Dimension getMaximumSize()

{ return getPreferredSize(); }

public Dimension getMinimumSize()

{ return getPreferredSize(); }

public Dimension getPreferredSize() { return new Dimension(width,height); }

Outubro/2006

http://www.lac.inpe.br/~rafael.santos

8

Visualização (3 de 5) protected void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D)g; g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setColor(Color.WHITE); g2d.fillRect(0,0,width,height); // Uma AffineTransform que mapeie dados no shapefile com a área para plotagem AffineTransform at = new AffineTransform(); // Calculamos a escala double escala = (Math.min(getWidth()/envelope.getWidth(), getHeight()/envelope.getHeight()) *zoom); // Fazemos a translação para o centro do componente. at.translate (getWidth()/2,getHeight()/2); // Mudamos a escala vertical para corrigir a orientação. at.scale(escala,-escala); // Fazemos a translação para o centro da geometria. at.translate(-center.x,-center.y); // Pintamos a geometria no componente. renderer.paint(g2d,getBounds(),at); } }

Outubro/2006

http://www.lac.inpe.br/~rafael.santos

9

Visualização (4 de 5) package basic; import import import import

java.io.*; java.net.URL; javax.swing.JFrame; org.geotools.data.shapefile.ShapefileDataStore;

public class DisplayShapefile extends JFrame { public DisplayShapefile(URL s) throws IOException { super("Shapefile"); ShapefileDataStore data = new ShapefileDataStore(s); ShapefileComponent sc = new ShapefileComponent(data); getContentPane().add(sc); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); setVisible(true); }

Outubro/2006

http://www.lac.inpe.br/~rafael.santos

10

Visualização (5 de 5) public static void main(String[] args) throws IOException { // Onde estão nossos shapefiles? String baseDir = "/home/rafael/Java/Geo/kernelestimator/WebContent/Shapefiles/"; // Criamos uma URL com o shapefile que nos interessa. URL s = new File(baseDir+"Brasil/55mu2500gc.shp").toURL(); // Criamos a GUI para mostrar este Shapefile como um componente. new DisplayShapefile(s); } }

Outubro/2006

http://www.lac.inpe.br/~rafael.santos

11

Problemas ●



O projeto é relativamente maduro, muitos colaboradores  ativos. Versões atuais ainda de transição. – –



A documentação das APIs não está disponível no momento! –



2.2 sugerida para novos projetos, 2.3 em preparo. Exemplos e tutoriais podem não ser boas referências...

Para versão 2.2.1, arquivo com JavaDocs está corrompido.

Documentação sobre modelos faz muita referência a  documentos do OGC. –

Dificuldades para os “não­iniciados”.

Outubro/2006

http://www.lac.inpe.br/~rafael.santos

12