Tasks overview
Introduction
Here's a list of tasks that are needed for MapWinGIS.More tasks will be defined in the following days.
Be aware most people in the MapWindow community are volunteers and do it for free.
That also means that if you have a question it might take a day or two before you'll get an answer.
The skills you require are at least C++, OOP, Visual Studio. Having knowledge of or interests in GIS is also very helpful.
The abstracts of the tasks are guidelines and are open for debate.
Implementations for v4.8 also need to be implemented in v4.9.
All tasks are completed when the deliverables are produced, the documentation is updated and sample code is provided.
The tasks are divided in three sections: development and research tasks and bug fixes.
You first need to do a few implementation task before you can do a research task. Tasks for v4.8 have a high priority.
Mail to bontepaarden[AT]gmail[D0T]com if you want to take a task and I'll allocate the budget and assign the task to you.
Development tasks
| Name | Spatial analysis routine |
|---|---|
| Type | Development |
| Requirements | C++, GEOS, Clipper |
| Version | v4.8 |
| Budget | Needed: € 350 Allocated: € 350 |
| Difficulty level | ++ |
| Deliverables | Updated spatial analysis routines (GEOS/Clipper) |
| Abstract | Spatial analysis is largely based around union, intersect, difference, symmetrical difference and clipping. The GEOS and Clipper engines, which are used by MapWinGIS currently provide the approaches required, however fail when using large datasets apparently due to memory allocation limitations or array indexing not being sufficiently large, or because inputs and/or results generate illegal topology e.g. self-intersections, which cannot be further handled due possibly to cyclic redundancy. The spatial analysis routines should resolve spatial topology issues as well as be able to handle large datasets of any size, on any 32-bit or 64-bit PC, as well as handle successive iterations of the analysis on two or more datasets i.e. the result of A and B with C etc. and so forth. Datasets for testing will be supplied. These are national and provincial information to South Africa, which comprise from < 1000 polygons to > 1000000 and need to be used in strategic planning of infrastructure design. An approach may be to tile input shapefiles into usable chunks and consolidate all the results iteratively (resulting outputs must not show tile/grid lines). This would allow for multi-threading to be used efficiently and effectively and RAM to be managed. Other approaches should be investiated too before a final methodology is applied and tested. Feedback to the user is also important via the callback routine within MapWinGIS. Insignificant shapes which are less than the area/length specified by the Global area/length parameters of MapWindow, should be dissolved into their adjacent shape where it's largest side is met (shapes should not be deleted as this will create unrequired 'gaps' in the data topology). |
| Notes | This task has a high priority and the needed budget is already allocated. In about two weeks time we will upgrade the supporting libraries for MapWinGIS, using the latest stable version of GDAL and GEOS. I just saw a new version of the Clipper lib is available: 4.8.4 (1 June 2012) Updating to that version might solve some issues already. |
| References |
| Name | GDALPolygonize |
|---|---|
| Type | Development |
| Requirements | C++, GDAL |
| Version | v4.8 |
| Budget | Needed: € 100 Allocated: € 0 |
| Difficulty level | + |
| Deliverables | Implementation of Utils.Polygonize() |
| Abstract | The ocx already has implemented Utils.CreateContours. This will result in a polyline shapefile. Using GDALPolygonize (see ref #1) a polygon shapefile can be created. GDAL already provides a Python script as an example, see ref #2 |
| References | |
| Assigned to | Wasim Sabir |
| Name | Scalebar and zoom buttons/levels |
|---|---|
| Type | Development |
| Requirements | C++, GDI+ |
| Version | v4.8 |
| Budget | Needed: € 250 Allocated: € 0 |
| Difficulty level | + |
| Deliverables | The ability to show a scalebar, zoom buttons and zoom levels on the map |
| Abstract | A scalebar should be added to the map, of course it needs to interact with the current scale of the map and the location can be set (top-left, top-right, bottom-left or bottom-right) Zoom buttons and zoom levels, like on OpenLayers and Google Maps should be shown on the map, see ref #1 for an example. |
| References |
| Name | ESRI FileGDB Support |
|---|---|
| Type | Development |
| Requirements | C++, GDAL, ESRI FileGDB |
| Version | v4.8 |
| Budget | Needed: € 150 Allocated: € 0 |
| Difficulty level | + |
| Deliverables | Implementation of read and write access for ESRI's FileGDB datastores |
| Abstract | We've just upgraded to GDAL v1.9 and enabled support for ESRI's FileGDB datastores. ogrinfo.exe shows it can read/write these datastores, see ref #1. MapWinGIS does not yet know how to handle it. These task is related to the more general task 'Geodatabase support' (ref #2) |
| References |
| Name | Geodatabase support |
|---|---|
| Type | Development |
| Requirements | C++, GDAL, database |
| Version | v4.8, v4.9 |
| Budget | Needed: € 350 Allocated: € 0 |
| Difficulty level | ++ |
| Deliverables | Implementation of read and write access for spatial data in several geo-databases, at least PostGIS and SQLite needs to be implemented |
| Abstract | Using the GDAL/OGR library it is possible to connect to several geodatabases, see ref #1-#9. Because MapWinGIS is using the GDAL/ORG library it should be possible to add these functionality as well. A possible solution is to create an in-memory shapefile with the result of the database query. You can also have a look how QGIS is handling this, see ref #10 & #11. The best solution is to create a new class called 'Geodatabases' with the following functions: * Connect(string connectionstring) * TestConnection() * Execute(string query) * Query(string query) * Update(string query) * Close() Used the PHP functions as inspiration, see ref #12 |
| Notes | We've just upgaded to GDAL v1.9 and enables ESRI File GDB support. ogrinfo.exe shows GDAL can now read File GDB databases. MapWinGIS does not yet know how to handle it. |
| References |
|
| Name | WFS, WFS-T, WMS Support |
|---|---|
| Type | Development |
| Requirements | C++, GDAL |
| Version | v4.9 |
| Budget | Needed: € 200 Allocated: € 0 |
| Difficulty level | + |
| Deliverables | Functions to connect to a WMS and WFS |
| Abstract | GDAL/OGR can connect to a WMS and WFS. MapWinGIS v4.9 already has a fully implemented Tiles class for connecting to TMS. That class can be used or the GDAL/OGR library can be used to implement WFS, WMS support. WMS returns images, look at the Tiles class how to handle this. WFS returns vectors in GML format. Creating an in-memory shapefile will be the easiest (also look at the 'Geodatabase support'-task) WFS-T is to write to a WFS server |
| Notes | We've just upgaded to GDAL v1.9 and enables libCurl support. ogrinfo.exe and gdalinfo.exe shows GDAL can now read WMS and WFS data. MapWinGIS does not yet know how to handle it. |
| References |
| Name | Implement GDAL/OGR functions |
|---|---|
| Type | Development |
| Requirements | C++, GDAL |
| Version | v4.8 |
| Budget | Needed: € 250 Allocated: € 250 |
| Difficulty level | + |
| Deliverables | Implementation of 7 functions in the Utils class of MapWinGIS. No GUI is needed at this point. Sample scripts to test the methods do need to be created. |
| Abstract | We've just finished upgrading to GDAL v1.9 GDAL uses several executables to perform very interesting tasks. Some of those executables should be merged into the ocx. This can be done by copying the needed files from GDAL (see ref #1) to the Utils class of the ocx. The Main() in the original file should be renamed. The following GDAL functions need to be included (see ref #3 for more info): 1. gdal_rasterize 2. gdal_translate 3. gdalbuildvrt 4. gdalinfo 5. gdalwarp The following OGR functions need to be included (see ref #4 for more info): 6. ogrinfo 7. ogr2ogr |
| References | |
| Assigned to | Tong Zhai |
Bug fixing tasks
| Name | #2000: Transparency of point images |
|---|---|
| Type | Bug fixing |
| Requirements | C++ |
| Version | v4.8 |
| Budget | Needed: € 100 Allocated: € 100 |
| Difficulty level | + |
| Deliverables | Fixed issue |
| Abstract | It seems the transparency of an icon/image used as an point symbol doesn't work. |
| References | |
| Assigned to | Wasim Sabir |
| Name | #981: Opening big file very slow (BIL) |
|---|---|
| Type | Bug fixing |
| Requirements | C++ |
| Version | v4.8 |
| Budget | Needed: € 100 Allocated: € 0 |
| Difficulty level | ++ |
| Deliverables | Improved ReadRaster function |
| Abstract | Opening a 2Gb BIL file take several minutes, essentially due to the CImageClass::ReadRaster() implementation. Also getting it's layer property take long time, due to several call to CGrid::get_Minimum() which parse the all file. Remark: Using the current version of MapWindow loading the 2.4GB file in ref #2 takes about 1 minute. It seems useful to check if this can be speed up. |
| Notes | This file type should be opened using GDAL. We need to check if the loading speed has improved when we upgrade to GDAL v1.9 |
| References |
| Name | #2203: ASCII Grids cells are not square |
|---|---|
| Type | Bug fixing |
| Requirements | C++ |
| Version | v4.8 |
| Budget | Needed: € 75 Allocated: € 0 |
| Difficulty level | + |
| Deliverables | Fixed issue |
| Abstract | Gianni reported this problem in ref #1. An ASCII file of 4 cells is shown in the map with each cell a different size. Loading the grid as an image doesn't seem to produce the error. |
| Notes | It is probably invalid rounding behavior of GDI+ (half-pixel offset) |
| References | |
| Assigned to | Wasim Sabir |
Research tasks
| Name | OpenGL / OpenCL |
|---|---|
| Type | Research |
| Requirements | C++, OpenGL, OpenCL |
| Version | v4.9 |
| Budget | Needed: € 200 Allocated: € 0 |
| Difficulty level | ++ |
| Deliverables | Project plan |
| Abstract | Investigate if implementing OpenGL and/or OpenCL will improve the performance of MapWinGIS. If MapWInGIS will benefit from it a project plan should be written with the implications and the time/budget needed. |
| References |
| Name | StarSpan |
|---|---|
| Type | Research |
| Requirements | C++ |
| Version | v4.9 |
| Budget | Needed: € 150 Allocated: € 0 |
| Difficulty level | + |
| Deliverables | Project plan |
| Abstract | "StarSpan is designed to bridge the raster and vector worlds of spatial analysis using fast algorithms for pixel level extraction from geometry features" We should investigate if using this library will be beneficiary for MapWinGIS. If it is a project plan should be written with the implications and the time/budget needed. |
| References |
| Name | Update to .NET framework v4.0 or v4.5 |
|---|---|
| Type | Research |
| Requirements | C++ |
| Version | v4.9 |
| Budget | Needed: € 100 Allocated: € 0 |
| Difficulty level | + |
| Deliverables | Project plan |
| Abstract | MapWinGIS is currently targeting .NET v3.5. Newer (not compatible) versions of the .NET framework are available or will be in the near future: v4.0 & v4.5 Some research needs to be done if parts of the code should be rewritten to use the latest possibilities of the new .NET versions. This research should result in a project plan showing which parts should be rewritten, what the benefits are and how much time/budget it will need. |
| References |
Completed tasks
| Name | ClipGridWithPolygon |
|---|---|
| Type | Development |
| Requirements | C++, GDAL |
| Version | v4.8 |
| Budget | Needed: € 350 Allocated: € 350 |
| Difficulty level | + |
| Deliverables | Implementation of the ClipGridWithPolygon() in the Utils or Grid class of MapWinGIS |
| Abstract | Input: large grid file, smaller polygon shape, KeepExtent Output: new grid file The input grid should be clipped using the smaller input shape. Meaning grid cells outside the polygon should be removed. Because a grid file is always square not all grid cells can be removed, those should be set to the NoData value. If KeepExtent is set to true no cells should be removed and the cells outside the polygon should be set to the NoData value. We already have a method in the MapWinGeoProc library (reference #2) that is working OK on 32-bit, but doesn't work on 64-bit. And most likely a C++ version will be faster and more stable. The StarSpan project (reference #1) is an Open Source project which also have an implementation of this task. |
| References |
|
| Assigned to | Sergei Leschinsky |
| Name | #1431: GDI Leaks |
|---|---|
| Type | Bug fixing |
| Requirements | C++, GDI |
| Version | v4.8 |
| Budget | Needed: € 50 Allocated: € 50 |
| Difficulty level | + |
| Deliverables | Fixed issue |
| Abstract | Resizing the Map Control causes a GDI Leak. Every time the control is resized, the number of GDI handles increases. The test script (CountGDIObjects.cs) shows the number of GDI objects increases with every map.Resize() The test shows 8xDC (invalid bitmap handle) and 2xfont(Ariel) GDIs not freed |
| References | |
| Assigned to | Brad Hester |
| Name | Zonal statistics |
|---|---|
| Type | Development |
| Requirements | C++, GDAL |
| Version | v4.8 |
| Budget | Needed: € 200 Allocated: € 200 |
| Difficulty level | ++ |
| Deliverables | Implementation of Utils.ZonalStatistics(bool overwriteFields) |
| Abstract | Input files are a grid file and a polygon shapefile. For every shape of the shapefile statistics of the grid needs to be calculated and added as attributes. The following statistics need to be calculated: * MEAN Calculates the average of all cells in the input in_value_raster that belong to the same zone as the output cell. * MAJORITY Determines the value that occurs most often of all cells in the input in_value_raster that belong to the same zone as the output cell. * MAXIMUM Determines the largest value of all cells in the input in_value_raster that belong to the same zone as the output cell. * MEDIAN Determines the median value of all cells in the input in_value_raster that belong to the same zone as the output cell. * MINIMUM Determines the smallest value of all cells in the input in_value_raster that belong to the same zone as the output cell. * MINORITY Determines the value that occurs least often of all cells in the input in_value_raster that belong to the same zone as the output cell. * RANGE Calculates the difference between the largest and smallest value of all cells in the input in_value_raster that belong to the same zone as the output cell. * STD Calculates the standard deviation of all cells in the input in_value_raster that belong to the same zone as the output cell. * SUM Calculates the total value of all cells in the input in_value_raster that belong to the same zone as the output cell. * VARIETY Calculates the number of unique values for all cells in the input in_value_raster that belong to the same zone as the output cell. If the parameter 'overwriteFields' is set to false new fields need to be created with a number if the field already exists, i.e. Mean1, Mean2, etc. |
| Notes | Some discussions about this was on the GDAL Dev mailing list, see ref #1. Gdalinfo -stats -mm -hist is already calculating some statistics, see ref #2 |
| References | |
| Assigned to | Sergei Leschinsky |
| Name | #1019: Error in Grid.set_Value for GridDataType=BinaryDataTz |
|---|---|
| Type | Bug fixing |
| Requirements | C++ |
| Version | v4.8 |
| Budget | Needed: € 100 Allocated: € 100 |
| Difficulty level | + |
| Deliverables | Fixed issue |
| Abstract | Trying to write values to a Binary (.bgd) grid file. The grid file has GridDataType set to LongDataType and InRam set to False. Instead of expected correct values zeros are written. Only the value of the lower right corner grid cell is written correctly. This bug only occurs when the InRam parameter in Grid.CreateNew() is False and GridDataType is LongDataType or ShortDataType. When InRam is True no errors occur. To reproduce this bug, run the MapWindow script in the attachment of the issue report, see ref #1. Correct result is a grid with increasing cell values from 1 to 10000. Result produced by MapWinGIS is a grid with lower right corner cell=10000 and all other cells zero. |
| References | |
| Assigned to | Brad Hester |
| Name | #2092: Error when adding shapefile from a read-only network directory |
|---|---|
| Type | Bug fixing |
| Requirements | C++ |
| Version | v4.8 |
| Budget | Needed: € 50 Allocated: € 50 |
| Difficulty level | + |
| Deliverables | Fixed issue |
| Abstract | Whenever opening any file for full access fails, the files should be opened for readonly access instead. Obviously this fallback works already when full access is denied because the readonly flag of the file is set, however it is *not* working when full access is not possible for any other reason (e.g. insufficient user permissions, a read-only share, the file being blocked by another process and so on). |
| Notes | A possible fix is already mentioned in ref #2 |
| References | |
| Assigned to | Brad Hester |
| Name | Upgrade Spatial Index library |
|---|---|
| Type | Development |
| Requirements | C++ |
| Version | v4.8 |
| Budget | Needed: € 100 Allocated: € 100 |
| Difficulty level | + |
| Deliverables | Upgraded library |
| Abstract | We're currently using v1.4 of the Spatial Library (see ref #1). v1.7.1 is already out. We've tried upgrading but that didn't worked. It seems the naming of the functions have changes. It looks like changes in the namespaces. After upgrading to the latest version of the library (see ref #2) the names in MapWinGIS need to be changed to reflect the new naming convention. |
| References | |
| Assigned to | Wasim Sabir |
| Name | Joining attribute data |
|---|---|
| Type | Development |
| Requirements | C++ |
| Version | v4.9 |
| Budget | Needed: € 250 Allocated: € 250 |
| Difficulty level | ++ |
| Deliverables | Implementation of Table.Join |
| Abstract | Sometimes you have a shapefile with attributes and you have additional attribute data (Excel, CSV, DBF, etc.). That data should be joined with the current attribute data, extending the table data. The client will see no difference and assumes one data table. The following methods (or similar) need to be implemented: * Table.Join(ITable* otherTable, string field1, string field2); * Table.StopJoin(); * bool Table.IsJoined(); * bool Table.get_FieldIsJoined(fieldIndex); Probably more methods and/or properties are needed. The query will be something like SELECT * from [Table1] LEFT JOIN [Table2] ON (Table1.Field1 = Table2.Field2); The ocx does not need to know about all the different data providers. The client should handle that and put the data in an ITable which will be passed. GDAL/OGR also provides some joining, perhaps those function will help, see ref #1. No GUI is required at this point, samples are needed how to join a .dbf, .xls and .csv file (i.e. open those files as an ITable) |
| References | |
| Assigned to | Sergei Leschinsky |
| Name | #1344: Number of shapefiles that can be added is limited |
|---|---|
| Type | Bug fixing |
| Requirements | C++ |
| Version | v4.8 |
| Budget | Needed: € 150 Allocated: € 150 |
| Difficulty level | ++ |
| Deliverables | Replace the C runtime calls with the native Win32 API calls. |
| Abstract | FILE DESCRIPTOR Limit is the upper limit to the number of files that a program can open simultaneously. Windows has a hard upper file descriptor limit of 512 at the 'stdio level' i.e. any program can open a limited number of 512 files simultaneously at stdio level, but using the C runtime library Windows hard upper limit for file descriptors can be extended to 2048 i.e. any program can open upto 2048 number of files simultaneously using the C runtime 'setmaxstdio' call. If your application requires to open more then 2048 files simultaneously then your application should use the native Win32 API calls (E.g. CreateFile) instead of C runtime library. |
| References | |
| Assigned to | Wasim Sabir |
| Name | #2183: Remove VB6-compatible objects |
|---|---|
| Type | Bug fixing |
| Requirements | C++ |
| Version | v4.9 |
| Budget | Needed: € 100 Allocated: € 100 |
| Difficulty level | + |
| Deliverables | Removed and/or updated methods |
| Abstract | Some methods have been introduced a while back when upgrading to a newer version of .NET. OLE MapWinGIS.Image object is one of those. It causes a lot of issues with VS2010. See ref #1 for more information |
| Notes | This doesn't seem to be a problem anymore. This task is withdrawn. |
| References | |
| Assigned to | Wasim Sabir |
