public void BuildXMPFiles()
        {
            if (m_images_gps5_list.Count < 1)
            {
                return;
            }

            BuildKMLFile();
            var nodeFirst = m_images_gps5_list.First();

            GPS5DataFile.GPS5Data gpsDataFirst = nodeFirst.Value;
            double latRef = gpsDataFirst.latitude;
            double lonRef = gpsDataFirst.longitude;

            foreach (var node in m_images_gps5_list)
            {
                GPS5DataFile.GPS5Data gpsData = node.Value;
                string filename        = node.Key;
                string path            = Path.GetDirectoryName(filename);
                string output_filename = Path.GetFileNameWithoutExtension(filename);
                output_filename += ".xmp";
                output_filename  = Path.Combine(path, output_filename);

                XMPFile xmp_file = new XMPFile();
                xmp_file.LoadXML("Sample.xmp");
                xmp_file.RemoveNode(100);
                xmp_file.RemoveNode(102);
                xmp_file.RemoveAttribute(1);
                // xmp_file.SetGroup();
                //  xmp_file.SetGPSData(gpsData.latitude, gpsData.longitude, gpsData.altitude);
                double posX;
                double posY;
                //geodeticOffsetInv(latRef, lonRef, gpsData.latitude, gpsData.longitude,out posX,out posY);

                posX = KMLFile.distanceEarth(latRef, lonRef, latRef, gpsData.longitude);
                if (lonRef > gpsData.longitude)
                {
                    posX *= -1.0;
                }
                posY = KMLFile.distanceEarth(latRef, lonRef, gpsData.latitude, lonRef);
                if (latRef > gpsData.latitude)
                {
                    posY *= -1.0;
                }

                posX *= 1000.0;
                posY *= 1000.0;
                xmp_file.SetPosition(posX, posY, gpsData.altitude);
                xmp_file.SaveXML(output_filename);
            }
            return;
        }
        public void BuildGPSZones()
        {
            var gpsFirstNode = m_total_gps_data_list.First();

            GPS5DataFile.GPS5Data gpsDataFirst = gpsFirstNode.Value;
            double latRef = gpsDataFirst.latitude;
            double lonRef = gpsDataFirst.longitude;

            //m_total_images.OrderBy();
            foreach (var node in m_total_images)
            {
                int    idx       = node.Key;
                string imageName = node.Value;
                //Caculate XYZ;
                GPS5DataFile.GPS5Data gpsData = m_total_gps_data_list[imageName];
                double posX;
                double posY;
                posX = KMLFile.distanceEarth(latRef, lonRef, latRef, gpsData.longitude);
                if (lonRef > gpsData.longitude)
                {
                    posX *= -1.0;
                }
                posY = KMLFile.distanceEarth(latRef, lonRef, gpsData.latitude, lonRef);
                if (latRef > gpsData.latitude)
                {
                    posY *= -1.0;
                }
                // km -> m
                posX           *= 1000.0;
                posY           *= 1000.0;
                gpsData.posX    = posX;
                gpsData.posY    = posY;
                gpsData.idxZone = GPS5DataFile.PushGPSDataToZone(gpsData);
                m_total_gps_data_list[imageName] = gpsData;
            }
        }
示例#3
0
        public void LoadGPSFile_csv(string filename)
        {
            gps_csv_filename = filename;
            StreamReader reader = new StreamReader(filename);
            int          count  = 0;
            double       latRef = 0;
            double       lonRef = 0;

            while (!reader.EndOfStream)
            {
                var line = reader.ReadLine();
                if (line.Length <= 3)
                {
                    continue;
                }
                if (line[0] == '#')
                {
                    continue;
                }
                var values = line.Split(',');
                if (values.Length < 2)
                {
                    continue;
                }

                if (count == 0)
                {
                    count++;
                    continue;
                }

                GPSData line_data = new GPSData();
                line_data.idx       = count;
                line_data.timeStamp = Convert.ToInt64(values[0]);
                line_data.latitude  = Convert.ToDouble(values[1]);
                line_data.longitude = Convert.ToDouble(values[2]);
                line_data.altitude  = Convert.ToDouble(values[3]);
                line_data.heading   = Convert.ToDouble(values[4]);

                if (count == 1)
                {
                    line_data.posX = 0;
                    line_data.posY = 0;
                    latRef         = line_data.latitude;
                    lonRef         = line_data.longitude;
                }
                else
                {
                    double posX;
                    double posY;
                    posX = KMLFile.distanceEarth(latRef, lonRef, latRef, line_data.longitude);
                    if (lonRef > line_data.longitude)
                    {
                        posX *= -1.0;
                    }
                    posY = KMLFile.distanceEarth(latRef, lonRef, line_data.latitude, lonRef);
                    if (latRef > line_data.latitude)
                    {
                        posY *= -1.0;
                    }
                    // km -> m
                    line_data.posX = posX * 1000.0;
                    line_data.posY = posY * 1000.0;
                }


                m_gps_data.Add(count, line_data);
                count++;
            }
            reader.Close();
            return;
        }
        public void BuildTotalImagesFolder(double gapLimit)
        {
            if (!Directory.Exists(destFolder))
            {
                Directory.CreateDirectory(destFolder);
            }
            //string removeImgFolder = Path.Combine(destFolder, "Remove");
            //if (!Directory.Exists(removeImgFolder))
            //{
            //    Directory.CreateDirectory(removeImgFolder);
            //}
            var gpsFirstNode = m_total_gps_data_list.First();

            GPS5DataFile.GPS5Data gpsDataFirst = gpsFirstNode.Value;
            double latRef   = gpsDataFirst.latitude;
            double lonRef   = gpsDataFirst.longitude;
            double lastPosX = 0;
            double lastPosY = 0;
            double lastPosZ = 0;
            bool   gapCheck = false;

            foreach (var node in m_total_images)
            {
                int    idx       = node.Key;
                string imageName = node.Value;
                //Caculate XYZ;
                GPS5DataFile.GPS5Data gpsData = m_total_gps_data_list[imageName];
                double posX;
                double posY;
                posX = KMLFile.distanceEarth(latRef, lonRef, latRef, gpsData.longitude);
                if (lonRef > gpsData.longitude)
                {
                    posX *= -1.0;
                }
                posY = KMLFile.distanceEarth(latRef, lonRef, gpsData.latitude, lonRef);
                if (latRef > gpsData.latitude)
                {
                    posY *= -1.0;
                }
                // km -> m
                posX *= 1000.0;
                posY *= 1000.0;

                //Check gap limit
                if (!gapCheck)
                {
                    lastPosX = posX;
                    lastPosY = posY;
                    lastPosZ = gpsData.altitude;
                    gapCheck = true;
                }
                else
                {
                    double dist = (posX - lastPosX) * (posX - lastPosX) + (posY - lastPosY) * (posY - lastPosY) + (gpsData.altitude - lastPosZ) * (gpsData.altitude - lastPosZ);
                    dist = Math.Sqrt(dist);
                    if (dist < gapLimit)
                    {
                        continue;
                    }
                    else
                    {
                        lastPosX = posX;
                        lastPosY = posY;
                        lastPosZ = gpsData.altitude;
                    }
                }

                //string filename = Path.GetFileName(imageName);
                string newFilename     = m_total_new_image_name[imageName];
                string destImgFilename = Path.Combine(destFolder, newFilename);
                File.Move(imageName, destImgFilename);

                Program.AddLog("Move: " + imageName + " To " + destImgFilename);

                string xmpFilename = Path.GetFileNameWithoutExtension(newFilename);
                xmpFilename += ".xmp";
                xmpFilename  = Path.Combine(destFolder, xmpFilename);
                XMPFile xmp_file = new XMPFile();
                xmp_file.LoadXML("Sample.xmp");
                xmp_file.RemoveNode(100);
                xmp_file.RemoveNode(102);
                xmp_file.RemoveAttribute(1);
                xmp_file.SetPosition(posX, posY, gpsData.altitude);
                xmp_file.SaveXML(xmpFilename);

                // Program.AddLog("Save XMP file: " + xmpFilename);
            }
        }