| 1 | = !MapGuide RFC 55 - Switch from PROJ4 to CS-Map coordinate system library = |
| 2 | |
| 3 | This page contains an change request (RFC) for the !MapGuide Open Source project. |
| 4 | More !MapGuide RFCs can be found on the [wiki:MapGuideRfcs RFCs] page. |
| 5 | |
| 6 | |
| 7 | == Status == |
| 8 | |
| 9 | ||RFC Template Version||(1.0)|| |
| 10 | ||Submission Date||August 07, 2008|| |
| 11 | ||Last Modified||Hugues Wisniewski [[Timestamp]]|| |
| 12 | ||Author||Hugues Wisniewski|| |
| 13 | ||RFC Status||draft|| |
| 14 | ||Implementation Status||(pending, under development, completed)|| |
| 15 | ||Proposed Milestone||2.1|| |
| 16 | ||Assigned PSC guide(s)||Tom Fukushima|| |
| 17 | ||'''Voting History'''|| || |
| 18 | ||+1|| || |
| 19 | ||+0|| || |
| 20 | ||-0|| || |
| 21 | ||-1|| || |
| 22 | ||no vote|| || |
| 23 | |
| 24 | == Overview == |
| 25 | |
| 26 | For the coordinate system work, MapGuide uses the PROJ4 library which is wrapped into the MgGeometry.dll binary module. |
| 27 | The coordinate system functionality is exposed through all the API interfaces prefixed with MgCoodinateSystem |
| 28 | This proposal aims at replacing the PROJ4 implementation with the CS-Map implementation. CS-Map was recently open sourced and posted on at:[[BR]] |
| 29 | http://svn.osgeo.org/metacrs/csmap/ |
| 30 | |
| 31 | == Motivation == |
| 32 | |
| 33 | The CS-Map code has a broader range of functionality than what PROJ4 can offer.[[BR]] |
| 34 | [[BR]] |
| 35 | CS-Map can address things that are not well addressed by PROJ4 like:[[BR]] |
| 36 | [[BR]] |
| 37 | - vertical datum shifting[[BR]] |
| 38 | - WKT transformations in multiple flavors like Oracle[[BR]] |
| 39 | - greater coverage in terms of coordinate system definitions, right now more than 4000 systems, roughly 700 datums and 100 ellipsoids[[BR]] |
| 40 | - CS-Map can provide an implementation to all the MgCoordinateSystem API methods that currently throw MgNotImplementedException[[BR]] |
| 41 | |
| 42 | == Proposed Solution == |
| 43 | |
| 44 | The current MgCoordinateSystem API implementation code is a wrapper around PROJ4[[BR]] |
| 45 | This implementation code is located here: [[BR]] |
| 46 | http://svn.osgeo.org/mapguide/trunk/MgDev/Common/CoordinateSystem/ [[BR]] |
| 47 | The new API implementation would wrap the CS-Map code hosted at:[[BR]] |
| 48 | http://svn.osgeo.org/metacrs/csmap/trunk/CsMapDev/ [[BR]] |
| 49 | [[BR]] |
| 50 | This API is part of the module MgGeometry.dll generated from the project:[[BR]] |
| 51 | http://svn.osgeo.org/mapguide/trunk/MgDev/Common/Geometry/Geometry.vcproj [[BR]] |
| 52 | [[BR]] |
| 53 | This project is used in the solutions:[[BR]] |
| 54 | [[BR]] |
| 55 | http://svn.osgeo.org/mapguide/trunk/MgDev/Server/Server.sln [[BR]] |
| 56 | http://svn.osgeo.org/mapguide/trunk/MgDev/Web/src/WebTier.sln [[BR]] |
| 57 | [[BR]] |
| 58 | The current PROJ4 implementation would not be supported anymore. Only CS-Map would remain in the place where the PROJ4 currently resides:[[BR]] |
| 59 | http://svn.osgeo.org/mapguide/trunk/MgDev/Common/CoordinateSystem/ [[BR]] |
| 60 | |
| 61 | == Implications == |
| 62 | |
| 63 | PROJ4 would not be supported anymore.[[BR]] |
| 64 | The coordinate system definitions will come from the CS-Map coordinate system dictionaries.[[BR]] |
| 65 | All the MgCoordinateSystem API methods that currently throw MgNotImplementedException would have a fully functional implementation.[[BR]] |
| 66 | The build process documentation will have to be updated to explain how to get and build CS-Map and then build MapGuide using CS-Map instead of PROJ4.[[BR]] |
| 67 | |
| 68 | == Test Plan == |
| 69 | |
| 70 | CS-Map has its own standalone unit tests so it can be tested separately.[[BR]] |
| 71 | The existing unit MapGuide unit tests would remain the same.[[BR]] |
| 72 | More can be added, especially for the new functionality that CS-Map provides, like the WKT conversions.[[BR]] |
| 73 | |
| 74 | == Funding/Resources == |
| 75 | |
| 76 | Provided by Autodesk.[[BR]] |
| 77 | |
| 78 | == Additional Notes == |
| 79 | |
| 80 | The code is ready to be distributed.[[BR]] |
| 81 | If this request is accepted, the implementation would be trivial as it has already been intensively tested and is fully functional.[[BR]] |
| 82 | |