= !MapGuide RFC 35 - Coordinate System API Cleanup = 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||Sep 11, 2007|| ||Last Modified||Bruce Dechant [[Timestamp]]|| ||Author||Bruce Dechant|| ||RFC Status||adopted|| ||Implementation Status||under development|| ||Proposed Milestone||2.0|| ||Assigned PSC guide(s)||(when determined)|| ||'''Voting History'''||October 10, 2007|| ||+1||Andy, Bob, Bruce, Haris, Jason, Paul, Tom|| ||+0|||| ||-0|||| ||-1|||| == Overview == This RFC contains a proposal for cleaning up the exiting coordinate system API and preparing it so that either Mentor or PROJ4 can be used with !MapGuide. == Motivation == The existing coordinate system API as written is not very convenient to use as a library with 3rd party applications or even with !MapGuide. With Mentor being open sourced in the near future it is important that we update our existing coordinate system API so that any 3rd party library can be more easily used (ie: Mentor or PROJ4). It also has an inconsistent design for what the coordinate system factory can create. This can be addressed by cleaning up the architecture via the use of interfaces and therefore create a usable library that can be easily shared. == Proposed Solution == The existing coordinate system API architecture will be cleaned up to use interfaces instead of wrapper classes. The coordinate system factory will be updated to create all coordinate system objects (coordinate systems and transforms)instead of the mixture of having to use the factory for some stuff but not all. Coordinate system measure objects will be accessed directly from an already existing coordinate system object instead of having to always create one. New coordinate system factory method for creating a coordinate system transform object: {{{ MgCoordinateSystemTransform* GetTransform(MgCoordinateSystem* pSource, MgCoordinateSystem* pTarget) }}} Measure will be accessed directly from an existing coordinate system object: {{{ MgCoordinateSystemMeasure* GetMeasure() }}} == Implications == All of the existing coordinate system APIs will remain and be backwards compatible with only the following 2 exceptions: {{{ MgCoordinateSystemTransform constructor will be removed. MgCoordinateSystemMeasure constructor will be removed. }}} The above 2 objects will instead be created via the updated coordinate system factory and accessed directly via an existing coordinate system object. == Test Plan == Ensure APIs behave as before. == Funding/Resources == Funding and resources to be supplied by Autodesk.