99
State of GeoTools 1

State of GeoTools 2012

Embed Size (px)

DESCRIPTION

State of GeoTools 2012 edition for Latinoware conference

Citation preview

Page 1: State of GeoTools 2012

State of GeoTools

1

Page 2: State of GeoTools 2012

About your PresenterJody Garnett

ActivitiesGeoTools PMCGeoServer PSCuDig PSCOSGeo Charter MemberOSGeo Incubation ChairLocationTech

LISAsoft

LISAsoftA great system integration company helping our customers make effective use of open source spatial.

2

Page 3: State of GeoTools 2012

Thanks to Previous PresentersJustin Deolivera(PMC)

OpenGeoBringing the best open source geospatial software to organisations around the world.

Andrea Aime(PMC)

GeoSolutionsGeoServer/GeoTools core developers, raster data management, map rendering, spatial data processing

3

Page 4: State of GeoTools 2012

GeoToolsThe Java GIS Toolkit

4

Page 5: State of GeoTools 2012

GeoTools - the Java GIS Toolkit

5

Page 6: State of GeoTools 2012

About GeoTools

6

Open SourceLGPLOpen DevelopmentPublic ProcessAnyone can Play

1994 - PresentReally old for JavaStarted in Leads UniversityOSGeo Project in 2006Active / Diverse committers

Page 7: State of GeoTools 2012

History1994 GeoTools (and GeoTool “Lite”)

Version 1 had more users then documentationSolution was to fire the users ...

2002 GeoTools 2We learned - GeoTools 2 leans on the OGC standardsOGC provides public standardsThey are documentation we do not have to write

Benefit: Development was faster without inventing names

2010 GeoToolsBack to simply “GeoTools”

7

Page 8: State of GeoTools 2012

Traditional Diagram of Boxes

8

Page 9: State of GeoTools 2012

Why Mapping

9

Page 10: State of GeoTools 2012

10

Why Mapping

Map for Your Mother!

(or Dad!)

Page 11: State of GeoTools 2012

Do your Parents Know what you Do?

11

Page 12: State of GeoTools 2012

UML bad / Map good

12

Text GeoServer Gallery by Gérald Estadieu

Page 13: State of GeoTools 2012

State of GeoTools

13

2012

Page 14: State of GeoTools 2012

Community 261 Andrea Aime (GeoServer) - GeoSolutions 261 Jody Garnett (uDig) - Lisasoft 167 Simone(GeoServer) - GeoSolutions 123 Justin Deoliveira (GeoServer) - OpenGeo 114 Michael Bedward (JAITools) 66 Danielei (GeoServer) GeoSolutions 54 Ben Caradoc Davies - CSIRO 51 Niels Charlier - CSIRO 32 moovida (JGrass) - Hydrologis 28 ang05a - CSIRO 25 groldan - (GeoServer) - OpenGeo 17 mpazos - Axios 15 victortey - CSIRO 9 kengu - Norwegian Uni of Tech & Science 8 ischneider - OpenGeo 7 ianturton - University of Leeds 7 jesseeichar - CampToCamp 7 lmoran - Consultant 6 afabiani - GeoSolutions 2 alfonx (AtlasStyler) - WikiSquare

2010 Stats tracking commits

30 committers10 organisations

14

geotools-devel:    414 members total

geotools-gt2-users:    969 members total

Page 15: State of GeoTools 2012

15

Summary• Ohloh summary

Q: Jump in Size?A: Move to SVN then

move to GIT

Page 16: State of GeoTools 2012

Issue Tracker Activity

Created vs resolved tickets (click image for update )

16

Real Lock Down thisyear for 8.0 Release!

Page 17: State of GeoTools 2012

Name ChangeDropping the “2”

17

Page 18: State of GeoTools 2012

GeoTools 2 now called GeoTools• What is in a Name?

• sed/GeoTools 2.8.0/GeoTools 8.0/

• What does this mean?• Not very much - business as usual

• What does that really mean?• It means there is no plans for a “GeoTools 3” rewrite :-)• Confidence in our community• Continue our commitment to stability• Evolution handled with continuous small changes

18

Page 19: State of GeoTools 2012

DocumentationIts a feature - really

19

Page 20: State of GeoTools 2012

User Guide - Before

20

Page 21: State of GeoTools 2012

User Guide - After

21

Page 22: State of GeoTools 2012

Code Examples - Before (Wiki)

Compile?What Version?When?

All very good questions with no clear answer.

22

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[] = newAttributeType[currentTypes.length+newTypes.length]; for(int i=0;i<currentTypes.length;i++){ typesNew[i] = currentTypes[i]; } for(int i=0;i<newTypes.length;i++){ typesNew[currentTypes.length+i] = newTypes[i]; } 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();

Page 23: State of GeoTools 2012

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[] = newAttributeType[currentTypes.length+newTypes.length]; for(int i=0;i<currentTypes.length;i++){ typesNew[i] = currentTypes[i]; } for(int i=0;i<newTypes.length;i++){ typesNew[currentTypes.length+i] = newTypes[i]; } 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();

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();                memory.createSchema(schema);                                collection.accepts(new  FeatureVisitor()  {                        public  void  visit(Feature  feature)  {                                SimpleFeatureBuilder  builder  =  new  SimpleFeatureBuilder(schema);                                                                builder.init((SimpleFeature)  feature);                                for  (AttributeDescriptor  descriptor  :  newTypes)  {                                        builder.add(DataUtilities.defaultValue(descriptor));                                }                                                                SimpleFeature  newFeature  =  builder.buildFeature(feature.getIdentifier().getID());                                memory.addFeature(newFeature);                        }                },  null);                                return  memory.getFeatureSource(typename);

Code Examples - After (Sphinx)

Pulled Live from Source!

GeoTools Version at the Top of the Page!

23

Page 24: State of GeoTools 2012

Code Examples - Example

24

Used for both Java code examples and also configuration files such as maven pom.xml.

Page 25: State of GeoTools 2012

Diagrams - Before (Visio)

25

Page 26: State of GeoTools 2012

Diagrams - After (Inkscape)

26

Page 27: State of GeoTools 2012

Class Diagrams - Before

27

Page 28: State of GeoTools 2012

Class Diagrams - After (Object Aid)

28

Page 29: State of GeoTools 2012

Tutorials - Before

29

Page 30: State of GeoTools 2012

Tutorials - After

30

Page 31: State of GeoTools 2012

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 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.

31

Page 32: State of GeoTools 2012

Welcome Geomajas

32

Page 33: State of GeoTools 2012

Welcome GeoServer

33

Page 34: State of GeoTools 2012

Welcome uDig

34

Page 35: State of GeoTools 2012

Documentation 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 wiki

New features- Extensive FAQ- whole project javadocs- module by module reference- plugins organised by module- build instructions

35

Page 36: State of GeoTools 2012

Referencing(do you know where your data is?)

36

Page 37: State of GeoTools 2012

Referencing• Ellipsoids, datum, map projections

• Embedded EPSG database, over 5000 supported codes (gt-epsg-hsql module)

• Reprojection utilities

37

Geometry 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);

Page 38: State of GeoTools 2012

Projections

Mollweide

Eckert IV

Winkel Tripel

Robinson

Equidistant conic

Old projections

AitoffAlbers Equal A.CassiniSoldnerCylindrical Equidist.KrovakLambert Conf.MercatorOblique MercatorOrthogonalPolyconicStereographicTransverse Mercator 38

New

Page 39: State of GeoTools 2012

Vector PluginsBoth direction and magnitude!

39

Page 40: State of GeoTools 2012

Vector Data Sources• Application schema*• ArcSDE• Aggregating *• CouchDb *• CSV *• DXF *• Excel• Edigeo• PreGeneralized• SimpleFeatureService *• Shapefile (directory of)• WFS

• JDBC• DB2• H2 spatial• MySQL• Postgis• Oracle • SQL Server• Spatialite *• Teradata *• Ingress

name* = new entry name = “unsupported”

40

Page 41: State of GeoTools 2012

JDBC 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

• Extensions for native joins

select ST_Union(the_geom) as geom from countrieswhere REGION = %region%

41

Page 42: State of GeoTools 2012

Application 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

42

Page 43: State of GeoTools 2012

Raster Formatspixel power

43

Page 44: State of GeoTools 2012

Raster Data Sources• ArcGrid• ArcSDE • GeoTiff• GRASS *• GTopo30• Image Mosaic• Image Mosaic JDBC *• Image Pyramid• Image + World file• JP2 direct Kakadu• Matlab• Image collection *

• imageio-ext based• AIG• DTED• ECW• EnviHdr• ErdasImg• EsriHdrJP2• MrSID• NITF*• RPFTOC

name * = new entryname = unsupported land

44

Page 45: State of GeoTools 2012

Non geo-referenced data

45

Page 46: State of GeoTools 2012

Image mosaic

46

Page 47: State of GeoTools 2012

RenderingGotta see it to believe it

47

Page 48: State of GeoTools 2012

Rendering

48

Page 49: State of GeoTools 2012

Layers

49

• 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

Page 50: State of GeoTools 2012

• 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 need

StyleBuilder

50

Style style = new StrokeBuilder().color(Color.BLUE)              .width(3).dashArray(5, 2)              .buildStyle();

Page 51: State of GeoTools 2012

StyleBuilder

51

• StyleBuilder allows you to freely mix CQL expressions• Provides “literate” methods allowing you to define your style

using your IDE autocomplete

fts = 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");

Page 52: State of GeoTools 2012

Showing the Map Part 1To start we get the data and create a StyleIn this case we open a file and generate a style from the schema

Similar to SE 1.1 transformations, but open-ended,

52

FileDataStore store = FileDataStoreFinder.getDataStore(file);SimpleFeatureSource featureSource = store.getFeatureSource();SimpleFeatureType schema = featureSource.getSchema();

Style style = SLD.createSimpleStyle( schema );

Page 53: State of GeoTools 2012

Showing the Map Part 2Create Map and use JMapFrame to display

Similar to SE 1.1 transformations, but open-ended,

MapContent map = new MapContent();map.setTitle("Quickstart");Layer layer = new FeatureLayer(featureSource, style);map.addLayer(layer);

JMapFrame.showMap(map);

53

Page 54: State of GeoTools 2012

Pluggable Mark Factory TTF

<Mark> <WellKnownName>ttf://Wingdings#0xF054</WellKnownName>  <Fill> <CssParameter name="fill">#000088</CssParameter> </Fill></Mark>

54

Page 55: State of GeoTools 2012

Pluggable Mark Factory Slash

<Fill>  <GraphicFill>  <Graphic>    <Mark>      <WellKnownName>shape://slash</WellKnownName>      <Stroke>        <CssParameter name="stroke">0xAAAAAA</CssParameter>      </Stroke>    </Mark>    <Size>16</Size>  </Graphic>

55

Page 56: State of GeoTools 2012

Pluggable Mark Factories Interface

public interface MarkFactory {    public java.awt.Shape getShape(            Graphics2D graphics,             Expression symbolUrl,             Feature feature) throws Exception;}

org.geotools.renderer.style.WellKnownMarkFactoryorg.geotools.renderer.style.TTFMarkFactoryorg.geotools.renderer.style.ShapeMarkFactory

56

Page 57: State of GeoTools 2012

Geometry transform Arrow Head

<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>

Similar to SE 1.1 transformations, but open-ended,

57

Page 58: State of GeoTools 2012

Geometry 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>

58

Page 59: State of GeoTools 2012

Based on functions, a pluggable extension point

Geometry transform Implementation

public 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;        }

59

Page 60: State of GeoTools 2012

Transform data before rendering. Contour extraction, wind maps, geometry clustering. Pluggable, add your function!

Rendering Transform Wind Map

<FeatureTypeStyle>    <Transformation>     <ogc:Function name="gs:RasterAsPointCollection">       <ogc:Function name="parameter">             <ogc:Literal>data</ogc:Literal> 

60

u v

Page 61: State of GeoTools 2012

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>

61

Page 62: State of GeoTools 2012

XML(what could be as fun as rendering? not xml)

62

Page 63: State of GeoTools 2012

XML

Technology Parse Encode Supports

GeoTools SAX SAX,DOM Filter, GML, SLD

GeoTools DOM DOM Filter, GML, SLD

GeoTools Transform XML Filter, GML, SLD

JAXB SAX,DOM n/a

XDO(Schema Assisted

Generation 1)SAX,DOM XML Filter, GML, SLD, WMS, WFS1.0,

XSD

GTXML(Schema Assisted

Generation 2)SAX,DOM XML Filter, GML, SLD, WMS, WFS1.0,

WFS 1.1, WPS, XSD, and more...

63

Page 64: State of GeoTools 2012

Schema Assisted Parsing

64

GeoTools Specific Technology; makes use of the schema information to minimise the code you need to write.You teach GeoTools how to “bind” a object once; and it will work in any schema that uses those objects.

Page 65: State of GeoTools 2012

Schema Assisted Encoding

65

The same approach is used when encoding objects; basically using the schema as a cheat sheet to sort out what to emit next.

Page 66: State of GeoTools 2012

Extensionshigh value functionality built on top of GeoTools

66

Page 67: State of GeoTools 2012

BrewerWraps up the ColorBrewer for Java Developers; generating a normal Style you can use in GeoTools; or export to other applications.FeatureTypeStyle style = StyleGenerator.createFeatureTypeStyle( groups, ff.propertName(“population”), colors, "Generated Style", schema.getGeometryDescriptor(), StyleGenerator.ELSEMODE_IGNORE, 0.95, stroke);

67

Page 68: State of GeoTools 2012

Because getting there is half the fun.

Graph

68

BasicLineGraphGenerator graphGen = newBasicLineGraphGenerator();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 );

Page 69: State of GeoTools 2012

ProcessStill in Progress

69

Page 70: State of GeoTools 2012

ProcessAnnotation Based No more filling in massive data structures; GeoTools will generate based on annotations against a static method.

Bridge Functions and Process Used for rendering transformations; allowing you much greater control of geometry prior to display.

Massive influx of High Quality Processes The full range of processes defined by GeoServer have been back ported resulting in some of the best examples of how to use GeoTools.

WPS Client Still unsupported ... nothing to see here 70

Page 71: State of GeoTools 2012

Tutorial Coming soon!

Process Annotation Example

71

@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") double distance) { return geom.buffer(distance);}

Page 72: State of GeoTools 2012

Application SchemaGraduated this year!

72

Page 73: State of GeoTools 2012

Application SchemaAuScope has completed their work on Application Schema.This is an interesting module that is able to take information from several DataStores and "map" the values into the correct shape for publication against an application schema.

This is used when the data format used cannot be generated and must exactly match that provided by a standards body or expert community.

Thanks to Ben and the AuScope team for their dedication on this very challenging problem.

73

Page 74: State of GeoTools 2012

Teradata DataStoreAnother spatial database into the mix!

74

Page 75: State of GeoTools 2012

Terradata DataStoreJesse Eichar (Camptocamp) took this module from development, a quick unsupported beta period and to supported status in record time.

75

Page 76: State of GeoTools 2012

EFeatureMapping between Eclipse Modelling Framework

and GeoTools Feature Model.

76

Page 77: State of GeoTools 2012

EFeature• 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

77

Page 78: State of GeoTools 2012

Grass Raster readerCreated and Graduated this year!

78

Page 79: State of GeoTools 2012

Grass Raster ReaderAndrea Antonello has pulled together support for the GRASS raster format and donated it to the GeoTools library (going through the effort to match our quality assurance and documentation standards).

79

Page 80: State of GeoTools 2012

TemporalMerged into gt-main as core feature

80

Page 81: State of GeoTools 2012

TemporalThe temporal module has provided an enhanced range of time and time range operations.Justin has gathered this up into the gt-main module as one of the cornerstones for WFS 2.0 Filter support.

81

after = ff.after( ff.property("date"), ff.literal(temporalInstant));

within = ff.toverlaps( ff.property("constructed_date"), ff.literal(period));

Page 82: State of GeoTools 2012

Query ImprovementsJustin takes on WFS 2.0

82

Page 83: State of GeoTools 2012

Query 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 CollectionNiels (AuScope) has sorted out this one allowing you to control how many matches are required (one, any, all) when comparing groups of values.

TemporalAs mentioned temporal filter support has been added; seriously increasing the number of operations available.

83

Page 84: State of GeoTools 2012

Swing and SWT(Getting your GUI on)

84

Page 85: State of GeoTools 2012

Swing The much loved gt-swing module has been used for years to make the GeoTools tutorials visual. At long last, it is looking to graduate to supported status.

Michael Bedward has been a star contributor this yearcleaning up the code base,making it testable, all thewhile answering questionson the email list.

85

Page 86: State of GeoTools 2012

Swing Major clean up of the internals!JMapPane rewritten

Ported to Layer, FeatureLayer, RasterLayer etc...DirectLayer support for Animation / map decorationsNice clean background rendering

Ability to add new InfoTool classes via pluginSupport for InternationalisationSupported Status?

Docs and Test Coverage improving by the day

Coming Soon: Concurrent rendering

86

Page 87: State of GeoTools 2012

SWTA new addition to the project is a port of the gt-swing code to an easy to use component for SWT.

Andrea Antonello (HydroloGIS) was responsible for this work and it looks like gt-swing and gt-swt will be able to share the same data models as time progresses.

87

Page 88: State of GeoTools 2012

What is Past?Reflections on departed modules

88

Page 89: State of GeoTools 2012

Recently DroppedJDBCDataStore and PostGIS-Versioned

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.

GeoAPIThe "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.

89

Page 90: State of GeoTools 2012

What is Next?Ideas on the future of GeoTools

90

Page 91: State of GeoTools 2012

Future PlansProcess, Process, Process

Web Processing Service is finally attracting funding, with it comes a lot of new process ideas, implementations and directions. Hold on it is going to be a wild ride!

Prep for Java 7 try-with-resourceUpdate our API to mark which items are “Closable”

FeatureCollection as a Result SetFor Java 5 we needed to prevent FeatureCollection extending java.util.Collections - so that iterators could be closed.We are completing this work by removing the deprecated method names (add, remove, etc...)This will allow FeatureCollection to be a simple result set.

91

Page 92: State of GeoTools 2012

Future RnD IdeasOSGi Bundles

Branch started to explore this topic with contributors from several projects.

AndroidJody had a chance to look at what it would take to port GeoTools to Android. If you are interested in doing the work talk to us at the Code Sprint.

3DA number of teams hook GeoTools to 3D engines each year. Anyone want to do it as part of the community?

Geometry Curves and 3D Tisham Dhar (CSIRO) evaulated several alternatives. GeoTools has components of ISO 19107 provided by SYS Technologies and the of University Fachhochschule Koeln.MIL2525B

Another classic we revisit each year - any takers? 92

Page 93: State of GeoTools 2012

Open DevelopmentIs so much more than open source

93

Page 94: State of GeoTools 2012

Get Involved - Open DevelopmentGeoTools provides clear “time boxed” procedures allowing you to plan your community involvement.

Contribute Clean patch + test + description = contribution

Request for Change Open RFC procedure, time boxed allowing commit three days after submitting (we have to meet deadlines as well).

Release Public release process - make a release to match your projects schedule and deadlines.

Procedures are in place just add developers (or money).94

Page 95: State of GeoTools 2012

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 member will help you with the paper work.

Unsupported does not mean unloved You get commit access to your module, and your work deployed to maven nightly, and published each release.

Formal review only when Ready Ask for a QA / Docs check at any time and graduate to a formal supported part of the library.

95

Page 96: State of GeoTools 2012

Predictable Release Cycle• The “wait” for GeoTools 8 was far too long.

• GeoTools is switching to a 6 month release cycle:

• Stable• monthly releases• New features that do not change the API or Stability

• Master• 1-4: open for change proposals• 5: release candidate• 6: final release!

96

Page 97: State of GeoTools 2012

State of GeoToolsAny Questions? Any time?

97

Page 98: State of GeoTools 2012

Upstream ProjectsThanks! We don't Do this alone

98

Page 99: State of GeoTools 2012

Upstream ProjectsJTS Topology Suite (JTS) Provides the excellent Geometry support we enjoy in GeoTools. Thanks Martin!imageio-ext Provides geospatial raster formats to the Java Advanced Imaging project we use for coverages. Thanks Simone and GeoSolutions.jaitools Another extension to Java Advanced Imaging this time thanks to Michael Bedward. Really fun for processing and generating rasters.

99