¡Descarga Eclipse y geotools inegi y más Apuntes en PDF de Informática solo en Docsity!
Resumen Eclipse con GEOTOOLS
- Tips de instalación correcta................................................................................................................ Contenido
- Abrir un archivo shape.shp................................................................................................................
- Crear archivo. Shp a partir de un csv..................................................................................................
- Como administrar archivos de datos................................................................................................
- Como llenar una tabla con información...........................................................................................
- Manejo de imágenes........................................................................................................................
- Creando estilos a mano....................................................................................................................
- Fuentes:...........................................................................................................................................
Tips de instalación correcta.
Todos los proyectos que se realizan con la paquetería geotools tienen que realizarse con
M2Eclipse plugin, por lo cual presento los pasos para crear proyectos los cuales sean
compatibles con los plugin.
1. Archivo> Nuevo> Otro en la barra de menú
2. Seleccione el asistente Maven> Proyecto Maven y presione Siguiente para
abrir el asistente del Proyecto New Maven
3. Los valores predeterminados de la página del proyecto New Maven están
bien, presione Siguiente
4. El valor predeterminado de maven-archtype-quickstart está bien,
presione Siguiente
6. Presione Finalizar para crear el nuevo proyecto.
Todos los proyectos en los que se usa geotools y usando maven usan paqueterías
las cuales debemos de instanciar o direccionar un repositorio donde vamos a
encontrar las importaciones y las configuraciones, esto se hace a través de un
archivo xml que se maneja interno al proyecto que se desarrolla.
A continuación muestro como configurar el archivo de formato xml el cual se
encarga de cargar las configuraciones necesarias para crear el proyecto.
1. Abra pom.xml en su nuevo proyecto. Puede ver parte de la información que
ingresamos anteriormente.
2. Este editor le permite describir todo tipo de cosas; En aras del tiempo, vamos
a omitir la larga explicación y le pediremos que haga clic en
la pestaña pom.xml.
3. Para hacer uso de GeoTools vamos a agregar tres cosas a este archivo
pom.xml.
4. En la parte superior después de moduleVersion agregue un elemento
de propiedades que defina la versión de GeoTools que queremos usar (2.7.
para este ejemplo).
- <project.build.sourceEncoding> UTF-8 </project.build.sourceEncoding>
- <geotools.version> 2.7-M2 </geotools.version>
9. Vamos a agregar una dependencia a los tarros gt-main y gt-swing
de GeoTools. Tenga en cuenta que estamos haciendo uso de
geotools.version definida anteriormente.
junit junit 3.8.1 test org.geotools gt-shapefile
Si las dependencias no se actualizan automáticamente, utilice Proyecto ‣
Limpiar
Después de configurar esto podremos iniciar en la creación y ejecución de proyectos
con geotools y maven en el entorno de desarrollo eclipse.
Como se debería de ser el geootools ya incorpora muchas características
prediseñadas las cuales nos permiten crear aplicaciones muy fácilmente ya incluyen
controles para manejar la información geográfica de manera sencilla.
Códigos sencillos para crear aplicaciones.
Abrir un archivo shape.shp
Link al tutorial completo: https://docs.geotools.org/stable/tutorials/quickstart/eclipse.html
// muestra un diálogo de selección de archivo de almacén de datos para shapefiles File file = JFileDataStoreChooser. showOpenFile ( "shp" , nulo ); si ( archivo == nulo ) { retorno ; } Tienda FileDataStore = FileDataStoreFinder. getDataStore ( archivo ); FeatureSource de SimpleFeatureSource = tienda. getFeatureSource (); // Cree un contexto de mapa y agregue nuestro shapefile MapContext map = new DefaultMapContext (); mapa. setTitle ( " Inicio rápido" ); mapa. addLayer ( featureSource , nulo ); // Ahora muestra el mapa JMapFrame. showMap ( mapa );
Con solo ese código se puede hacer una ventana para abrir archivos y una interfaz
para representar información cartográfica con herramientas sencillas como zoom
mas, menos y selección.
Algo que resulta interesante es crear los mismos archivos shp a partir de archivos
csv, esto también lo explican cómo hacerlo.
Crear archivo. Shp a partir de un csv
Link al tutorial completo: https://docs.geotools.org/stable/tutorials/feature/csv2shp.html
Primero tenemos que crear una aplicación que nos permita abrir un archivo csv con
todos los datos en el siguiente formato:
LAT, LON, CITY, NUMBER
46.066667, 11.116667, Trento, 140
44.9441, -93.0852, San Pablo, 125
13.752222, 100.493889, Bangkok, 150
45.420833, -75.69, Ottawa, 200
44.9801, -93.251867, Minneapolis, 350
46.519833, 6.6335, Lausana, 560
48.428611, -123.365556, Victoria, 721
-33.925278, 18.423889, Ciudad del Cabo, 550
-33.859972, 151.211111, Sídney, 436
Con el siguiente código
public class Csv2Shape {
public static void main(String[] args) throws Exception {
File file = JFileDataStoreChooser.showOpenFile("csv", null );
if (file == null ) {
return ;
featureBuilder.add(number);
SimpleFeature feature =
featureBuilder.buildFeature( null );
collection.add(feature);
} finally {
reader.close();
Y después de leer y acomodar los datos se transforma en un archivo shp de csv
con el siguiente código acorde a la estructura.
* Get an output file name and create the new shapefile
File newFile = getNewShapeFile(file);
ShapefileDataStoreFactory dataStoreFactory = new
ShapefileDataStoreFactory();
Map<String, Serializable> params = new HashMap<String,
Serializable>();
params.put("url", newFile.toURI().toURL());
params.put("create spatial index", Boolean.TRUE);
ShapefileDataStore newDataStore = (ShapefileDataStore)
dataStoreFactory.createNewDataStore(params);
newDataStore.createSchema(TYPE);
* You can comment out this line if you are using the
createFeatureType method (at end of
* class file) rather than DataUtilities.createType
newDataStore.forceSchemaCRS(DefaultGeographicCRS.WGS84);
* Write the features to the shapefile
Transaction transaction = new DefaultTransaction("create");
String typeName = newDataStore.getTypeNames()[ 0 ];
SimpleFeatureSource featureSource =
newDataStore.getFeatureSource(typeName);
if (featureSource instanceof SimpleFeatureStore) {
SimpleFeatureStore featureStore = (SimpleFeatureStore)
featureSource;
featureStore.setTransaction(transaction);
try {
featureStore.addFeatures(collection);
transaction.commit();
} catch (Exception problem) {
problem.printStackTrace();
transaction.rollback();
} finally {
transaction.close();
System.exit( 0 ); // success!
} else {
System.out.println(typeName + " does not support read/write
access");
System.exit( 1 );
Y con este código seleccionamos la ubicación del archivo creado en formato shp a
partir de un csv.
* Prompt the user for the name and path to use for the output
shapefile
* @param csvFile
* the input csv file used to create a default shapefile
name
* @return name and path for the shapefile as a new File object
private static File getNewShapeFile(File csvFile) {
String path = csvFile.getAbsolutePath();
String newPath = path.substring( 0 , path.length() - 4 ) + ".shp";
JFileDataStoreChooser chooser = new JFileDataStoreChooser("shp");
chooser.setDialogTitle("Save shapefile");
chooser.setSelectedFile( new File(newPath));
int returnVal = chooser.showSaveDialog( null );
if (returnVal != JFileDataStoreChooser.APPROVE_OPTION) {
// the user cancelled the dialog
System.exit( 0 );
File newFile = chooser.getSelectedFile();
if (newFile.equals(csvFile)) {
System.out.println("Error: cannot replace " + csvFile);
System.exit( 0 );
return newFile;
1. Las acciones del menú Archivo llaman a este método para conectarse.
2. private void connect(DataStoreFactorySpi format) throws Exception {
3. JDataStoreWizard wizard = new JDataStoreWizard(format);
4. int result = wizard.showModalDialog();
5. if (result == JWizard.FINISH) {
6. Map<String, Object> connectionParameters =
wizard.getConnectionParameters();
7. dataStore =
DataStoreFinder.getDataStore(connectionParameters);
8. if (dataStore == null ) {
9. JOptionPane.showMessageDialog( null , "Could not
connect - check parameters");
11. updateUI();
2. Método auxiliar para actualizar el cuadro combinado utilizado para elegir un tipo
de función:
private void updateUI() throws Exception {
ComboBoxModel cbm = new
DefaultComboBoxModel(dataStore.getTypeNames());
featureTypeCBox.setModel(cbm);
table.setModel( new DefaultTableModel( 5 , 5 ));
Y con esto obtendremos una jTable con la información parecido al siguiente:
Manejo de imágenes.
Link al tutorial completo: https://docs.geotools.org/stable/tutorials/raster/image.html
Se pueden manipular imágenes de manera que se pueda usar una como fondo y
un shp como mapa para interpretar mejor los datos, un ejemplo que se nos
presenta es manejar por capas el visor de shp y raster.
Un ejemplo es poner una imagen arriba de otra, esto se hace mediante el siguiente
procedimiento.
Usaremos JParameterListWizard , para solicitar el archivo ráster y el shapefile que
se mostrará sobre él:
* Solicita al usuario un archivo GeoTIFF y un Shapefile y los pasa al método displayLayers * / private void getLayersAndDisplay () lanza Exception { List < Parameter <? >> list = new ArrayList < Parameter <? >> ( ); lista. añadir ( nuevo parámetro < File > ( "imagen" , del archivo. clase , "Imagen" , "GeoTiff o World + Imagen de pantalla como mapa base" , nuevo KVP ( Parámetro. EXT , "tif" , Parámetro. EXT , "jpg" ))); lista. añadir ( nuevo parámetro < File > ( "forma" , Archivo. clase , "Shapefile" , "Archivo shape contenidos a la pantalla" , nueva KVP ( Parámetro
. EXT , "SHP" ))); JParameterListWizard wizard = new JParameterListWizard ( "Laboratorio de imágenes" , "Complete las siguientes capas" , lista ); int finish = asistente. showModalDialog (); if ( terminar! = JWizard. FINISH ) { System. salir ( 0 ); } Archivo imageFile = ( Archivo ) asistente. getConnectionParameters (). get ( "imagen" ); Presentar SHAPEFILE = ( Archivo ) asistente. getConnectionParameters (). get ( "forma" ); displayLayers ( imageFile , shapeFile ); }
Para mostrar el mapa en pantalla creamos un MapContext , le agregamos la
imagen y el shapefile, y lo pasamos a un JMapFrame.
_* obtener un estilo. Este método determina qué tipo de geometría de características
- tenemos en el shapefile y luego lo delega en un método de creación de estilo * apropiado. * /_ estilo privado createStyle2 ( FeatureSource featureSource ) { esquema SimpleFeatureType = ( SimpleFeatureType ) featureSource. getSchema (); Clase geomType = esquema. getGeometryDescriptor (). getType (). getBinding (); if ( Polygon. class. isAssignableFrom ( geomType ) || MultiPolygon. class. isAssignableFrom ( geomType )) { return createPolygonStyle (); } else if ( LineString. class. isAssignableFrom ( geomType ) || MultiLineString. class. isAssignableFrom ( geomType )) { return createLineStyle (); } else { return createPointStyle (); } } _/ **
- Crea un estilo para dibujar_ entidades _poligonales con un contorno azul delgado y * un relleno cian
- /_ estilo privado createPolygonStyle () { // crea un trazo de contorno parcialmente opaco Stroke stroke = styleFactory. createStroke ( filterFactory. literal ( Color. AZUL ), filterFactory. literal ( 1 ), filterFactory. literal ( 0.5 )); // crea un relleno opaco parcial Fill fill = styleFactory. createFill ( filterFactory. literal ( Color. CYAN ), filterFactory. literal ( 0.5 )); _/ *
- Estableciendo el argumento geometryPropertyName arg en señales nulas que queremos
- dibujar la geometría predeterminada de las características
- /_ PolygonSymbolizer sym = styleFactory. createPolygonSymbolizer ( trazo , relleno , nulo ); Regla regla = styleFactory. createRule (); regla. simbolizadores (). agregar ( sym ); FeatureTypeStyle fts = styleFactory. createFeatureTypeStyle ( nueva regla [] { regla }); Estilo estilo = styleFactory. createStyle (); estilo. featureTypeStyles (). agregar ( pies ); estilo de retorno ; } _/ **
- Crea un estilo para dibujar_ entidades de línea como líneas azules delgadas * /
estilo privado createLineStyle () { Stroke stroke = styleFactory. createStroke ( filterFactory. literal ( Color. AZUL ), filterFactory. literal ( 1 )); _/ *
- Estableciendo el argumento geometryPropertyName arg en señales nulas que queremos
- dibujar la geometría predeterminada de las características
- /_ LineSymbolizer sym = styleFactory. createLineSymbolizer ( trazo , nulo ); Regla regla = styleFactory. createRule (); regla. simbolizadores (). agregar ( sym ); FeatureTypeStyle fts = styleFactory. createFeatureTypeStyle ( nueva regla [] { regla }); Estilo estilo = styleFactory. createStyle (); estilo. featureTypeStyles (). agregar ( pies ); estilo de retorno ; } _/ **
- Crea un estilo para dibujar_ entidades _puntuales como círculos con contornos azules * y relleno cian
- /_ estilo privado createPointStyle () { Graphic gr = styleFactory. createDefaultGraphic (); Marca marca = styleFactory. getCircleMark (); marca. setStroke ( styleFactory. createStroke ( filterFactory. literal ( Color. AZUL ), filterFactory. literal ( 1 ))); marca. setFill ( styleFactory. createFill ( filterFactory. literal ( Color. CYAN ))); gr. graphicalSymbols (). claro (); gr. graphicalSymbols (). agregar ( marca ); gr. setSize ( filterFactory. literal ( 5 )); _/ *
- Estableciendo el argumento geometryPropertyName arg a señales nulas que queremos
- dibujar la geometría predeterminada de las características
- /_ PointSymbolizer sym = styleFactory. createPointSymbolizer ( gr , nulo ); Regla regla = styleFactory. createRule (); regla. simbolizadores (). agregar ( sym ); FeatureTypeStyle fts = styleFactory. createFeatureTypeStyle ( nueva regla [] { regla }); Estilo estilo = styleFactory. createStyle (); estilo. featureTypeStyles (). agregar ( pies ); estilo de retorno ;