public static void WriteSummaryKml(IEnumerable<Waypoint> points, string filename, ApOrganization groupby, bool showLabels)
        {
            XmlDocument doc = new XmlDocument();
            doc.LoadXml("<?xml version=\"1.0\" encoding=\"UTF-8\"?><kml xmlns=\"http://www.opengis.net/kml/2.2\"><Document><name>Summary</name></Document></kml>");

            switch(groupby)
            {
                case ApOrganization.EncryptionThenChannel:
                    //Group APs by encryption
                    var priGroup = points.GroupBy(wp => wp.Extensions.Privacy).OrderBy(gd => gd.Key);

                    //Loop through all security groups
                    foreach (IGrouping<string, Waypoint> priWp in priGroup)
                    {
                        //Create primary group folder
                        XmlElement xePriFolder = XmlHelper.CreateKmlFolderWithName(doc, priWp.Key);

                        //Group by Channel
                        var secGroup = priWp.GroupBy(wp => wp.Extensions.Channel).OrderBy(gd => gd.Key);

                        //Loop through all channel groups
                        foreach (IGrouping<uint, Waypoint> secWp in secGroup)
                        {
                            //Create the secondary sub-folder
                            XmlElement xeChannel = XmlHelper.CreateKmlFolderWithName(doc, "Channel " + secWp.Key);

                            //Group all APs by mac address
                            var apGroup = secWp.GroupBy(wp => wp.Extensions.MacAddress);

                            //Loop to find the strongest points for each access point in this group
                            foreach (IGrouping<string, Waypoint> apG in apGroup)
                            {
                                //Find the highest signal points
                                int maxRssi = apG.Max(wp => wp.Extensions.Rssi);
                                IEnumerable<Waypoint> wps = apG.Where(wp => wp.Extensions.Rssi == maxRssi);

                                double avgLat = wps.Average(wp => wp.Latitude);
                                double avgLon = wps.Average(wp => wp.Longitude);
                                double avgEle = wps.Average(wp => wp.Elevation);
                                xeChannel.AppendChild(XmlHelper.CreatePlacemark(doc, wps.First(), true, showLabels,
                                                                                false, true, avgLat, avgLon, avgEle));
                            }
                            xePriFolder.AppendChild(xeChannel);
                        }
                        doc.GetElementsByTagName("Document").Item(0).AppendChild(xePriFolder);
                    }

                    break;
                case ApOrganization.ChannelThenEncryption:
                    //Group APs by encryption
                    var priGroup2 = points.GroupBy(wp => wp.Extensions.Channel).OrderBy(gd => gd.Key);

                    //Loop through all security groups
                    foreach (IGrouping<uint, Waypoint> priWp in priGroup2)
                    {
                        //Create primary group folder
                        XmlElement xePriFolder = XmlHelper.CreateKmlFolderWithName(doc, "Channel " + priWp.Key);

                        //Group by Channel
                        var secGroup = priWp.GroupBy(wp => wp.Extensions.Privacy).OrderBy(gd => gd.Key);

                        //Loop through all channel groups
                        foreach (IGrouping<string, Waypoint> secWp in secGroup)
                        {
                            //Create the secondary sub-folder
                            XmlElement xeChannel = XmlHelper.CreateKmlFolderWithName(doc, secWp.Key);

                            //Group all APs by mac address
                            var apGroup = secWp.GroupBy(wp => wp.Extensions.MacAddress);

                            //Loop to find the strongest points for each access point in this group
                            foreach (IGrouping<string, Waypoint> apG in apGroup)
                            {
                                //Find the highest signal points
                                int maxRssi = apG.Max(wp => wp.Extensions.Rssi);
                                IEnumerable<Waypoint> wps = apG.Where(wp => wp.Extensions.Rssi == maxRssi);

                                double avgLat = wps.Average(wp => wp.Latitude);
                                double avgLon = wps.Average(wp => wp.Longitude);
                                double avgEle = wps.Average(wp => wp.Elevation);
                                xeChannel.AppendChild(XmlHelper.CreatePlacemark(doc, wps.First(), true, showLabels,
                                                                                false, true, avgLat, avgLon, avgEle));

                            }
                            xePriFolder.AppendChild(xeChannel);
                        }
                        doc.GetElementsByTagName("Document").Item(0).AppendChild(xePriFolder);
                    }

                    break;
                default:
                    break;
            }
            doc.Save(filename);
        }
        public static void WriteComprehensiveKml(IEnumerable<Waypoint> points,string filename,ApOrganization groupby,bool showLabels)
        {
            XmlDocument doc = new XmlDocument();
            doc.LoadXml("<?xml version=\"1.0\" ?><kml><Document><name>Comprehensive Data</name></Document></kml>");
            XmlElement xe;
            //XmlElement xe2;
            XmlElement xe3;
            switch (groupby)
            {
                case ApOrganization.EncryptionThenChannel:
                    var grouped = points.GroupBy(wp => wp.Extensions.Privacy).OrderBy(gd => gd.Key);

                    foreach (IGrouping<string, Waypoint> waypoint in grouped)
                    {
                        //Create folder element
                        xe = XmlHelper.CreateKmlFolderWithName(doc, waypoint.Key);//doc.CreateElement("Folder");

                        var g2 = waypoint.GroupBy(wp => wp.Extensions.Channel).OrderBy(ch => ch.Key);
                        foreach (IGrouping<uint, Waypoint> grouping in g2)
                        {
                            //Create sub-folder
                            xe3 = XmlHelper.CreateKmlFolderWithName(doc, "Channel " + grouping.Key);//doc.CreateElement("Folder");

                            //Group all points by mac address
                            var apgroup = grouping.GroupBy(wp => wp.Extensions.MacAddress);

                            //Add points to parent element
                            WriteSubItems(doc, apgroup, xe3, showLabels);

                            //Add the channel folder to the parent security folder
                            xe.AppendChild(xe3);
                        }

                        //Add the security folder to the main document
                        doc.GetElementsByTagName("Document").Item(0).AppendChild(xe);
                    }

                    //Save kml file
                    doc.Save(filename);
                    break;
                case ApOrganization.ChannelThenEncryption:
                    var groupedc = points.GroupBy(wp => wp.Extensions.Channel).OrderBy(gd => gd.Key);

                    foreach (IGrouping<uint, Waypoint> waypoint in groupedc)
                    {
                        //Create folder element
                        xe = XmlHelper.CreateKmlFolderWithName(doc,"Channel " + waypoint.Key);//doc.CreateElement("Folder");

                        var g2 = waypoint.GroupBy(wp => wp.Extensions.Privacy).OrderBy(ch => ch.Key);
                        foreach (IGrouping<string, Waypoint> grouping in g2)
                        {
                            //Create sub-folder
                            xe3 = XmlHelper.CreateKmlFolderWithName(doc, grouping.Key);//doc.CreateElement("Folder");

                            //Group all points by mac address
                            var apgroup = grouping.GroupBy(wp => wp.Extensions.MacAddress);

                            //Add points to parent element
                            WriteSubItems(doc, apgroup, xe3, showLabels);

                            //Add the channel folder to the parent security folder
                            xe.AppendChild(xe3);
                        }

                        //Add the security folder to the main document
                        doc.GetElementsByTagName("Document").Item(0).AppendChild(xe);
                    }

                    //Save kml file
                    doc.Save(filename);
                    break;
                default:
                    break;
            }
        }
Exemple #3
0
        public static void WriteSummaryKml(IEnumerable <Waypoint> points, string filename, ApOrganization groupby, bool showLabels)
        {
            XmlDocument doc = new XmlDocument();

            doc.LoadXml("<?xml version=\"1.0\" encoding=\"UTF-8\"?><kml xmlns=\"http://www.opengis.net/kml/2.2\"><Document><name>Summary</name></Document></kml>");

            switch (groupby)
            {
            case ApOrganization.EncryptionThenChannel:
                //Group APs by encryption
                var priGroup = points.GroupBy(wp => wp.Extensions.Security).OrderBy(gd => gd.Key);

                //Loop through all security groups
                foreach (IGrouping <string, Waypoint> priWp in priGroup)
                {
                    //Create primary group folder
                    XmlElement xePriFolder = XmlHelper.CreateKmlFolderWithName(doc, priWp.Key);

                    //Group by Channel
                    var secGroup = priWp.GroupBy(wp => wp.Extensions.Channel).OrderBy(gd => gd.Key);

                    //Loop through all channel groups
                    foreach (IGrouping <uint, Waypoint> secWp in secGroup)
                    {
                        //Create the secondary sub-folder
                        XmlElement xeChannel = XmlHelper.CreateKmlFolderWithName(doc, "Channel " + secWp.Key);

                        //Group all APs by mac address
                        var apGroup = secWp.GroupBy(wp => wp.Extensions.MacAddress);

                        //Loop to find the strongest points for each access point in this group
                        foreach (IGrouping <string, Waypoint> apG in apGroup)
                        {
                            //Find the highest signal points
                            int maxRssi = apG.Max(wp => wp.Extensions.Rssi);
                            IEnumerable <Waypoint> wps = apG.Where(wp => wp.Extensions.Rssi == maxRssi);

                            double avgLat = wps.Average(wp => wp.Latitude);
                            double avgLon = wps.Average(wp => wp.Longitude);
                            double avgEle = wps.Average(wp => wp.Elevation);
                            xeChannel.AppendChild(XmlHelper.CreatePlacemark(doc, wps.First(), true, showLabels,
                                                                            false, true, avgLat, avgLon, avgEle));
                        }
                        xePriFolder.AppendChild(xeChannel);
                    }
                    doc.GetElementsByTagName("Document").Item(0).AppendChild(xePriFolder);
                }

                break;

            case ApOrganization.ChannelThenEncryption:
                //Group APs by encryption
                var priGroup2 = points.GroupBy(wp => wp.Extensions.Channel).OrderBy(gd => gd.Key);

                //Loop through all security groups
                foreach (IGrouping <uint, Waypoint> priWp in priGroup2)
                {
                    //Create primary group folder
                    XmlElement xePriFolder = XmlHelper.CreateKmlFolderWithName(doc, "Channel " + priWp.Key);

                    //Group by Channel
                    var secGroup = priWp.GroupBy(wp => wp.Extensions.Security).OrderBy(gd => gd.Key);

                    //Loop through all channel groups
                    foreach (IGrouping <string, Waypoint> secWp in secGroup)
                    {
                        //Create the secondary sub-folder
                        XmlElement xeChannel = XmlHelper.CreateKmlFolderWithName(doc, secWp.Key);

                        //Group all APs by mac address
                        var apGroup = secWp.GroupBy(wp => wp.Extensions.MacAddress);

                        //Loop to find the strongest points for each access point in this group
                        foreach (IGrouping <string, Waypoint> apG in apGroup)
                        {
                            //Find the highest signal points
                            int maxRssi = apG.Max(wp => wp.Extensions.Rssi);
                            IEnumerable <Waypoint> wps = apG.Where(wp => wp.Extensions.Rssi == maxRssi);

                            double avgLat = wps.Average(wp => wp.Latitude);
                            double avgLon = wps.Average(wp => wp.Longitude);
                            double avgEle = wps.Average(wp => wp.Elevation);
                            xeChannel.AppendChild(XmlHelper.CreatePlacemark(doc, wps.First(), true, showLabels,
                                                                            false, true, avgLat, avgLon, avgEle));
                        }
                        xePriFolder.AppendChild(xeChannel);
                    }
                    doc.GetElementsByTagName("Document").Item(0).AppendChild(xePriFolder);
                }

                break;

            default:
                break;
            }
            doc.Save(filename);
        }
Exemple #4
0
        private void ExportButtonClick(object sender, EventArgs e)
        {
            if (txtInFiles.Text.Trim() == string.Empty)
            {
                MessageBox.Show(Localizer.GetString("ErrorNoLogFileSelected"), Localizer.GetString("Error"),
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            if (txtOutDir.Text.Trim() == string.Empty)
            {
                MessageBox.Show(Localizer.GetString("ErrorKmlDirectoryMissing"), Localizer.GetString("Error"),
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            if (!txtOutDir.Text.EndsWith("\\"))
            {
                txtOutDir.AppendText("\\");
            }
            _outPath = txtOutDir.Text;

            //Append the log filename to the directory path
            int lastS = _inFiles[0].LastIndexOf('\\');
            int lastP = _inFiles[0].Substring(lastS).LastIndexOf('.');

            _outPath += _inFiles[0].Substring(lastS).Remove(lastP) + "\\";

            try
            {
                //Create the output directory
                System.IO.Directory.CreateDirectory(_outPath);
            }
            catch (UnauthorizedAccessException ex)
            {
                MessageBox.Show(string.Format("{0}\r\n\r\n{1}", ex.Message, Localizer.GetString("ErrorExportDirectory")), Localizer.GetString("Error"));
                return;
            }
            catch (DirectoryNotFoundException ex)
            {
                MessageBox.Show(ex.Message, Localizer.GetString("Error"));
                return;
            }

            //All is well, let's go
            Waypoint[] allPoints;
            try
            {
                //Load all files. An array is required because all KML classes accept arrays
                allPoints = GpxIO.ReadGpxFiles(_inFiles).ToArray();
            }
            catch (IOException)
            {
                //This happens when the file is locked by another process or WirelessFireless is still logging to it.
                MessageBox.Show(
                    Localizer.GetString("GpxFileOpenError"),
                    Localizer.GetString("Error"), MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            //Filter data
            WaypointFilterArgs farg = new WaypointFilterArgs
            {
                GpsFixLost         = chGPSFixLost.Checked,
                GpsLockedUp        = chGPSLockup.Checked,
                MaximumSpeedKmh    = chMaxSpeed.Checked ? (int)numMaxSpeed.Value : -1,
                MaxSignal          = chMaxSignal.Checked ? (int)numMaxSignal.Value : -1,
                MinimumSatsVisible = chGPSsatCount.Checked ? (int)numSatCount.Value : -1
            };

            allPoints = KmlWriter.FilterData(allPoints, farg);

            ApOrganization group = (ApOrganization)cmbOrganize.SelectedIndex;

            if (chExportSummary.Checked) //Export a summary file
            {
                if (!System.IO.File.Exists(_outPath + "Summary.kml") ||
                    MessageBox.Show(Localizer.GetString("WarningSummaryKmlExists"),
                                    Localizer.GetString("FileExists"), MessageBoxButtons.YesNo, MessageBoxIcon.Question,
                                    MessageBoxDefaultButton.Button1) == DialogResult.Yes)
                {
                    KmlWriter.WriteSummaryKml(allPoints, _outPath + "Summary.kml", group, chShowRssiMarkers.Checked);
                }
            }

            if (chExportComp.Checked) //Comprehensive
            {
                if (!System.IO.File.Exists(_outPath + "Comprehensive.kml") ||
                    MessageBox.Show(Localizer.GetString("WarningComprehensiveKmlExists"),
                                    Localizer.GetString("FileExists"), MessageBoxButtons.YesNo, MessageBoxIcon.Question,
                                    MessageBoxDefaultButton.Button1) == DialogResult.Yes)
                {
                    KmlWriter.WriteComprehensiveKml(allPoints, _outPath + "Comprehensive.kml", group, chShowRssiMarkers.Checked);
                }
            }

            if (chExportEachAp.Checked) //Export each AP to ./APs/{SSID}.kml
            {
                KmlWriter.WriteAccessPointKml(allPoints, _outPath, chShowRssiMarkers.Checked);
            }

            MessageBox.Show(Localizer.GetString("ExportComplete"), Localizer.GetString("Finished"), MessageBoxButtons.OK);
        }
Exemple #5
0
        public static void WriteComprehensiveKml(IEnumerable <Waypoint> points, string filename, ApOrganization groupby, bool showLabels)
        {
            XmlDocument doc = new XmlDocument();

            doc.LoadXml("<?xml version=\"1.0\" ?><kml><Document><name>Comprehensive Data</name></Document></kml>");
            XmlElement xe;
            //XmlElement xe2;
            XmlElement xe3;

            switch (groupby)
            {
            case ApOrganization.EncryptionThenChannel:
                var grouped = points.GroupBy(wp => wp.Extensions.Security).OrderBy(gd => gd.Key);

                foreach (IGrouping <string, Waypoint> waypoint in grouped)
                {
                    //Create folder element
                    xe = XmlHelper.CreateKmlFolderWithName(doc, waypoint.Key);    //doc.CreateElement("Folder");

                    var g2 = waypoint.GroupBy(wp => wp.Extensions.Channel).OrderBy(ch => ch.Key);
                    foreach (IGrouping <uint, Waypoint> grouping in g2)
                    {
                        //Create sub-folder
                        xe3 = XmlHelper.CreateKmlFolderWithName(doc, "Channel " + grouping.Key);    //doc.CreateElement("Folder");

                        //Group all points by mac address
                        var apgroup = grouping.GroupBy(wp => wp.Extensions.MacAddress);

                        //Add points to parent element
                        WriteSubItems(doc, apgroup, xe3, showLabels);

                        //Add the channel folder to the parent security folder
                        xe.AppendChild(xe3);
                    }

                    //Add the security folder to the main document
                    doc.GetElementsByTagName("Document").Item(0).AppendChild(xe);
                }

                //Save kml file
                doc.Save(filename);
                break;

            case ApOrganization.ChannelThenEncryption:
                var groupedc = points.GroupBy(wp => wp.Extensions.Channel).OrderBy(gd => gd.Key);

                foreach (IGrouping <uint, Waypoint> waypoint in groupedc)
                {
                    //Create folder element
                    xe = XmlHelper.CreateKmlFolderWithName(doc, "Channel " + waypoint.Key);   //doc.CreateElement("Folder");

                    var g2 = waypoint.GroupBy(wp => wp.Extensions.Security).OrderBy(ch => ch.Key);
                    foreach (IGrouping <string, Waypoint> grouping in g2)
                    {
                        //Create sub-folder
                        xe3 = XmlHelper.CreateKmlFolderWithName(doc, grouping.Key);    //doc.CreateElement("Folder");

                        //Group all points by mac address
                        var apgroup = grouping.GroupBy(wp => wp.Extensions.MacAddress);

                        //Add points to parent element
                        WriteSubItems(doc, apgroup, xe3, showLabels);

                        //Add the channel folder to the parent security folder
                        xe.AppendChild(xe3);
                    }

                    //Add the security folder to the main document
                    doc.GetElementsByTagName("Document").Item(0).AppendChild(xe);
                }

                //Save kml file
                doc.Save(filename);
                break;

            default:
                break;
            }
        }