84 | | |
85 | | |
86 | | == Milestones for PostGIS 2.0 == |
87 | | |
88 | | |
89 | | ||'''Objectives and Tasks'''||'''Coder'''||'''Approx. Schedule'''||'''Time'''||'''Approx. Contribution (US$)'''||'''Status'''|| |
90 | | ||[[BR]]'''Objective 2.0.01 - Being able to get and set the rotation of a raster.''' ([wiki:WKTRaster/SpecificationWorking02 specifications])|||||||||| |
91 | | ||- ST_Rotation(raster)[[BR]]- ST_SetRotation(raster, rotation)||DZ||||2 days||480||done|| |
92 | | ||[[BR]]'''Objective 2.0.02 - Being able to create a raster as the expression of another raster''' ([wiki:WKTRaster/SpecificationWorking02 specifications])|||||||||| |
93 | | ||- ST_MapAlgebra(raster)||JA||||4 weeks||4800||done|| |
94 | | ||[[BR]]'''Objective 2.0.04 - Implement better handling for NULL, ST_IsEmpty, ST_HasNoBand and ST_BandIsNodata rasters''' ([wiki:WKTRaster/SpecificationWorking02 specifications])|||||||||| |
95 | | ||- ST_IsEmpty(raster)[[BR]]- ST_HasNoBand(raster, band)[[BR]]- ST_BandIsNodata(raster, band)||JA||||2 weeks||2400||partially done|| |
96 | | ||[[BR]]'''Objective 2.0.05 - Being able to set and get values for part of a raster''' ([wiki:WKTRaster/SpecificationWorking02 specifications])|||||||||| |
97 | | ||- ST_SetValues(raster)[[BR]]- ST_Clip(raster)||TBD||||2 weeks||2400||todo|| |
98 | | ||[[BR]]'''Objective 2.0.06 - Being able to add a band to a raster ''' ([wiki:WKTRaster/SpecificationWorking02 specifications])|||||||||| |
99 | | ||- ST_AddBand()||PR & JA||||2 weeks||2400||done|| |
100 | | |
101 | | |
102 | | == Milestones for Future Versions == |
103 | | |
104 | | |
105 | | ||'''Objectives and Tasks'''||'''Coder'''||'''Approx. Schedule'''||'''Time'''||'''Approx. Contribution (US$)'''||'''Status'''|| |
106 | | ||[[BR]]'''Objective FV.01 - Being able to return a JPEG, a TIFF or a PNG ''- Done''''' ([wiki:WKTRaster/SpecificationWorking03 specifications])|||||||||| |
107 | | ||- ST_Band(raster, band) -> raster[[BR]]- ST_Reclass(raster|geometry,string) -> same type as first argument[[BR]]- ST_AsGDALRaster(raster, band int, type text, options text) -> bytea[[BR]]- ST_GDALDrivers() -> set of record[[BR]]- ST_AsJPEG(raster, band, quality) -> JPEG as "bytea"[[BR]]- ST_AsTIFF(raster, band, compression) -> TIFF as "bytea"[[BR]]- ST_AsPNG(raster, band) -> PNG as "bytea"||BP||TBD||2 weeks||2400 / !DevTime from UC||done|| |
108 | | ||[[BR]]'''Objective FV.02 - Being able to intersect vector and raster to produce raster.''' ([wiki:WKTRaster/SpecificationWorking03 specifications])|||||||||| |
109 | | ||- ST_AsRaster(geometry, pixelsize) -> raster[[BR]]- Changes to ST_Intersection||TBD||TBD||4 weeks||4800||todo|| |
110 | | ||[[BR]]'''Objective FV.03 - Implement all the necessary versions of ST_MapAlgebra.''' ([wiki:WKTRaster/SpecificationWorking03 specifications])|||||||||| |
111 | | ||- ST_MapAlgebraExpr()[[BR]]- ST_MapAlgebraFct()[[BR]]- ST_MapAlgebraFctNgb(taking one raster)[[BR]]- ST_MapAlgebraFctNgb(taking one coverage (table))[[BR]]- ST_MapAlgebraExpr(taking two rasters)[[BR]]- ST_MapAlgebraExpr(taking two coverages (tables))[[BR]]- ST_MapAlgebraFct(taking two rasters)[[BR]]- ST_MapAlgebraFct(taking two coverages (tables))||DZ||November 2011||8 weeks||9600||in progress|| |
112 | | ||[[BR]]'''Objective FV.04 - Being able to use "group by" to accumulate tiles to form a new raster.''' ([wiki:WKTRaster/SpecificationWorking03 specifications])|||||||||| |
113 | | ||- ST_Union(raster|geometry, raster|geometry, ‘raster’|’geometry’) -> raster/geometry[[BR]]- ST_Accum(raster set|geometry set, ‘raster’|’geometry’) -> raster/geometry||TBD||TBD||2 weeks||2400||todo|| |
114 | | ||[[BR]]'''Objective FV.05 - Being able to reproject a raster'' - Done''''' ([wiki:WKTRaster/SpecificationWorking03 specifications])|||||||||| |
115 | | ||- ST_Transform(raster|geometry, SRID) -> same type as input||BP||||1 week||!DevTime from UC||done|| |
116 | | ||[[BR]]'''Objective FV.06 - Being able todo some base raster operations.''' ([wiki:WKTRaster/SpecificationWorking03 specifications])|||||||||| |
117 | | ||- ST_Area(raster|geometry) -> double[[BR]]- ST_ValueCount(raster, value) -> integer'' - done''[[BR]]- ST_ValuePercent(raster, value) -> double precision'' - done''[[BR]]- ST_Resample(raster, pixelsize, method) -> raster[[BR]]- ST_SelectByValue(raster|geometry, ‘expression’) -> same type as first argument[[BR]]- ST_Clip(raster|geometry,geometry) -> same type as first argument[[BR]]- ST_Flip(raster|geometry, ’vertical’|’horizontal’) -> same type as first argument||TBD||||6 weeks||7200||partially done|| |
118 | | ||[[BR]]'''Objective FV.07 - Being able to convert a raster to standards formats.''' ([wiki:WKTRaster/SpecificationWorking03 specifications])|||||||||| |
119 | | ||- ST_AsKML(raster|geometry) -> string[[BR]]- ST_AsSVG(raster|geometry) -> string||TBD||||2 weeks||2400||todo|| |
120 | | ||[[BR]]'''Objective FV.08 - Being able to control the validity of a raster.''' ([wiki:WKTRaster/SpecificationWorking03 specifications])|||||||||| |
121 | | ||- ST_mem_size(raster|geometry) -> integer[[BR]]- ST_isvalid(raster|geometry) -> boolean||TBD||||1 week||1200||todo|| |
122 | | ||[[BR]]'''Objective FV.09 - Being able to use other major topological operators.''' ([wiki:WKTRaster/SpecificationWorking03 specifications])|||||||||| |
123 | | ||- ST_Within(raster|geometry A, raster|geometry B)[[BR]]- ST_Contains(raster|geometry A, raster|geometry B)[[BR]]- ST_Overlaps(raster|geometry, raster|geometry)||TBD||||1 week||1200||todo|| |
124 | | ||[[BR]]'''Objective FV.10 - Being able to derive a raster layer from vector layer.''' ([wiki:WKTRaster/SpecificationWorking03 specifications])|||||||||| |
125 | | ||- ST_Interpolate(points, pixelsize, method) -> raster||TBD||||1 week||1200||todo|| |
126 | | ||[[BR]]'''Objective FV.11 - Being able todo on rasters most operations available on geometries.''' ([wiki:WKTRaster/SpecificationWorking03 specifications])|||||||||| |
127 | | ||- ST_Centroid(raster|geometry) -> point geometry[[BR]]- ST_PointOnSurface(raster|geometry) -> point geometry[[BR]]- ST_Buffer(raster|geometry, double) -> same type as first arg.[[BR]]- ST_Difference(raster|geometry A, raster|geometry B) -> same type as first argument[[BR]]- ST_SymDifference(raster|geometry,raster|geometry,‘raster’|’geometry’) -> raster/geometry||TBD||||4 weeks||4800||todo|| |
128 | | ||[[BR]]'''Objective FV.12 - Being able to use all the other topological operators.''' ([wiki:WKTRaster/SpecificationWorking03 specifications])|||||||||| |
129 | | ||- ST_Equals(raster|geometry, raster|geometry)[[BR]]- ST_Disjoint(raster|geometry, raster|geometry)[[BR]]- ST_Touches(raster|geometry, raster|geometry)[[BR]]- ST_Crosses(raster|geometry, raster|geometry)[[BR]]- ST_Covers(raster|geometry A, raster|geometry B)[[BR]]- ST_IsCoveredBy(raster|geometry A, raster|geometry B)[[BR]]- ST_Relate(raster|geometry, raster|geometry, intersectionPatternMatrix )||TBD||||2 weeks||2400||todo|| |
130 | | ||[[BR]]'''Objective FV.13 - Being able to edit a raster.''' ([wiki:WKTRaster/SpecificationWorking03 specifications])|||||||||| |
131 | | ||- ST_Affine(raster|geometry,...) -> same type as input[[BR]]- ST_Translate(raster|geometry,...) -> same type as input[[BR]]- ST_Scale(raster|geometry,...) -> same type as input[[BR]]- ST_TransScale(raster|geometry,...) -> same type as input[[BR]]- ST_RotateZ,Y,Z(raster|geometry, float8) -> same type as input||TBD||||2 weeks||2400||todo|| |
132 | | ||[[BR]]'''Objective FV.16 - Being able to quickly get raster statistics'' - Done''''' ([wiki:WKTRaster/SpecificationWorking03 specifications])|||||||||| |
133 | | ||- ST_SummaryStats(raster, nband) -> record[[BR]]- ST_ApproxSummaryStats(rast raster, nband int, exclude_nodata_value boolean, sample_percent double precision) -> record[[BR]]- ST_Count(raster, nband) -> bigint[[BR]]- ST_ApproxCount(rast raster, nband int, exclude_nodata_value boolean, sample_percent double precision) -> bigint[[BR]]- ST_Histogram(raster, nband) -> set of records[[BR]]- ST_ApproxHistogram(rast raster, nband int, exclude_nodata_value boolean, sample_percent double precision, bins int, width double precision[], right boolean) -> set of record[[BR]]- ST_Quantile(raster, nband) -> set of records[[BR]]- ST_ApproxQuantile(rast raster, nband int, exclude_nodata_value boolean, sample_percent double precision, quantiles double precision[]) -> set of records||BP||||2 weeks||2400||done|| |
134 | | ||[[BR]]'''Other functions''' |||||||||| |
135 | | ||- ST_AsBinary(raster, compression) ([wiki:WKTRaster/SpecificationWorking03 specifications])|| ML (start ST_AsBinary) || ||2 weeks||2400 / !DevTime from MD||in-progress|| |
136 | | ||- ST_RasterFromWKB(raster, [<srid>])|| TBD || TBD || - || - ||todo|| |
137 | | ||- ST_RasterFromText(string, [<srid>])|| TBD || TBD || - || - ||todo|| |
138 | | ||- ST_AsText(raster))|| TBD || TBD || - || - ||todo|| |
139 | | ||- ST_SetPath(string)|| TBD || TBD || - || - ||todo|| |
140 | | |
141 | | == GDAL Driver Milestones == |
142 | | |
143 | | ||'''Objectives and Tasks'''||'''Coder'''||'''Approx. Schedule'''||'''Time'''||'''Approx. Contribution (US$)'''||'''Status'''|| |
144 | | ||[[BR]]'''Objective 1 - Being able to read in-db regular blocking WKT Raster with the GDAL driver. ''' ([wiki:WKTRaster/SpecificationWorking01#Objective0.1.6g-BeingabletoreadandwriteWKTRasterwithGDALdriver. specifications])|||||||||| |
145 | | ||- Read a WKT Raster from database (in-db, regular blocking)||JA||July - August 2010||TBD||!DevTime from JA ||done|| |
146 | | ||[[BR]]'''Objective 2 - Being able to read out-db irregular blocking WKT Raster with the GDAL driver. ''' ([wiki:WKTRaster/SpecificationWorking01#Objective0.1.6g-BeingabletoreadandwriteWKTRasterwithGDALdriver. specifications])|||||||||| |
147 | | ||- Read a WKT Raster from database (out-db, irregular blocking)||JA||July - August 2010||TBD||!DevTime from JA ||todo|| |
148 | | ||[[BR]]'''Objective 3 - Being able to write WKT Raster with the GDAL driver. ''' ([wiki:WKTRaster/SpecificationWorking01#Objective0.1.6g-BeingabletoreadandwriteWKTRasterwithGDALdriver. specifications])|||||||||| |
149 | | ||- Create a new WKT Raster in database (in-db/out-db, regular/irregular blocking)||JA||July - August 2010||TBD||!DevTime from JA ||todo|| |
150 | | |
151 | | |
152 | | == Old Milestones for Beta 0.1.6 - All Done == |
153 | | |
154 | | |
155 | | ||'''Objectives and Tasks'''||'''Coder'''||'''Approx. Schedule'''||'''Time'''||'''Approx. Contribution (US$)'''||'''Status'''|| |
156 | | |
157 | | ||[[BR]]'''Objective 0.1.6a - Being able to create tables with RASTER fields'''|||||||||| |
158 | | ||Initial setup: type definition, canonical input/output||SS||January 2009||4 weeks||2400 by SC[[BR]]2600 by MD||done |
159 | | ||[[BR]]'''Objective 0.1.6b - Being able to select RASTER values based on bbox spatial relation'''|||||||||| |
160 | | ||[http://postgis.refractions.net/documentation/manual-1.3/ch06.html#id2747989 Spatial operators with semantic matching postgis ones] ||SS||February 2009||1 week||1200 by TE||done |
161 | | ||GiST indexing support||PR||February 2009||1 week||1200 by SC||done |
162 | | ||[[BR]]'''Objective 0.1.6c - Being able to load raster in the database''' ([wiki:WKTRaster/SpecificationWorking01#Objective0.1.6c-Beingabletoloadrastersinthedatabase specifications])|||||||||| |
163 | | ||gdal2wktraster.py as a prototype of raster2pgsql.exe based on [http://www.gdal.org/ GDAL]||ML||February 2009||1 week||!DevTime from MD||done |
164 | | ||[[BR]]'''Objective 0.1.6d - Being able to get all the properties of a raster (all the "Get" functions).''' ([wiki:WKTRaster/SpecificationWorking01#Objective0.1.6d-BeingabletogetallthepropertiesofarasteralltheGetfunctions. specifications])|||||||||| |
165 | | ||- ST_SRID(raster|geometry) -> integer[[BR]]- ST_Width(raster) -> integer[[BR]]- ST_Height(raster) -> integer[[BR]]- ST_PixelSizeX(raster) -> float32[[BR]]- ST_PixelSizeY(raster) -> float32[[BR]]- ST_RotationX(raster) -> float32[[BR]]- ST_RotationY(raster) -> float32[[BR]]- ST_UpperLeftX(raster) -> float32[[BR]]- ST_UpperLeftY(raster) -> float32[[BR]]- ST_GeoReference(raster) -> string[[BR]]- ST_NumBands(raster) -> integer[[BR]]- ST_BandPixelType(raster, band) -> string[[BR]]- ST_BandNoDataValue(raster, band) -> float32||ML||February 2009||1 weeks||!DevTime from MD||done|| |
166 | | ||[[BR]]'''Objective 0.1.6e - Being able to intersect geometries and rasters to produce geometries . ''' ([wiki:WKTRaster/SpecificationWorking01#Objective0.1.6e-Beingabletointersectvectorandrastertoproducevector. specifications])|||||||||| |
167 | | ||- ST_ConvexHull(raster) -> polygon geometry[[BR]]- ST_Envelope(raster|geometry) -> polygon geometry[[BR]]- ST_Polygon(raster) -> polygon geometry[[BR]]- ST_DumpAsPolygons(raster) -> polygon geometry set[[BR]]- ST_Intersects(raster|geometry, raster|geometry)[[BR]]- ST_Intersection(raster|geometry, raster|geometry)->geometry set||JA & PR||July - August 2010||8 weeks||4800 by SC / !DevTime from JA ||done|| |
168 | | ||[[BR]]'''Objective 0.1.6f - Being able to set all the properties of a raster.''' ([wiki:WKTRaster/SpecificationWorking03 specifications])|||||||||| |
169 | | ||- ST_SetSRID(raster|geometry, integer)[[BR]]- ST_SetPixelSize(raster, pixelsizex, pixelsizey)[[BR]]- ST_SetBandNoDataValue(raster, band, nodatavalue)[[BR]]- ST_SetGeoReference(raster, string)[[BR]]- ST_SetSkew(raster, skewx, skewy)[[BR]]- ST_SetUpperLeft(raster, x, y)||DZ||April 2010||1 week||Devtime from DZ||done|| |
170 | | ||[[BR]]'''Objective 0.1.6g - Being able to register images as raster stored outside the database.''' ([wiki:WKTRaster/SpecificationWorking02#ObjectiveB02a-BeingabletoregisterTIFFandJPEGtilesasrasterstoredoutsidethedatabase. specifications])|||||||||| |
171 | | ||- Mostly changes to gdal2wktraster.py[[BR]]- ST_BandPath() -> string||PR||February 2010||1 weeks||2400||done|| |
172 | | ||[[BR]]'''Objective 0.1.6h - Being able to quickly get metadata for raster and band.'''|||||||||| |
173 | | ||- ST_Metadata(rast)[[BR]]- ST_BandMetadata(rast||PR||June 2010||1 day||!DevTime from SC||done|| |
174 | | ||[[BR]]'''Objective 0.1.6i - Being able to easily convert world coordinates to raster coordinates.'''|||||||||| |
175 | | ||- ST_World2RasterCoordX(rast, xw, yw)[[BR]]- ST_World2RasterCoordY(rast, xw, yw)[[BR]]- ST_Raster2WorldCoordX(rast, xr, yr)[[BR]]- ST_Raster2WorldCoordY(rast, xr, yr)||PR||June 2010||3 day||!DevTime from SC||done|| |
176 | | ||[[BR]]'''Objective 0.1.6j - Being able to set and know if a band nodata value is a true nodata value.'''|||||||||| |
177 | | ||- ST_BandHasNodataValue(rast, band)[[BR]]- ST_SetBandHasNodataValue(rast, band, boolean)||PR||June 2010||1 day||!DevTime from SC||done|| |
178 | | ||[[BR]]'''Objective 0.1.6k - Being able to get and set the value of a pixel.'''|||||||||| |
179 | | ||- ST_Value(rast, band, x, y)[[BR]]- ST_SetValue(rast, band, x, y, val)||PR||July 2010||1 day||!DevTime from SC||done|| |
| 82 | * C version of raster2pgsql (in-progress) |
| 83 | * raster_column and raster_overview as view |
| 84 | * ST_Intersection(raster, raster) |
| 85 | * Break up RASTER_mapAlgebra2 so that the main engine is in rt_core instead of rt_pg. This is needed for C-based aggregate functions that run against MapAlgebra. |
| 86 | * Multi-band ST_AddBand() |
| 87 | * Different variant of ST_SetValues() |
| 88 | * ST_Within(), ST_contains(), ST_Overlaps(), ST_Touches, etc... |
| 89 | * C version of the ST_Union(raster) aggregate |
| 90 | * ST_UnionToRaster() and ST_BurnToRaster() |
| 91 | * MultiBand MapAlgebra(raster, raster) |
| 92 | * ST_CreateOverview(), ST_IsRegularlyTiled(), ST_HasOverlaps(), ST_HasGaps(), ST_HasTileSameSize(), ST_HasTileAligned() |
| 93 | * Subtiling of rasters (PostGIS 3.0 or create a new raster type) |
| 94 | * |