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; } }
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); } }