Exemplo n.º 1
0
        private Tuple <IGeoTransformation, esriTransformDirection> GetPredefinedTransformation(
            SpatialReferenceEnvironmentClass spatialReferenceFactory,
            ISpatialReference fromSpatialReference,
            ISpatialReference toSpatialReference)
        {
            int?fromFactoryCode = GetGCSFactoryCode(fromSpatialReference);
            int?toFactoryCode   = GetGCSFactoryCode(toSpatialReference);

            if (!fromFactoryCode.HasValue || !toFactoryCode.HasValue)
            {
                return(null);
            }

            var geographicTransformationsSet = spatialReferenceFactory.CreatePredefinedGeographicTransformations();

            geographicTransformationsSet.Reset();

            var geoTransformation = geographicTransformationsSet.Next() as IGeoTransformation;

            try
            {
                while (geoTransformation != null)
                {
                    geoTransformation.GetSpatialReferences(
                        out ISpatialReference bufferForFromGeoCoordSystemSR,
                        out ISpatialReference bufferForToGeoCoordSystemSR);

                    if (bufferForFromGeoCoordSystemSR.FactoryCode == fromFactoryCode &&
                        bufferForToGeoCoordSystemSR.FactoryCode == toFactoryCode)
                    {
                        return(new Tuple <IGeoTransformation, esriTransformDirection>
                                   (geoTransformation, esriTransformDirection.esriTransformForward));
                    }

                    if (bufferForFromGeoCoordSystemSR.FactoryCode == toFactoryCode &&
                        bufferForToGeoCoordSystemSR.FactoryCode == fromFactoryCode)
                    {
                        return(new Tuple <IGeoTransformation, esriTransformDirection>
                                   (geoTransformation, esriTransformDirection.esriTransformReverse));
                    }
                    geoTransformation = geographicTransformationsSet.Next() as IGeoTransformation;
                }
            }
            finally
            {
                Marshal.ReleaseComObject(geographicTransformationsSet);
            }
            return(null);
        }