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

NameSpatial analysis routine
TypeDevelopment
RequirementsC++, GEOS, Clipper
Versionv4.8
BudgetNeeded: € 350
Allocated: € 350
Difficulty level++
DeliverablesUpdated spatial analysis routines (GEOS/Clipper)
AbstractSpatial 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).
NotesThis 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
  1. http://trac.osgeo.org/geos/
  2. http://angusj.com/delphi/clipper.php
NameGDALPolygonize
TypeDevelopment
RequirementsC++, GDAL
Versionv4.8
BudgetNeeded: € 100
Allocated: € 0
Difficulty level+
DeliverablesImplementation of Utils.Polygonize()
AbstractThe 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
  1. http://www.gdal.org/gdal__alg_8h.html#a3f522a9035d3512b5d414fb4752671b1
  2. http://www.gdal.org/gdal_polygonize.html
  3. http://bugs.mapwindow.org/view.php?id=1727
Assigned toWasim Sabir
NameScalebar and zoom buttons/levels
TypeDevelopment
RequirementsC++, GDI+
Versionv4.8
BudgetNeeded: € 250
Allocated: € 0
Difficulty level+
DeliverablesThe ability to show a scalebar, zoom buttons and zoom levels on the map
AbstractA 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
  1. http://www.mapwindow.org/SummerOfCode/2012/graphics/images/zoomlevels.jpg
NameESRI FileGDB Support
TypeDevelopment
RequirementsC++, GDAL, ESRI FileGDB
Versionv4.8
BudgetNeeded: € 150
Allocated: € 0
Difficulty level+
DeliverablesImplementation of read and write access for ESRI's FileGDB datastores
AbstractWe'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
  1. http://www.gdal.org/ogr/drv_filegdb.html
  2. #Geodatabase
  3. http://trac.osgeo.org/gdal/wiki/FileGDB
  4. http://resources.arcgis.com/content/geodatabases/10.0/file-gdb-api
NameGeodatabase support
TypeDevelopment
RequirementsC++, GDAL, database
Versionv4.8, v4.9
BudgetNeeded: € 350
Allocated: € 0
Difficulty level++
DeliverablesImplementation of read and write access for spatial data in several geo-databases, at least PostGIS and SQLite needs to be implemented
AbstractUsing 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
NotesWe'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
  1. http://www.gdal.org/ogr/drv_pg.html
  2. http://www.gdal.org/ogr/drv_sqlite.html
  3. http://www.gdal.org/ogr/drv_sde.html
  4. http://www.gdal.org/ogr/drv_oci.html
  5. http://www.gdal.org/ogr/drv_pgeo.html
  6. http://www.gdal.org/ogr/drv_mysql.html
  7. http://www.gdal.org/ogr/drv_mssqlspatial.html
  8. http://www.gdal.org/ogr/drv_geomedia.html
  9. http://www.qgis.nl/2012/07/06/esri-file-based-geodatabases-en-oracle-connecties-openen-met-qgis/?lang=en
  10. http://hub.qgis.org/projects/quantum-gis/wiki/Download#61-Source-Code
  11. http://php.net/manual/en/book.pgsql.php
NameWFS, WFS-T, WMS Support
TypeDevelopment
RequirementsC++, GDAL
Versionv4.9
BudgetNeeded: € 200
Allocated: € 0
Difficulty level+
DeliverablesFunctions to connect to a WMS and WFS
AbstractGDAL/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
NotesWe'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
  1. http://www.gdal.org/frmt_wms.html
  2. http://www.gdal.org/ogr/drv_wfs.html
NameImplement GDAL/OGR functions
TypeDevelopment
RequirementsC++, GDAL
Versionv4.8
BudgetNeeded: € 250
Allocated: € 250
Difficulty level+
DeliverablesImplementation 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.
AbstractWe'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
  1. http://svn.mapwindow.org/svnroot/SupportLibraries/GDAL/gdal19/apps/
  2. http://www.mapwindow.org/documentation/mapwingis4.8/class_utils.html#af835a8ce5493bcd485a92bdd1564f453
  3. http://www.gdal.org/gdal_utilities.html
  4. http://www.gdal.org/ogr_utilities.html
  5. http://bugs.mapwindow.org/view.php?id=1703
Assigned toTong Zhai

Bug fixing tasks

Name#2000: Transparency of point images
TypeBug fixing
RequirementsC++
Versionv4.8
BudgetNeeded: € 100
Allocated: € 100
Difficulty level+
DeliverablesFixed issue
AbstractIt seems the transparency of an icon/image used as an point symbol doesn't work.
References
  1. http://bugs.mapwindow.org/view.php?id=2000
  2. http://www.mapwindow.org/phorum/read.php?3,22874
Assigned toWasim Sabir
Name#981: Opening big file very slow (BIL)
TypeBug fixing
RequirementsC++
Versionv4.8
BudgetNeeded: € 100
Allocated: € 0
Difficulty level++
DeliverablesImproved ReadRaster function
AbstractOpening 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.
NotesThis 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
  1. http://bugs.mapwindow.org/view.php?id=981
  2. http://norb.dnsalias.org/bigBil.rar
Name#2203: ASCII Grids cells are not square
TypeBug fixing
RequirementsC++
Versionv4.8
BudgetNeeded: € 75
Allocated: € 0
Difficulty level+
DeliverablesFixed issue
AbstractGianni 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.
NotesIt is probably invalid rounding behavior of GDI+ (half-pixel offset)
References
  1. http://www.mapwindow.org/phorum/read.php?5,23942
  2. http://bugs.mapwindow.org/view.php?id=2203
Assigned toWasim Sabir

Research tasks

NameOpenGL / OpenCL
TypeResearch
RequirementsC++, OpenGL, OpenCL
Versionv4.9
BudgetNeeded: € 200
Allocated: € 0
Difficulty level++
DeliverablesProject plan
AbstractInvestigate 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
  1. http://en.wikipedia.org/wiki/OpenGL
  2. http://en.wikipedia.org/wiki/OpenCL
NameStarSpan
TypeResearch
RequirementsC++
Versionv4.9
BudgetNeeded: € 150
Allocated: € 0
Difficulty level+
DeliverablesProject 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
  1. http://starspan.projects.atlas.ca.gov/doku/doku.php?id=start
NameUpdate to .NET framework v4.0 or v4.5
TypeResearch
RequirementsC++
Versionv4.9
BudgetNeeded: € 100
Allocated: € 0
Difficulty level+
DeliverablesProject plan
AbstractMapWinGIS 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
  1. http://blogs.msdn.com/b/dotnet/archive/2009/08/10/improvements-to-interop-marshaling-in-v4-il-stubs-everywhere.aspx
  2. http://blogs.msdn.com/b/dotnet/archive/2011/09/21/introducing-net-framework-4-5.aspx

Completed tasks

NameClipGridWithPolygon
TypeDevelopment
RequirementsC++, GDAL
Versionv4.8
BudgetNeeded: € 350
Allocated: € 350
Difficulty level+
DeliverablesImplementation of the ClipGridWithPolygon() in the Utils or Grid class of MapWinGIS
AbstractInput: 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
  1. http://starspan.projects.atlas.ca.gov/doku/doku.php?id=start
  2. http://svn.mapwindow.org/svnroot/MapWindow4Dev/MapWinGeoProc/clsSpatialOperations/Clipping/ClipGridWithPoly.cs
  3. http://bugs.mapwindow.org/view.php?id=2113
  4. http://bugs.mapwindow.org/view.php?id=2111
  5. http://bugs.mapwindow.org/view.php?id=1987
  6. http://bugs.mapwindow.org/view.php?id=2038
  7. http://bugs.mapwindow.org/view.php?id=1582
  8. http://bugs.mapwindow.org/view.php?id=1659
  9. http://bugs.mapwindow.org/view.php?id=1841
Assigned toSergei Leschinsky
Name#1431: GDI Leaks
TypeBug fixing
RequirementsC++, GDI
Versionv4.8
BudgetNeeded: € 50
Allocated: € 50
Difficulty level+
DeliverablesFixed issue
AbstractResizing 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
  1. http://bugs.mapwindow.org/view.php?id=1431
Assigned toBrad Hester
NameZonal statistics
TypeDevelopment
RequirementsC++, GDAL
Versionv4.8
BudgetNeeded: € 200
Allocated: € 200
Difficulty level++
DeliverablesImplementation of Utils.ZonalStatistics(bool overwriteFields)
AbstractInput 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.
NotesSome 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
  1. http://osgeo-org.1560.n6.nabble.com/gdal-dev-zonal-statistics-with-gdal-td4982463.html
  2. http://www.gdal.org/gdalinfo.html
Assigned toSergei Leschinsky
Name#1019: Error in Grid.set_Value for GridDataType=BinaryDataTz
TypeBug fixing
RequirementsC++
Versionv4.8
BudgetNeeded: € 100
Allocated: € 100
Difficulty level+
DeliverablesFixed issue
AbstractTrying 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
  1. http://bugs.mapwindow.org/view.php?id=1019
Assigned toBrad Hester
Name#2092: Error when adding shapefile from a read-only network directory
TypeBug fixing
RequirementsC++
Versionv4.8
BudgetNeeded: € 50
Allocated: € 50
Difficulty level+
DeliverablesFixed issue
AbstractWhenever 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).
NotesA possible fix is already mentioned in ref #2
References
  1. http://bugs.mapwindow.org/view.php?id=2092
  2. http://www.mapwindow.org/phorum/read.php?3,20431,20454
Assigned toBrad Hester
NameUpgrade Spatial Index library
TypeDevelopment
RequirementsC++
Versionv4.8
BudgetNeeded: € 100
Allocated: € 100
Difficulty level+
DeliverablesUpgraded library
AbstractWe'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
  1. http://svn.mapwindow.org/svnroot/SupportLibraries/SpatialIndex/
  2. http://libspatialindex.github.com/
Assigned toWasim Sabir
NameJoining attribute data
TypeDevelopment
RequirementsC++
Versionv4.9
BudgetNeeded: € 250
Allocated: € 250
Difficulty level++
DeliverablesImplementation of Table.Join
AbstractSometimes 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
  1. http://www.gdal.org/ogr/ogr_sql.html#ogr_sql_joins
Assigned toSergei Leschinsky
Name#1344: Number of shapefiles that can be added is limited
TypeBug fixing
RequirementsC++
Versionv4.8
BudgetNeeded: € 150
Allocated: € 150
Difficulty level++
DeliverablesReplace the C runtime calls with the native Win32 API calls.
AbstractFILE 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
  1. http://bugs.mapwindow.org/view.php?id=1344
  2. http://www.codeproject.com/Articles/29959/Changing-FileDescriptor-s-Limit-and-TIME_WAIT-Limi
Assigned toWasim Sabir
Name#2183: Remove VB6-compatible objects
TypeBug fixing
RequirementsC++
Versionv4.9
BudgetNeeded: € 100
Allocated: € 100
Difficulty level+
DeliverablesRemoved and/or updated methods
AbstractSome 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
NotesThis doesn't seem to be a problem anymore. This task is withdrawn.
References
  1. http://bugs.mapwindow.org/view.php?id=2183
Assigned toWasim Sabir


Sponsors

TopX Geo-ICT - Support for MapWindow GIS