Status of GeoTools
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Status of GeoTools

on

  • 4,957 views

We are pleased to introduce GeoTools 8. This presentation covers the latest and greatest developments in this OSGeo project. ...

We are pleased to introduce GeoTools 8. This presentation covers the latest and greatest developments in this OSGeo project.

GeoTools serves as a foundation for many of the exciting projects you will see here at FOSS4G. From 52N, Geomajas through to the early adopters such as GeoServer and uDig. An understanding of this core OSGeo project is an important piece in being productive in the open source Java GIS community.

With the component is such wide spread use it is important to understand how GeoTools has shifted its directions and goals as a Java library. This background information allow you to make the most of the GeoTools library at a business level. GeoTools offers a range of options for involvement allowing you to take part (even in an less formal capacity), set the direction, and participate in the release process.

Central to this presentation is an update on the new capabilities available in today's GeoTools. Key improvements, extensive new documentation, rendering capabilities and a range of extensions will be covered.

The presentation will include a quick tour of the base classes used to make integration easy and pain free, as show as they are used in the library. We also offer a sneak peek at developments in our unsupported sandbox including side by side comparisons of the gt-swing and gt-swt extensions.

If you are new to GeoTools development this is a great way to see what is available, and if you already know the project attend to keep up to date with the substantial improvements and additional capabilities available in today's GeoTools.

Statistics

Views

Total Views
4,957
Views on SlideShare
4,309
Embed Views
648

Actions

Likes
3
Downloads
100
Comments
0

24 Embeds 648

http://how2map.blogspot.com 503
http://www.how2map.com 44
http://how2map.blogspot.com.au 23
http://how2map.blogspot.de 14
http://how2map.blogspot.in 11
http://how2map.blogspot.it 6
http://how2map.blogspot.co.uk 6
http://how2map.blogspot.fr 5
http://how2map.blogspot.kr 4
http://how2map.blogspot.com.br 4
http://how2map.blogspot.ca 4
http://how2map.blogspot.se 3
http://how2map.blogspot.nl 3
http://how2map.blogspot.co.at 3
http://how2map.blogspot.no 3
http://www.slashdocs.com 2
http://how2map.blogspot.gr 2
http://how2map.blogspot.cz 2
http://www.linkedin.com 1
http://how2map.blogspot.ch 1
http://how2map.blogspot.dk 1
http://translate.googleusercontent.com 1
http://how2map.blogspot.be 1
https://www.linkedin.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

CC Attribution License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • Welcome to GeoTools!\n
  • I am afraid Andrea could not join us today; he has managed to break his ankle (and left me up here all alone).\n
  • I am afraid Andrea could not join us today; he has managed to break his ankle (and left me up here all alone).\n
  • GeoTools *is* the Java GIS Toolkit :-)\n\nWell at least it is happy to trace its roots back to the dawn of the JVM.\n\nGeoTools 1.0  was started at Leeds University by James Macgill and Ian Turton in 1996.\n\nThe codebase was reset in 2003 with an influx of code from the SEAGIS project and a project management committee setup.\n\nWe have had a steady series of releases since then:\n\nThe Geotools 1.0 Lite Project (1996 - 2003)\nGeotools 2.0 Project (2002 to Geotools 2.1 (2004 to 2005)\n2004)\nGeotools 2.2 (2005)\nGeoTools 2.3 (2005-2007)\nGeoTools 2.4 (2006-2007)\nGeoTools 2.5 (2007)\nGeoTools 2.6 (2008)\nGeoTools 2.7 (2009 - Present) GeoTools 8 (unreleased) \n
  • GeoTools today is well represented with ten organisations actively participating.\n\nMore importantly you can see a number of names marked with "?" - these individuals are new to GeoTools and are often working on RnD activities in our "unsupported" sandbox.\n
  • This graph shows a very active project with many issues being reported; and the developers doing the best to keep up.\n\nYou can really notice a few spikes as development teams try out the library from armed with a different application or dataset in mind.\n\nClick on the link to see an update of the chart provided (additional charts are available if you login to the issue tracker).\n
  • Documentation is the key feature this year!\n\nReally :-)\n
  • This really is the "GeoTools 2" project finally taking over and being the "GeoTools" project.\n\nWe have averaged one release ever year or so. Making "Version 8" a clear indication of where the project is at with respect to maturity and stability.\n
  • Documentation is the key feature this year!\n\nReally :-)\n
  • Since 2003 GeoTools has employed a “wiki” to capture user documentation.\n
  • In 2009 we set up our main website using “Sphinx”\nin 2010 Jody ported the tutorials from open office to Sphinx.\nIn 2011 Jody finished the Job.\n
  • In 2009 we set up our main website using “Sphinx”\nin 2010 Jody ported the tutorials from open office to Sphinx.\nIn 2011 Jody finished the Job.\n
  • The wiki was a great way to pass around small java code examples.\n\nDid they compile? Not really. Could you tell when they were written? Or what version of GeoTools they worked on?\n\nOnce again no.\n
  • The wiki was a great way to pass around small java code examples.\n\nDid they compile? Not really.\n\nCould you tell when they were written? Or what version of GeoTools they worked on?\n\nOnce again no.\n
  • The wiki was a great way to pass around small java code examples.\n\nDid they compile? Not really.\n\nCould you tell when they were written? Or what version of GeoTools they worked on?\n\nOnce again no.\n
  • \n
  • This is the origional diagram made for a presentation at FOSS4G 2006 (Done in Viso so nobody could really edit it)\n
  • All diagrams are now done in SVG using Inkscape (so that any developer can update them as needed).\n
  • Class diagrams were uploaded to the wiki using a range of tools. \n\nThis often allowed the class diagrams to fall behind the current state of the library - providing oppertunity for confusion.\n
  • Class diagrams are created using "ObjectAID" directly from the java classes or interfaces involved.\n\nThe diagrams are committed directly into source code and are set to automatically generate the PNG file used in the documentations if they are modified.\n\nThis allows us to give you accurate and up to date diagrams.\n
  • In the past the creation of Tutorials for GeoTools was a bit add-hoc.\n\nBasically when Jody Got a workshop accepted at FOSS4G.\n\nThese would also gradually go out of date. As the versions of Java, Maven and Eclipse used changed over time.\n
  • Tutorials now documented in "sphinx" giving us a chance to splice in live code examples that do not go out fo date.\n\nOrigional done for FOSS4G 2010 their long term stability showed the viability of using Sphinx for GeoTools.\n
  • \n
  • Extensive welcome section\n
  • \n
  • \n
  • \n
  • \n
  • Andrea has been working hard on referencing; as you can see he really believes in this being a developer friendly presentation - with source code examples!\n\nThe key thing about “referencing” information is the rich set of data structures used to mark down what your information should be used; and the helpful way we have isolated you from the internal details (ie Math) using utility classes such as CRS, JTS and ReprojectingFeatureCollection.\n
  • A quick list of some of the traditional projects available to GeoTools developers.\n
  • \n
  • The important part here is to note the number of new entries being added to GeoTools.\n\nItems marked in grey are considered unsupported (often they are an experiment; or represent code that does not have an active maintenance contract).\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • The number of layers you can work with is now “open ended” with the ability to define your own implementation of “Direct Layer”. This class hierarchy is an improvement in that each kind of layer is represented a distinct class.\n
  • \n
  • \n
  • \n
  • \n
  • The ability to define your own symbology and “plug” it into the rendering engine is really being taken advantage of in GeoTools. Here we have a quick example of using a true type font.\n
  • The feature is often used by teams implementing MIL2525B symbology. A popular example from the GeoServer cookbook is the “Slash” shown above.\n
  • All of this is backed by a Java interface so can connect the geotools renderer to any set of symbology you have in your possession; or create a symbol dynamically on the fly by accessing feature attributes.\n
  • Another feature that is starting to gain traction is the use of functions to transform a geometry prior to display. In this example the technique is used to create arrow heads.\n\n
  • Another example used to create a drop shadow effect; by offsetting the geometry.\n
  • You can create a function quickly as shown above; you need to “Register” it in META-INF/services by adding the name of your class to the appropriate text file.\n
  • \n
  • \n
  • \n
  • If you would like to read more try the FAQ http://docs.geotools.org/latest/userguide/library/xml/faq.html\n
  • \n
  • \n
  • \n
  • \n
  • http://how2map.blogspot.com/2011/04/classifiers-and-colorbrewer.html\n
  • \n
  • \n
  • Check out the GeoTools docs for a tutorial coming soon!\n
  • \n
  • We mentioned this one earlier!\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Part of keeping GeoTools in fighting shape is cutting off the cruft.\n\nWe have been diligent about allowing full deprecation cycle allowing projects to transition to the JDBC "next generation" datastore based on a much cleaner design.\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n

Status of GeoTools Presentation Transcript

  • 1. Status of GeoTools
  • 2. 2About your PresentersAndrea Aime Jody Garnett(PMC) (PMC)GeoSolutions LISAsoft GeoServer/GeoTools core A great system integration developers, raster data company helping our management, map rendering, customers make effective use spatial data processing of open source spatial.
  • 3. 2About your PresentersAndrea Aime Jody Garnett(PMC) (PMC)GeoSolutions LISAsoft GeoServer/GeoTools core A great system integration developers, raster data company helping our management, map rendering, customers make effective use spatial data processing of open source spatial.
  • 4. 3About your PresentersJustin Deolivera Jody Garnett(PMC) (PMC)OpenGeo LISAsoft Bringing the best open source A great system integration geospatial software to company helping our organisations around the customers make effective use world. of open source spatial.
  • 5. 4GeoTools - the Java GIS Toolkit
  • 6. 5Development Community261 Andrea Aime (GeoServer, JAITools) - GeoSolutions261 Jody Garnett (GeoTools, uDig) - Lisasoft167 Simone Giannecchini (GeoServer, JAITools) - GeoSolutions123 Justin Deoliveira (GeoServer, GeoScript) - OpenGeo114 Michael Bedward (JAITools) - Australia 66 danieleromagnoli (GeoServer) - GeoSolutions 54 bencaradocdavies - CSIRO 51 NielsCharlier - CSIRO 38 sbrunner ? 2010 Stats tracking commits 32 moovida (uDig, JGrass) - Hydrologis 28 ang05a - CSIRO 25 groldan - (GeoServer) - OpenGeo 17 mpazos - Axios 30 committers 15 victortey - CSIRO 13 mcr - ? 10 organisations 9 kengu - Norwegian Uni of Tech & Science 8 ischneider - OpenGeo 7 ianturton - University of Leeds Healthy project with a broad base of support 7 jesseeichar - CampToCamp 7 lmoran - Consultant actively improving GeoTools 6 afabiani - GeoSolutions 6 rbraam - ? 4 xiangtanlin - ? 3 LeeBreisacher - ? 3 lendholt - ? 2 alfonx (AtlasStyler) - WikiSquare 2 pieterdg - ? 2 tdipisa - GeoSolutions 1 atrofast - Ingres 1 mleslie - Lisasoft
  • 7. 6Stats geotools-devel: 386 members total geotools-gt2-users: 889 members totalCreated vs resolved tickets (click here for update )
  • 8. Strategic Direction
  • 9. 8GeoTools 8What is in a Name?- sed/GeoTools 2.8.0/GeoTools 8.0/What does this mean?- not very much - business as usual- confidence in our community - continue our commitment to stability - evolution handled with continuous small changes
  • 10. Documentation(what I did last summer)
  • 11. 10User Guide - Before
  • 12. 11User Guide - After
  • 13. 11User Guide - After
  • 14. 12 Code Examples - Before (Wiki)private synchronized static FeatureSourcebuildMemoryFeatureSource(FeatureCollection coll, String typename,FeatureType currentFeatureType, AttributeType newTypes[]){ FeatureType ftState=null; MemoryDataStore MStore=null; try { MStore = new MemoryDataStore(); //---- current attributes AttributeType currentTypes[] = currentFeatureType.getAttributeTypes(); //---- new array of attributes = current array+ new attributes Compile? AttributeType typesNew[] = new What Version?AttributeType[currentTypes.length+newTypes.length]; When? for(int i=0;i<currentTypes.length;i++){ typesNew[i] = currentTypes[i]; } for(int i=0;i<newTypes.length;i++){ All very good } typesNew[currentTypes.length+i] = newTypes[i]; questions with no clear answer. ftState = FeatureTypeFactory.newFeatureType(typesNew, typename); MStore.createSchema(ftState); Iterator iterator = coll.iterator(); FeatureCollection newColl = FeatureCollections.newCollection(); Feature feature, newFeature; Object[] objs; try { for( int count=0; iterator.hasNext(); count++) { feature = (Feature) iterator.next();
  • 15. 13 Code Examples - After (Sphinx)private synchronized static FeatureSourcebuildMemoryFeatureSource(FeatureCollection coll, String typename,FeatureType currentFeatureType, AttributeType newTypes[]){ FeatureType ftState=null; MemoryDataStore MStore=null; try { MStore = new MemoryDataStore(); //---- current attributes AttributeType currentTypes[] = currentFeatureType.getAttributeTypes(); //---- new array of attributes = current array+ new attributes AttributeType typesNew[] = new Pulled Live fromAttributeType[currentTypes.length+newTypes.length]; Source! for(int i=0;i<currentTypes.length;i++){ typesNew[i] = currentTypes[i]; } GeoTools Version at for(int i=0;i<newTypes.length;i++){ typesNew[currentTypes.length+i] = newTypes[i]; the Top of the Page! } ftState = FeatureTypeFactory.newFeatureType(typesNew, typename); MStore.createSchema(ftState); Iterator iterator = coll.iterator(); FeatureCollection newColl = FeatureCollections.newCollection(); Feature feature, newFeature; Object[] objs; try { for( int count=0; iterator.hasNext(); count++) { feature = (Feature) iterator.next();
  • 16. 13 Code Examples - After (Sphinx)SimpleFeatureSource alter(SimpleFeatureCollection collection, String typename,        SimpleFeatureType featureType, final List<AttributeDescriptor> newTypes) {        try {                // Create target schema        SimpleFeatureTypeBuilder buildType = new SimpleFeatureTypeBuilder();        buildType.init(featureType);        buildType.setName(typename);        buildType.addAll(newTypes);                final SimpleFeatureType schema = buildType.buildFeatureType();        // Configure memory datastore        final MemoryDataStore memory = new MemoryDataStore(); Pulled Live from        memory.createSchema(schema);         Source!        collection.accepts(new FeatureVisitor() {            public void visit(Feature feature) {                SimpleFeatureBuilder builder = new SimpleFeatureBuilder(schema);                 GeoTools Version at                builder.init((SimpleFeature) feature); the Top of the Page!                for (AttributeDescriptor descriptor : newTypes) {                    builder.add(DataUtilities.defaultValue(descriptor));                }                                SimpleFeature newFeature = builder.buildFeature(feature.getIdentifier().getID());                memory.addFeature(newFeature);            }        }, null);                return memory.getFeatureSource(typename);            } catch (Exception e) {        e.printStackTrace();    }
  • 17. 14Code Examples - Example Used for both Java code examples and also configuration files such as maven pom.xml.
  • 18. 15Diagrams - Before (Visio)
  • 19. 16Diagrams - After (Inkscape)
  • 20. 17Class Diagrams - Before
  • 21. 18Class Diagrams - After (Object Aid)
  • 22. Tutorials - Before
  • 23. Tutorials - After
  • 24. Advanced TutorialsFunction Finally a nice quick guide to how to create a function!AbstractDataStore Tutorial - Property DataStore The classic updated for GeoTools 8.ContentDataStore Tutorial - CSVDataStore The new kid on the block; leaner; meaner and ready.Welcome Introduction for different developer communities.Update Have not used GeoTools in a while? Guide to updating.
  • 25. 22Welcome Geomajas
  • 26. 23Welcome GeoServer
  • 27. 24Welcome uDig
  • 28. 25Documentation HighlightsDetails- 291 “Pages”- longest page is 36 pages printed out on paper- Over 100,000 words- Written from Feb through to May- Accounts for every page of the wikiNew features- Extensive FAQ- whole project javadocs- module by module reference- plugins organised by module
  • 29. Referencing(do you know where your data is?)
  • 30. 27Referencing• Ellipsoids, datum, map projections• Embedded EPSG database, over 5000 supported codes (gt-epsg-hsql module)• Reprojection utilitiesGeometry g = ...;CoordinateReferenceSystem wgs84 = CRS.decode("EPSG:4326");                CoordinateReferenceSystem utm32n = CRS.decode("EPSG:32632");Geometry gtx = JTS.transform(g);...SimpleFetureCollection fc = featureSource.getFeature();SimpleFeatureCollection fcTx =                 new ReprojectingFeatureCollection(fc, utm32n);
  • 31. 28ProjectionsOld projections New Projections Aitoff Albers Equal A. Mollweide CassiniSoldner Cylindrical Equidist. Robinson Krovak Lambert Conf. Mercator Oblique Mercator Eckert IV Orthogonal Polyconic Winkel Tripel Stereographic Transverse Mercator Equidistant conic
  • 32. Vector PluginsBoth direction and magnitude!
  • 33. 30 Vector Data Sources• Application schema* • JDBC• ArcSDE o DB2• Aggregating * o H2 spatial• CouchDb * o MySQL• CSV * o Postgis• DXF * o Oracle• Excel o SQL Server• Edigeo o Spatialite *• PreGeneralized o Teradata *• SimpleFeatureService *• Shapefile (directory of)• WFS name* = new entry name = “unsupported”
  • 34. 31JDBC DataStore "NG"• JDBC stores: – common base – over 200 ready to use tests, just prepare the test data and run – Parametric SQL views: define a new data source as a raw query select ST_Union(the_geom) as geom from countries where REGION = %region% – Extensions for native joins
  • 35. 32Application schema – Complex feature support – Recent development by CSIRO – Feature chaining, polymorphism – Better performance (native DBMS joins), memory use – Usable as vector data source, GML encoding, rendering
  • 36. Raster Formats pixel power
  • 37. 34 Raster Data Sources• ArcGrid • imageio-ext based• ArcSDE o AIG• GeoTiff o DTED• GRASS * o ECW• GTopo30 o EnviHdr• Image Mosaic o ErdasImg• Image Mosaic JDBC * o EsriHdr• Image Pyramid o JP2 (ECW, MrSid)• Image + World file o MrSID• JP2 direct Kakadu o NITF*• Matlab o RPFTOC• Non georef. Image collection * name * = new entry name = unsupported land
  • 38. 35Non geo-referenced data
  • 39. 36Image mosaic
  • 40. RenderingGotta see it to believe it
  • 41. 38Rendering
  • 42. 38Rendering
  • 43. 39 Layers• FeatureLayer: any vector + Style (shapefile, spatial db, WFS, ...)• GridCoverageLayer: in memory raster grid• GridReaderLayer: dynamic raster read from disk (leverage overviews and tiling)• WMSLayer: get maps from a WMS server• DirectLayer: (new feature!) roll your own custom paint method
  • 44. 40StyleBuilder• Style API is inspired by SLD 1.0 and SE 1.1: – a style is a complex, deep object graph• StyleBuilder provides a set of hierarchical builders• Build a style easily, just pick the portion you needStyle style = new StrokeBuilder().color(Color.BLUE) .width(3).dashArray(5, 2) .buildStyle();
  • 45. 40StyleBuilder• Style API is inspired by SLD 1.0 and SE 1.1: – a style is a complex, deep object graph• StyleBuilder provides a set of hierarchical builders• Build a style easily, just pick the portion you needStyle style = new StrokeBuilder().color(Color.BLUE) .width(3).dashArray(5, 2) .buildStyle();
  • 46. 41StyleBuilder• StyleBuilder allows you to freely mix CQL expressions• Provides “literate” methods allowing you to define your style using your IDE autocompletefts = new FeatureTypeStyleBuilder();fts.rule().filter("pop < 200000") .polygon().fill().colorHex("#66FF66");fts.rule().filter("pop between 200000 and 500000") .polygon().fill().colorHex("#33CC33");fts.rule().filter("pop > 500000") .polygon().fill().colorHex("#009900");Style style = fts.buildStyle();
  • 47. 41StyleBuilder• StyleBuilder allows you to freely mix CQL expressions• Provides “literate” methods allowing you to define your style using your IDE autocompletefts = new FeatureTypeStyleBuilder();fts.rule().filter("pop < 200000") .polygon().fill().colorHex("#66FF66");fts.rule().filter("pop between 200000 and 500000") .polygon().fill().colorHex("#33CC33");fts.rule().filter("pop > 500000") .polygon().fill().colorHex("#009900");Style style = fts.buildStyle();
  • 48. 42Showing the Map Part 1• To start we get the data and create a StyleFileDataStore store = FileDataStoreFinder.getDataStore(file);SimpleFeatureSource featureSource = store.getFeatureSource();Style style = SLD.createSimpleStyle(featureSource.getSchema());
  • 49. 43Showing the Map Part 2• Create Map and use JMapFrame to displayMapContent map = new MapContent();map.setTitle("Quickstart");Layer layer = new FeatureLayer(featureSource, style);map.addLayer(layer);JMapFrame.showMap(map);
  • 50. 43Showing the Map Part 2• Create Map and use JMapFrame to displayMapContent map = new MapContent();map.setTitle("Quickstart");Layer layer = new FeatureLayer(featureSource, style);map.addLayer(layer);JMapFrame.showMap(map);
  • 51. 44Pluggable Mark Factory TTF<Mark> <WellKnownName>ttf://Wingdings#0xF054</WellKnownName> <Fill> <CssParameter name="fill">#000088</CssParameter> </Fill></Mark>
  • 52. 44Pluggable Mark Factory TTF<Mark> <WellKnownName>ttf://Wingdings#0xF054</WellKnownName> <Fill> <CssParameter name="fill">#000088</CssParameter> </Fill></Mark>
  • 53. 45Pluggable Mark Factory Slash<Fill>  <GraphicFill>  <Graphic>    <Mark>      <WellKnownName>shape://slash</WellKnownName>      <Stroke>        <CssParameter name="stroke">0xAAAAAA</CssParameter>      </Stroke>    </Mark>    <Size>16</Size>  </Graphic></GraphicFill></Fill>     
  • 54. 45Pluggable Mark Factory Slash<Fill>  <GraphicFill>  <Graphic>    <Mark>      <WellKnownName>shape://slash</WellKnownName>      <Stroke>        <CssParameter name="stroke">0xAAAAAA</CssParameter>      </Stroke>    </Mark>    <Size>16</Size>  </Graphic></GraphicFill></Fill>     
  • 55. 46 Pluggable Mark Factories Interfacepublic interface MarkFactory { public java.awt.Shape getShape( Graphics2D graphics, Expression symbolUrl, Feature feature) throws Exception;} org.geotools.renderer.style.WellKnownMarkFactory org.geotools.renderer.style.TTFMarkFactory org.geotools.renderer.style.ShapeMarkFactoryhttp://docs.geotools.org/latest/userguide/library/render/icon.html
  • 56. 47 Geometry transform Arrow HeadSimilar to SE 1.1 transformations, but open-ended, pluggable, add your owntransformation today!<PointSymbolizer>  <Geometry>     <ogc:Function name="endPoint">                <ogc:PropertyName>the_geom</ogc:PropertyName>     </ogc:Function>  </Geometry>  <Graphic>    <Mark>      <WellKnownName>shape://arrow</WellKnownName>      <Fill/>      <Stroke/>    </Mark>    <Rotation>      <ogc:Function name="endAngle">         <ogc:PropertyName>the_geom</ogc:PropertyName>      </ogc:Function>    </Rotation>  </Graphic></PointSymbolizer>
  • 57. 47 Geometry transform Arrow HeadSimilar to SE 1.1 transformations, but open-ended, pluggable, add your owntransformation today!<PointSymbolizer>  <Geometry>     <ogc:Function name="endPoint">                <ogc:PropertyName>the_geom</ogc:PropertyName>     </ogc:Function>  </Geometry>  <Graphic>    <Mark>      <WellKnownName>shape://arrow</WellKnownName>      <Fill/>      <Stroke/>    </Mark>    <Rotation>      <ogc:Function name="endAngle">         <ogc:PropertyName>the_geom</ogc:PropertyName>      </ogc:Function>    </Rotation>  </Graphic></PointSymbolizer>
  • 58. 48Geometry transform Drop Shadow<Geometry>  <ogc:Function name="offset">       <ogc:PropertyName>the_geom</ogc:PropertyName>    <ogc:Literal>0.00004</ogc:Literal>     <ogc:Literal>‐0.00004</ogc:Literal>  </ogc:Function> <Geometry>
  • 59. 48Geometry transform Drop Shadow<Geometry>  <ogc:Function name="offset">       <ogc:PropertyName>the_geom</ogc:PropertyName>    <ogc:Literal>0.00004</ogc:Literal>     <ogc:Literal>‐0.00004</ogc:Literal>  </ogc:Function> <Geometry>
  • 60. Geometry transform Implementation Based on functions, a pluggable extension pointpublic class FilterFunction_offset extends FunctionExpressionImpl                                   implements GeometryTransformation {...public Object evaluate(Object feature) {        Geometry geom = getExpression(0).evaluate(feature, Geometry.class);        Double offsetX = getExpression(1).evaluate(feature, Double.class);        if(offsetX == null) offsetX = 0d;        Double offsetY = getExpression(2).evaluate(feature, Double.class);        if(offsetY == null) offsetY = 0d;        if (geom != null) {            Geometry offseted = (Geometry) geom.clone();            offseted.apply(               new OffsetOrdinateFilter(offsetX, offsetY));            return offseted;        } else {            return null;        }    }...}
  • 61. Geometry transform Implementation Based on functions, a pluggable extension pointpublic class FilterFunction_offset extends FunctionExpressionImpl                                   implements GeometryTransformation {...public Object evaluate(Object feature) {        Geometry geom = getExpression(0).evaluate(feature, Geometry.class);        Double offsetX = getExpression(1).evaluate(feature, Double.class);        if(offsetX == null) offsetX = 0d;        Double offsetY = getExpression(2).evaluate(feature, Double.class);        if(offsetY == null) offsetY = 0d;        if (geom != null) {            Geometry offseted = (Geometry) geom.clone();            offseted.apply(               new OffsetOrdinateFilter(offsetX, offsetY));            return offseted;        } else {            return null;        }    }...}
  • 62. 50 Rendering Transform Wind Map<FeatureTypeStyle>    <Transformation>     <ogc:Function name="gs:RasterAsPointCollection">       <ogc:Function name="parameter">             <ogc:Literal>data</ogc:Literal>  u v      </ogc:Function>     </ogc:Function> </Transformation> ...Transform data before rendering. Contour extraction, windmaps, geometry clustering. Pluggable, add your function!
  • 63. 50 Rendering Transform Wind Map<FeatureTypeStyle>    <Transformation>     <ogc:Function name="gs:RasterAsPointCollection">       <ogc:Function name="parameter">             <ogc:Literal>data</ogc:Literal>  u v      </ogc:Function>     </ogc:Function> </Transformation> ...Transform data before rendering. Contour extraction, windmaps, geometry clustering. Pluggable, add your function!
  • 64. Rendering Transform Contour Extract<FeatureTypeStyle>   <Transformation>     <ogc:Function name="gs:Contour">       <ogc:Function name="parameter">         <ogc:Literal>data</ogc:Literal>       </ogc:Function>       <ogc:Function name="parameter">         <ogc:Literal>levels</ogc:Literal>         <ogc:Literal>1100</ogc:Literal>         <ogc:Literal>1200</ogc:Literal> ....        <ogc:Literal>1700</ogc:Literal>         <ogc:Literal>1800</ogc:Literal>       </ogc:Function>     </ogc:Function>  </Transformation>
  • 65. Rendering Transform Contour Extract<FeatureTypeStyle>   <Transformation>     <ogc:Function name="gs:Contour">       <ogc:Function name="parameter">         <ogc:Literal>data</ogc:Literal>       </ogc:Function>       <ogc:Function name="parameter">         <ogc:Literal>levels</ogc:Literal>         <ogc:Literal>1100</ogc:Literal>         <ogc:Literal>1200</ogc:Literal> ....        <ogc:Literal>1700</ogc:Literal>         <ogc:Literal>1800</ogc:Literal>       </ogc:Function>     </ogc:Function>  </Transformation>
  • 66. XML(what could be as fun as rendering? not xml)
  • 67. XMLTechnology sax dom encode SupportsGeoTools SAX SAX DOM Filter, GML, SLDGeoTools DOM DOM Filter, GML, SLDGeoTools Transform XML Filter, GML, SLDJAXB SAX DOM n/aXDO SAX DOM XML Filter, GML, SLD, WMS, WFS1.0, XSD(Schema AssistedGeneration 1)GTXML SAX DOM XML Filter, GML, SLD, WMS, WFS1.0, WFS 1.1, WPS, XSD,(Schema Assisted and more...Generation 2)
  • 68. 54Schema Assisted ParsingGeoTools Specific Technology; makes use of the schemainformation to minimise the code you need to write.You teach GeoTools how to “bind” a object once; and it willwork in any schema that uses those objects.
  • 69. 55Schema Assisted EncodingThe same approach is used when encoding objects;basically using the schema as a cheat sheet to sort out whatto emit next.
  • 70. Extensionshigh value functionality built on top of GeoTools
  • 71. 57 BrewerWraps up the ColorBrewer for Java Developers; generatinga normal Style you can use in GeoTools; or export to otherapplications.FeatureTypeStyle style = StyleGenerator.createFeatureTypeStyle(            groups,            ff.propertName(“population”),            colors,            "Generated Style",            schema.getGeometryDescriptor(),            StyleGenerator.ELSEMODE_IGNORE,            0.95,            stroke);
  • 72. 57 BrewerWraps up the ColorBrewer for Java Developers; generatinga normal Style you can use in GeoTools; or export to otherapplications.FeatureTypeStyle style = StyleGenerator.createFeatureTypeStyle(            groups,            ff.propertName(“population”),            colors,            "Generated Style",            schema.getGeometryDescriptor(),            StyleGenerator.ELSEMODE_IGNORE,            0.95,            stroke);
  • 73. 58GraphBecause getting there is half the fun.BasicLineGraphGenerator graphGen = new BasicLineGraphGenerator();for ( MultiLineString line : lines ) {  graphGen.add( line );}Graph graph = graphGen.getGraph();EdgeWeigter weighter = new EdgeWeighter() {   public double getWeight(Edge e) {      SimpleFeature feature = (SimpleFeature) e.getObject();      Geometry geometry = (Geometry) feature.getDefaultGeometry();      return gometry.getLength();   }};DijkstraShortestPathFinder pf = new DijkstraShortestPathFinder( graph, start, weighter );pf.calculate();Path path = pf.getPath( destination );
  • 74. Process Close to graduating(Maybe at the Code Sprint?)
  • 75. ProcessAnnotation Based No more filling in massive data structures; GeoTools willgenerate based on annotations against a static method.Bridge Functions and Process Used for rendering transformations; allowing you muchgreater control of geometry prior to display.Massive influx of High Quality Processes The full range of processes defined by GeoServer havebeen back ported resulting in some of the best examples ofhow to use GeoTools.WPS Client Still unsupported ... nothing to see here
  • 76. 61Process Annotation ExampleTutorial Coming soon!@DescribeProcess(title = "Buffer", description = "Buffers a geometry using distance")@DescribeResult(description = "The buffered geometry")static public Geometry buffer(    @DescribeParameter(name = "geom", description = "The geometry to be buffered")    Geometry geom,    @DescribeParameter(name = "distance",                        description = "The distance (same unit of measure as the geometry)")    double distance) {        return geom.buffer(distance);}
  • 77. Application Schema Graduated this year!
  • 78. 63Application SchemaAuScope has completed their work on Application Schema.This is an interesting module that is able to take informationfrom several DataStores and "map" the values into thecorrect shape for publication against an application schema.This is used when the data format used cannot be generatedand must exactly match that provided by a standards bodyor expert community.Thanks to Ben and the AuScope team for their dedication onthis very challenging problem.
  • 79. Teradata DataStoreCreated and Graduated this year!
  • 80. 65Terradata DataStoreA great bit of work from Jesse Eichar from Camptocamp.This module went from a unsupported module through tosupported status in record time - excellent work Jesse!
  • 81. EFeatureMapping between Eclipse Modelling Framework and GeoTools Feature Model.
  • 82. 67EFeature• Kenneth Gulbrandsoy has been an amazingly active addition to the GeoTools community. Kenneth is a PHD student from Norwegian University of Technology and Science.• EFeature datastore allows teams to leverage their Java objects into the GeoTools dynamic feature system• Adding Spatial capabilities to EMF models – 98% finished – Goal is to make it a supported plugin in GeoTools – Docs are comming soon
  • 83. Grass Raster readerCreated and Graduated this year!
  • 84. 69Grass Raster ReaderAndrea Antonello has pulled together support for theGRASS raster format and donated it to the GeoTools library(going through the effort to match our quality assurance anddocumentation standards).
  • 85. TemporalMerged into gt-main as core feature
  • 86. 71TemporalThe temporal module has provided an enhanced range oftime and time range operations.Justin has gathered this up into the gt-main module as oneof the cornerstones for WFS 2.0 Filter support.after = ff.after(ff.property("date"),ff.literal(temporalInstant));within = ff.toverlaps( ff.property("constructed_date"), ff.literal(period));
  • 87. Query Improvements What is Justin up to?
  • 88. 73Query ImprovementsJoin Justin has sorted out how Joins will be represented - finally!Function Between Jody and Justin Functions now have excellent runtime documentation. Arguments are now listed by name; with specific type information.Filter Evaluation over a Collection Niels (AuScope) has sorted out this one allowing you to control how many matches are required (one, any, all) when comparing groups of values.Temporal As mentioned temporal filter support has been added; seriously increasing the number of operations available.
  • 89. Swing and SWT (Getting your GUI on)
  • 90. 75SwingThe much loved gt-swing module has been used for yearsto make the GeoTools tutorials visual. At long last, it islooking to graduate to supported status.Michael Bedward has been astar contributor this yearcleaning up the code base,making it testable, all thewhile answering questionson the email list.
  • 91. 75SwingThe much loved gt-swing module has been used for yearsto make the GeoTools tutorials visual. At long last, it islooking to graduate to supported status.Michael Bedward has been astar contributor this yearcleaning up the code base,making it testable, all thewhile answering questionson the email list.
  • 92. 76Swing• Major clean up of the internals!• JMapPane rewritten – Ported to Layer, FeatureLayer, RasterLayer etc... – DirectLayer support for Animation / map decorations – Nice clean background rendering• Ability to add new InfoTool classes via plugin• Support for Internationalisation• Supported Status? – Docs and Test Coverage improving by the day• Coming Soon: Concurrent rendering
  • 93. 77SWTA new addition to the project is a port of the gt-swing code toan easy to use component for SWT.Andrea Antonello (HydroloGIS) was responsible for this workand it looks like gt-swing and gt-swt will be able to share thesame data models as time progresses.
  • 94. What is Past?Reflections on departed modules
  • 95. 79Recently DroppedJDBCDataStore The initial proof of concept JDBC datastore created in 2003 has finally been replaced. We had a good 2 year deprecation cycle to allow migration.GeoAPI The "opengis" interfaces have been folded back into the library allowing us to take responsibility, improve javadocs and dive into filter improvements for WFS 2.0 work.Assorted Spring Cleaning Simone was kind enough to clean out orphaned and empty modules from out "unsupported" pile.
  • 96. What is Next?Ideas on the future of GeoTools
  • 97. 81Future PlansGeometry Curves and 3D Tisham Dhar (CSIRO) is evaluating several alternatives.GeoTools has components of ISO 19107 provided bySYS Technologies and the of University FachhochschuleKoeln.WFS 2.0 Query Justin DeOlivera (OpenGeo) is in the middle of amajor update to DataStore query functionality
  • 98. 82Future RnD IdeasOSGi Bundles Branch started to explore this topic with contributors from several projects.Android Jody had a chance to look at what it would take to port GoeTools to Andriod. If you are interested in doing the work talk to us at the Code Sprint.3D A number of teams hook GeoTools to 3D engines each year. Indeed Oliver Gottwald plans to do so this year; anyone want to do it as part of the community?MIL2525B Another classic we revisit each year - any takers?
  • 99. Upstream ProjectsThanks! We dont Do this alone
  • 100. 84Upstream ProjectsJTS Topology Suite (JTS) Provides the excellent Geometry support we enjoy inGeoTools. Thanks Martin!imageio-ext Provides geospatial raster formats to the Java AdvancedImaging project we use for coverages. Thanks Simone andGeoSolutions.jaitools Another extension to Java Advanced Imaging this timethanks to Michael Bedward. Really fun for processing andgenerating rasters.
  • 101. Open DevelopmentIs so much more than open source
  • 102. Get Involved - Open DevelopmentGeoTools provides clear “time boxed” procedures allowing youto plan your community involvement.Contribute Clean patch + test + description = contributionRequest for Change Open RFC procedure, time boxed allowing committhree days after submitting (we have to meet deadlines aswell).Release Public release process - make a release to match yourprojects schedule and deadlines. Procedures are in place just add developers (or money).
  • 103. Get Involved - Unsupported AreaUnsupported is a scratch pad used to work on new ideas.Easy Commit Access Send email and read the developers guide; a PMC memberwill help you with the paper work.Unsupported does not mean unloved You get commit access to your module, and your workdeployed to maven nightly, and published each release.Formal review only when Ready Ask for a QA / Docs check at any time and graduate to aformal supported part of the library.
  • 104. State of GeoTools Any Questions? Any time?