4 votos

ArcObjects 10.1 .NET Convertir Punto de WGS1984 a OSGB1936

Por favor, ¿puede alguien ayudarme a convertir un punto de WGS1984 a OSGB1936? He seguido toda la documentación (o eso creo...) y aún no he avanzado en este problema. Este es mi código :

Type factoryType = Type.GetTypeFromProgID("esriGeometry.SpatialReferenceEnvironment");
System.Object obj = Activator.CreateInstance(factoryType);
ISpatialReferenceFactory3 spacialReferenceFactory3 = obj as ISpatialReferenceFactory3;

// Crear transformación de WGS84 a OSGB86
IGeoTransformation geoTrans = spacialReferenceFactory3.CreateGeoTransformation((int)esriSRGeoTransformationType.esriSRGeoTransformation_OSGB1936_To_WGS1984Petrol) as IGeoTransformation;

ISpatialReference fromSpatialReference;
ISpatialReference toSpatialReference;
geoTrans.GetSpatialReferences(out fromSpatialReference, out toSpatialReference);

IGeometry5 geometry;
IPoint point = new PointClass();
point.PutCoords(51.465615, -3.159875);
geometry = point as IGeometry5;
geometry.SpatialReference = toSpatialReference;
geometry.ProjectEx(fromSpatialReference, esriTransformDirection.esriTransformForward, geoTrans, false, 0.0, 0.0);
point = new PointClass();
point = geometry as IPoint;

Mi punto está siendo devuelto del objeto Geometry como 51.46200954514034, -3.1549783406850165. He intentado usar la transformación inversa especificada en geometry.ProjectEx(), y todo lo que obtengo es el mismo X e Y que el punto original. También he probado diferentes combinaciones de inversa / hacia adelante y también intercambiando fromSpatialReference y toSpatialReference.

6voto

saint_groceon Puntos 2696

Esto imprime: 319524.804848596 174709.885049006.

private static void TestProjection()
{
    Type factoryType = Type.GetTypeFromProgID("esriGeometry.SpatialReferenceEnvironment"); 
    System.Object obj = Activator.CreateInstance(factoryType); 
    var srf = obj as ISpatialReferenceFactory3;

    // Crear Transformación de WGS84 a OSGB86
    var geoTrans = srf.CreateGeoTransformation((int)esriSRGeoTransformationType.esriSRGeoTransformation_OSGB1936_To_WGS1984Petrol) as IGeoTransformation;

    ISpatialReference fromSpatialReference;
    ISpatialReference toSpatialReference;
    geoTrans.GetSpatialReferences(out fromSpatialReference, out toSpatialReference);

    var wgs84GCS =  srf.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984);
    var bngPCS = srf.CreateProjectedCoordinateSystem((int)esriSRProjCSType.esriSRProjCS_BritishNationalGrid);
    if((wgs84GCS.FactoryCode != toSpatialReference.FactoryCode)
        || (bngPCS.GeographicCoordinateSystem.FactoryCode != fromSpatialReference.FactoryCode))
    {
        throw new Exception("transformación geoespacial inválida");
    }

    IGeometry5 geometry;
    IPoint point = new PointClass();
    point.PutCoords(-3.159875, 51.465615);
    geometry = point as IGeometry5;
    geometry.SpatialReference =wgs84GCS;

    geometry.ProjectEx(bngPCS, esriTransformDirection.esriTransformReverse, geoTrans, false, 0.0, 0.0);
    point = geometry as IPoint;
    Debug.Print("{0} {1}", point.X, point.Y);
}

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X