wiki:WKTRaster/PlanningAndFunding

Version 98 (modified by pracine, 12 years ago) ( diff )

PostGIS WKT Raster Planning and Funding

This is the development page of PostGIS WKT Raster - a project extending PostGIS engine with raster support.

Need more WKT Raster features? - If you need support for raster in PostgreSQL or you have to do raster/vector operations, help us develop WKT Raster! WKT Raster development is a work in progress. Each slice of 2000$ will bring new functions in! The approximate cost of the whole project is about 60 000$US. If 30 groups each give 2000$US, we will have the best seamless raster/vector set of SQL functions available!

Time or Money - You can contribute with money or developer time (DevTime). Contributing give you the opportunity to have a word to say on the development priorities and on the schedule.

For financial contribution, the conversion rate between time and money is 1200$ per week = approx. 5000US$ per month = approx. 60 000 US$ per year. Coders have to be experienced C developer with a minimal object oriented database development experience. There are some developers out there willing to offer their services to implement your needs.

Expectations - We expect that contributors will:

  • Try to follow the schedule or at least arrange it to fit their particular needs as much as possible in accordance with the project roadmap. The project is divided into coherent groups of tasks. We are very flexible on modifying the content of those sections.
  • Contribute to the specifications in order to agree and to keep track of what's done. Specifications of the intented development should be described in the Specifications page and submited to the postgis-devel mailing list for comments before starting development. Ask Pierre Racine to get write access to the specification page.
  • Contribute to the Documentation as much as they can to make sure we produce a coherent and a professional open source product.

Advices to developers - We can assure degree of quality with obeying basic rules and development cycle process, most of them are easily executable:

  1. If you add new C API function, always add test case for it in test/core.
  2. If you add new SQL function, always add test case for it in test/regress.
  3. Always do full build of WKT Raster before commit (with new tests included).
  4. Always run all WKT Raster unit tests before commit (with new tests included).
  5. Do not commit anything if any of the two occurs: a) WKT Raster build failed b) WKT Raster tests failed.
  6. Try to do full rebuild and full tests run of all related components: GEOS + PostGIS + WKT Raster.
  7. Frequently check if WKT Raster build is "green" in the very our :-) Hudson bay http://office.refractions.net:1500/view/WKTRaster/
  8. Don't worry if something got broken after a commit. A broken code is a daily bread and errors are valuable. Just don't let buggy commits to accumulate, but fix as soon as first error is spotted.
  9. Adding new test cases are the only time consuming element, but even a very simple test is worth (i.e. test/regress/rt_box2d.sql)

Objectives & Tasks - are arranged into coherent groups: Similar functions together and dependencies first.

Developers having worked or available for future work on the project

WKT Raster development team members with officially allocated tasks:

Unofficial WKT Raster development members with unofficially allocated tasks:

Funding Contributors

Prime financial contributors who established development of the WKT Raster project:

Development Status

Explanation of status markers used in the tables below:

  • todo: The task has not yet been funded. Everything is to do.
  • funded: Someone committed some funding or developer time and the task has been assigned to a developper but the task is still to do.
  • in-progress: The task is being implemented.
  • pending: The developer is waiting for other development to continue.
  • buggy: The tast has been implemented but is disfunctional for some reason.
  • done: The task is finished.

Milestones for Beta 0.1.6

Objectives and TasksCoderApprox. ScheduleTimeFund (US$)Status

Objective 0.1.6a - Being able to create tables with RASTER fields
Initial setup: type definition, canonical input/outputSSJanuary 20094 weeks2400 by SC
2600 by MD
done

Objective 0.1.6b - Being able to select RASTER values based on bbox spatial relation
Spatial operators with semantic matching postgis ones SSFebruary 20091 week1200 by TEdone
GiST indexing supportPRFebruary 20091 week1200 by SCdone

Objective 0.1.6c - Being able to load raster in the database (specifications)
gdal2wktraster.py as a prototype of raster2pgsql.exe based on GDALMLFebruary 20091 weekDevTime from MDdone

Objective 0.1.6d - Being able to get all the properties of a raster (all the "Get" functions). (specifications)
- ST_SRID(raster|geometry) → integer
- ST_Width(raster) → integer
- ST_Height(raster) → integer
- ST_PixelSizeX(raster) → float32
- ST_PixelSizeY(raster) → float32
- ST_RotationX(raster) → float32
- ST_RotationY(raster) → float32
- ST_UpperLeftX(raster) → float32
- ST_UpperLeftY(raster) → float32
- ST_GeoReference(raster) → string
- ST_NumBands(raster) → integer
- ST_BandPixelType(raster, band) → string
- ST_BandNoDataValue(raster, band) → float32
MLFebruary 20091 weeksDevTime from MDdone

Objective 0.1.6e - Being able to intersect vector and raster to produce vector. (specifications)
- ST_ConvexHull(raster) → polygon geometry
- ST_Envelope(raster|geometry) → polygon geometry
- ST_Polygon(raster) → polygon geometry
- ST_DumpAsPolygons(raster) → polygon geometry set
- ST_Intersects(raster|geometry, raster|geometry)
- ST_Intersection(raster|geometry, raster|geometry)→geometry set
JA & PRJuly - August 20108 weeks4800 by SC / DevTime from JA done

Objective 0.1.6f - Being able to set all the properties of a raster. (specifications)
- ST_SetSRID(raster|geometry, integer)
- ST_SetPixelSize(raster, pixelsizex, pixelsizey)
- ST_SetBandNoDataValue(raster, band, nodatavalue)
- ST_SetGeoReference(raster, string)
- ST_SetSkew(raster, skewx, skewy)
- ST_SetUpperLeft(raster, x, y)
dzwargApril 20101 weekDevtime from DZdone

Objective 0.1.6g - Being able to register images as raster stored outside the database. (specifications)
-Mostly changes to gdal2wktraster.py
- ST_BandPath() → string
TBDFebruary 20101 weeks2400done

Milestones for Beta 0.2.4

Objectives and TasksCoderApprox. ScheduleTimeFund (US$)Status

Objective 0.1.6f - Being able to return a JPEG, a TIFF or a PNG. (specifications)
- ST_Band(raster, band) → raster
- ST_AsJPEG(raster, band, quality) → JPEG as "bytea"
- ST_AsTIFF(raster, band, compression) → TIFF as "bytea"
- ST_AsPNG(raster, band) → PNG as "bytea"
MLJuly - August 2010TBD2400 / DevTime from MLtodo

Objective 0.2.4c - Being able to intersect vector and raster to produce raster. (specifications)
- ST_AsRaster(geometry, pixelsize) → raster
- Changes to ST_Intersection
TBDNovember 20104 weeks4800todo

Objective 0.2.4d - Being able to use "group by" to accumulate tiles to form a new raster. (specifications)
- ST_Union(raster|geometry, raster|geometry, ‘raster’|’geometry’) → raster/geometry
- ST_Accum(raster set|geometry set, ‘raster’|’geometry’) → raster/geometry
TBDNovember 20102 weeks2400todo

Other Important Milestones

Objectives and TasksCoderApprox. ScheduleTimeFund (US$)Status

Objective B03a - Being able to get and set the rotation of a raster. (specifications)
- ST_Rotation(raster)
- ST_SetRotation(raster, rotation)
TBD2 days480todo

Objective B03b - Being able to reproject a raster. (specifications)
- ST_Transform(raster|geometry, SRID) → same type as inputTBD1 week1200todo

Objective B03c - Being able todo some base raster operations. (specifications)
- ST_Area(raster|geometry) → double
- ST_Count(raster, value) → integer
- ST_Resample(raster, pixelsize, method) → raster
- ST_SelectByValue(raster|geometry, ‘expression’) → same type as first argument
- ST_Reclass(raster|geometry,string) → same type as first argument
- ST_MapAlgebra(raster|geometry, [raster|geometry,…], ‘mathematical expression’, ‘raster’ |’geometry’) → raster/geometry
- ST_Clip(raster|geometry,geometry) → same type as first argument
- ST_Flip(raster|geometry, ’vertical’|’horizontal’) → same type as first argument
TBD6 weeks7200todo

Objective B04a - Being able to convert a raster to standards formats. (specifications)
- ST_AsKML(raster|geometry) → string
- ST_AsSVG(raster|geometry) → string
TBD2 weeks2400todo

Objective B04b - Being able to control the validity of a raster. (specifications)
- ST_IsEmpty(raster|geometry) → boolean
- ST_mem_size(raster|geometry) → integer
- ST_isvalid(raster|geometry) → boolean
TBD1 week1200todo

Objective B04c - Being able to use other major topological operators. (specifications)
- ST_Within(raster|geometry A, raster|geometry B)
- ST_Contains(raster|geometry A, raster|geometry B)
- ST_Overlaps(raster|geometry, raster|geometry)
TBD1 week1200todo

Objective B05a - Being able to derive a raster layer from vector layer. (specifications)
- ST_Interpolate(points, pixelsize, method) → rasterTBD1 week1200todo

Objective B05b - Being able todo on rasters most operations available on geometries. (specifications)
- ST_Centroid(raster|geometry) → point geometry
- ST_PointOnSurface(raster|geometry) → point geometry
- ST_Buffer(raster|geometry, double) → same type as first arg.
- ST_ConvexHull(raster|geometry) → same type as input
- ST_Difference(raster|geometry A, raster|geometry B) → same type as first argument
- ST_SymDifference(raster|geometry,raster|geometry,‘raster’|’geometry’) → raster/geometry
TBD4 weeks4800todo

Objective B06a - Being able to use all the other topological operators. (specifications)
- ST_Equals(raster|geometry, raster|geometry)
- ST_Disjoint(raster|geometry, raster|geometry)
- ST_Touches(raster|geometry, raster|geometry)
- ST_Crosses(raster|geometry, raster|geometry)
- ST_Covers(raster|geometry A, raster|geometry B)
- ST_IsCoveredBy(raster|geometry A, raster|geometry B)
- ST_Relate(raster|geometry, raster|geometry, intersectionPatternMatrix )
TBD2 weeks2400todo

Objective B07b - Being able to edit a raster. (specifications)
- ST_SetValue(raster, band, x, y, value)
- ST_Affine(raster|geometry,…) → same type as input
- ST_Translate(raster|geometry,…) → same type as input
- ST_Scale(raster|geometry,…) → same type as input
- ST_TransScale(raster|geometry,…) → same type as input
- ST_RotateZ,Y,Z(raster|geometry, float8) → same type as input
TBD2 weeks2400todo
Other functions
- ST_AsBinary(raster, compression)
- ST_RasterFromWKB(raster, [<srid>])
- ST_RasterFromText(string, [<srid>])
- ST_AsText(raster)
- ST_SetPath(string)
ML (start ST_AsBinary) Aug 20092 weeks2400 / DevTime from MDin-progress

GDAL Driver Milestones

Objectives and TasksCoderApprox. ScheduleTimeFund (US$)Status

Objective 1 - Being able to read in-db regular blocking WKT Raster with the GDAL driver. (specifications)
- Read a WKT Raster from database (in-db, regular blocking)JAJuly - August 2010TBDDevTime from JA in-progress

Objective 2 - Being able to read out-db irregular blocking WKT Raster with the GDAL driver. (specifications)
- Read a WKT Raster from database (out-db, irregular blocking)JAJuly - August 2010TBDDevTime from JA in-progress

Objective 3 - Being able to write WKT Raster with the GDAL driver. (specifications)
- Create a new WKT Raster in database (in-db/out-db, regular/irregular blocking)JAJuly - August 2010TBDDevTime from JA in-progress
Note: See TracWiki for help on using the wiki.