#region Disclaimer / License // Copyright (C) 2010, Jackie Ng // http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie@gmail.com // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA // #endregion using System; using System.Collections.Generic; using System.Text; namespace OSGeo.MapGuide.MaestroAPI.CoordinateSystem { /// /// A simple coordinate transformation interface /// public interface ISimpleTransform { /// /// Transforms the specified point /// /// The X coordinate /// The Y coordinate /// The transformed X coordinate /// The transformed Y coordinate void Transform(double x, double y, out double tx, out double ty); } /// /// A simple transform that wraps the NTS coordinate system transformation APIs /// /// This does not handle some of the more complex transformations like CS-Map can, /// such as WGS84.PseudoMercator (required for Google/Yahoo/Bing underlays in fusion) /// public class DefaultSimpleTransform : ISimpleTransform { private Topology.CoordinateSystems.ICoordinateSystem _source; private Topology.CoordinateSystems.ICoordinateSystem _target; private Topology.CoordinateSystems.Transformations.ICoordinateTransformation _trans; /// /// Initializes a new instance of the class. /// /// The source cs WKT. /// The target cs WKT. public DefaultSimpleTransform(string sourceCsWkt, string targetCsWkt) { var fact = new Topology.CoordinateSystems.CoordinateSystemFactory(); _source = fact.CreateFromWkt(sourceCsWkt); _target = fact.CreateFromWkt(targetCsWkt); var tfact = new Topology.CoordinateSystems.Transformations.CoordinateTransformationFactory(); _trans = tfact.CreateFromCoordinateSystems(_source, _target); } /// /// Transforms the specified point /// /// The X coordinate /// The Y coordinate /// The transformed X coordinate /// The transformed Y coordinate public void Transform(double x, double y, out double tx, out double ty) { tx = Double.NaN; ty = Double.NaN; double [] pts = _trans.MathTransform.Transform(new double[] { x, y }); tx = pts[0]; ty = pts[1]; } } }