Beispiel #1
0
        static void Main(string[] args)
        {
            Console.WriteLine("Transforma las coordenadas modelo de un archivo .abs.xml de un SRC a otro. No transforma el cálculo, solo las coordenadas modelo.");

            if (args.Length < 4)
            {
                Console.Error.WriteLine("Error: No has proporcionado los parámetros suficientes.");
                Console.Error.WriteLine("[ruta del archivo .prj con la cadena WKT de las coordenadas modelo originales del archivo .abs.xml.]");
                Console.Error.WriteLine("[ruta del archivo .prj con la cadena WKT de las coordenadas modelo destino del archivo .abs.xml.]");
                Console.Error.WriteLine("[ruta del archivo .abs.xml a transformar]");
                Console.Error.WriteLine("[ruta del archivo .abs.xml a generar con las coordenadas transformadas]");
                Console.Error.WriteLine("");
                Console.Error.WriteLine("Ejemplo:");
                Console.Error.WriteLine(@"TransformaCoordenadasModeloOriAbsoluta E:\Tickets\435\wgs84-16n.prj E:\Tickets\435\wgs84.prj E:\Tickets\435\a.abs.xml E:\Tickets\435\b.abs.xml");
                return;
            }
            var fábricaSrc     = new CoordinateSystemFactory();
            var srcOrigen      = fábricaSrc.CreateFromWkt(File.ReadAllText(args[0]));
            var srcDestino     = fábricaSrc.CreateFromWkt(File.ReadAllText(args[1]));
            var transformación = CoordinateTransformationFactory.CreateFromHorizontalCoordinateSystems(srcOrigen, srcDestino, null);

            var abs = new XmlDocument();

            abs.Load(args[2]);

            var nsManager = new XmlNamespaceManager(abs.NameTable);

            nsManager.AddNamespace("abs", "http://schemas.digi21.net/Digi3D/AbsoluteOrientation/v1.0");

            var coordenadasModelo = abs.SelectNodes("/abs:absolute/abs:points/abs:point/abs:model", nsManager);

            foreach (XmlNode coordenadaModelo in coordenadasModelo)
            {
                var nodoX = coordenadaModelo.SelectSingleNode("abs:x", nsManager);
                var nodoY = coordenadaModelo.SelectSingleNode("abs:y", nsManager);

                double[] coordenadasUtm =
                {
                    double.Parse(nodoX.InnerText, CultureInfo.InvariantCulture),
                    double.Parse(nodoY.InnerText, CultureInfo.InvariantCulture),
                };

                var coordenadasGeo = transformación.MathTransform.Transform(coordenadasUtm);

                var clonX = nodoX.Clone();
                clonX.InnerText = coordenadasGeo[0].ToString(CultureInfo.InvariantCulture);
                coordenadaModelo.ReplaceChild(clonX, nodoX);

                var clonY = nodoY.Clone();
                clonY.InnerText = coordenadasGeo[1].ToString(CultureInfo.InvariantCulture);
                coordenadaModelo.ReplaceChild(clonY, nodoY);
            }

            abs.Save(args[3]);
        }