/* * GeoTools - The Open Source Java GIS Tookit * http://geotools.org * * (C) 2006-2008, Open Source Geospatial Foundation (OSGeo) * * This file is hereby placed into the Public Domain. This means anyone is * free to do whatever they wish with this file. Use it well and enjoy! */ package org.geotools.demo.example; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; import org.geotools.data.DataStore; import org.geotools.data.DataStoreFinder; import org.geotools.data.DefaultQuery; import org.geotools.data.DefaultTransaction; import org.geotools.data.FeatureSource; import org.geotools.data.FeatureStore; import org.geotools.data.Query; import org.geotools.data.Transaction; import org.geotools.factory.CommonFactoryFinder; import org.geotools.factory.GeoTools; import org.geotools.feature.FeatureCollection; import org.geotools.geometry.jts.JTS; import org.geotools.geometry.jts.ReferencedEnvelope; import org.opengis.feature.Feature; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; import org.opengis.filter.Filter; import org.opengis.filter.FilterFactory; import org.opengis.filter.FilterFactory2; import org.opengis.filter.identity.Identifier; import org.opengis.filter.spatial.Intersects; import com.vividsolutions.jts.geom.Envelope; public class WFSExample { /** * Before running this application please install and start geoserver on your local machine. * @param args */ public static void main( String[] args ){ String getCapabilities = "http://localhost:8080/geoserver/wfs?service=WFS&request=GetCapabilities"; if( args.length != 0 ){ getCapabilities = args[0]; } try { supressInfo(); dataAccess( getCapabilities ); } catch (Exception e) { e.printStackTrace(); } } public static void supressInfo(){ org.geotools.util.logging.Logging.getLogger("org.geotools.gml").setLevel( Level.SEVERE ); org.geotools.util.logging.Logging.getLogger("net.refractions.xml").setLevel( Level.SEVERE); } public static void dataAccess( String getCapabilities ) throws Exception { // Step 1 - connection parameters // Map connectionParameters = new HashMap(); connectionParameters.put("WFSDataStoreFactory:GET_CAPABILITIES_URL", getCapabilities ); // Step 2 - connection DataStore data = DataStoreFinder.getDataStore( connectionParameters ); // Step 3 - discouvery String typeNames[] = data.getTypeNames(); String typeName = typeNames[0]; SimpleFeatureType schema = data.getSchema( typeName ); System.out.println( "Schema Attributes:"+schema.getAttributeCount() ); // Step 4 - target FeatureSource<SimpleFeatureType, SimpleFeature> source = data.getFeatureSource( typeName ); System.out.println( "Metadata Bounds:"+ source.getBounds() ); // Step 5 - query String geomName = schema.getGeometryDescriptor().getLocalName(); Envelope bbox = new Envelope( -100.0, -70, 25, 40 ); FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2( GeoTools.getDefaultHints() ); Object polygon = JTS.toGeometry( bbox ); Intersects filter = ff.intersects( ff.property( geomName ), ff.literal( polygon ) ); Query query = new DefaultQuery( typeName, filter, new String[]{ geomName } ); FeatureCollection<SimpleFeatureType, SimpleFeature> features = source.getFeatures( query ); ReferencedEnvelope bounds = new ReferencedEnvelope(); Iterator<SimpleFeature> iterator = features.iterator(); try { while( iterator.hasNext() ){ Feature feature = (Feature) iterator.next(); bounds.include( feature.getBounds() ); } System.out.println( "Calculated Bounds:"+ bounds ); } finally { features.close( iterator ); } } public static void dataUpdate( String getCapabilities ) throws Exception { // Step 1 - connection parameters // Map connectionParameters = new HashMap(); connectionParameters.put("WFSDataStoreFactory:GET_CAPABILITIES_URL", getCapabilities ); // Step 2 - connection DataStore data = DataStoreFinder.getDataStore( connectionParameters ); // Step 3 - discouvery String typeNames[] = data.getTypeNames(); String typeName = typeNames[0]; SimpleFeatureType schema = data.getSchema( typeName ); System.out.println( "Schema Attributes:"+schema.getAttributeCount() ); // Step 4 - target FeatureSource<SimpleFeatureType, SimpleFeature> source = data.getFeatureSource( typeName ); System.out.println( "Metadata Bounds:"+ source.getBounds() ); // Step 5 - query FilterFactory ff = CommonFactoryFinder.getFilterFactory( GeoTools.getDefaultHints() ); DefaultQuery query = new DefaultQuery( typeName, Filter.INCLUDE ); query.setMaxFeatures(2); FeatureCollection<SimpleFeatureType, SimpleFeature> features = source.getFeatures( query ); String fid = null; Iterator<SimpleFeature> iterator = features.iterator(); try { while( iterator.hasNext() ){ SimpleFeature feature = (SimpleFeature) iterator.next(); fid = feature.getID(); } } finally { features.close( iterator ); } // step 6 modify Transaction t = new DefaultTransaction(); FeatureStore<SimpleFeatureType, SimpleFeature> store = (FeatureStore<SimpleFeatureType, SimpleFeature>) source; store.setTransaction( t ); Set<Identifier> ids = new HashSet<Identifier>(); ids.add( ff.featureId(fid) ); Filter filter = ff.id( ids ); try { store.removeFeatures( filter ); } finally { t.rollback(); } } }