= !MapGuide RFC 55 - Switch from PROJ4 to CS-Map coordinate system library = This page contains an change request (RFC) for the !MapGuide Open Source project. More !MapGuide RFCs can be found on the [wiki:MapGuideRfcs RFCs] page. == Status == ||RFC Template Version||(1.0)|| ||Submission Date||August 07, 2008|| ||Last Modified||Hugues Wisniewski [[Timestamp]]|| ||Author||Hugues Wisniewski|| ||RFC Status||draft|| ||Implementation Status||(pending, under development, completed)|| ||Proposed Milestone||2.1|| ||Assigned PSC guide(s)||Tom Fukushima|| ||'''Voting History'''|| || ||+1|| || ||+0|| || ||-0|| || ||-1|| || ||no vote|| || == Overview == For the coordinate system work, MapGuide uses the PROJ4 library which is wrapped into the MgGeometry.dll binary module. The coordinate system functionality is exposed through all the API interfaces prefixed with MgCoodinateSystem This proposal aims at replacing the PROJ4 implementation with the CS-Map implementation. CS-Map was recently open sourced and posted on at:[[BR]] http://svn.osgeo.org/metacrs/csmap/ == Motivation == The CS-Map code has a broader range of functionality than what PROJ4 can offer.[[BR]] [[BR]] CS-Map can address things that are not well addressed by PROJ4 like:[[BR]] [[BR]] - vertical datum shifting[[BR]] - WKT transformations in multiple flavors like Oracle[[BR]] - greater coverage in terms of coordinate system definitions, right now more than 4000 systems, roughly 700 datums and 100 ellipsoids[[BR]] - CS-Map can provide an implementation to all the MgCoordinateSystem API methods that currently throw MgNotImplementedException[[BR]] == Proposed Solution == The current MgCoordinateSystem API implementation code is a wrapper around PROJ4[[BR]] This implementation code is located here: [[BR]] http://svn.osgeo.org/mapguide/trunk/MgDev/Common/CoordinateSystem/ [[BR]] The new API implementation would wrap the CS-Map code hosted at:[[BR]] http://svn.osgeo.org/metacrs/csmap/trunk/CsMapDev/ [[BR]] [[BR]] This API is part of the module MgGeometry.dll generated from the project:[[BR]] http://svn.osgeo.org/mapguide/trunk/MgDev/Common/Geometry/Geometry.vcproj [[BR]] [[BR]] This project is used in the solutions:[[BR]] [[BR]] http://svn.osgeo.org/mapguide/trunk/MgDev/Server/Server.sln [[BR]] http://svn.osgeo.org/mapguide/trunk/MgDev/Web/src/WebTier.sln [[BR]] [[BR]] The current PROJ4 implementation would not be supported anymore. Only CS-Map would remain in the place where the PROJ4 currently resides:[[BR]] http://svn.osgeo.org/mapguide/trunk/MgDev/Common/CoordinateSystem/ [[BR]] == Implications == PROJ4 would not be supported anymore.[[BR]] The coordinate system definitions will come from the CS-Map coordinate system dictionaries.[[BR]] All the MgCoordinateSystem API methods that currently throw MgNotImplementedException would have a fully functional implementation.[[BR]] 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]] == Test Plan == CS-Map has its own standalone unit tests so it can be tested separately.[[BR]] The existing unit MapGuide unit tests would remain the same.[[BR]] More can be added, especially for the new functionality that CS-Map provides, like the WKT conversions.[[BR]] == Funding/Resources == Provided by Autodesk.[[BR]] == Additional Notes == The code is ready to be distributed.[[BR]] If this request is accepted, the implementation would be trivial as it has already been intensively tested and is fully functional.[[BR]]