コード例 #1
0
 public override bool CanExport(Data.DataMatrix matrix, String datasetName)
 {
     foreach (Pair <string, string> p in _recognizedColumns)
     {
         if (matrix.ContainsColumn(p.First) && matrix.ContainsColumn(p.Second))
         {
             return(true);
         }
     }
     return(false);
 }
コード例 #2
0
        public override void ExportImpl(System.Windows.Window parentWindow, Data.DataMatrix matrix, string datasetName, object options)
        {
            var opt = options as KMLExporterOptions;

            if (opt != null)
            {
                var filename = opt.Filename;

                ProgressStart("Exporting points to '" + filename + "'");

                int latIndex = -1;
                int lonIndex = -1;


                foreach (Pair <string, string> p in _recognizedColumns)
                {
                    if (matrix.ContainsColumn(p.First) && matrix.ContainsColumn(p.Second))
                    {
                        latIndex = matrix.IndexOf(p.First);
                        lonIndex = matrix.IndexOf(p.Second);
                    }
                }

                if (latIndex < 0 || lonIndex < 0)
                {
                    ErrorMessage.Show("Failed to located Latitude and/or Longitude columns in data set!");
                    return;
                }

                int nameIndex = matrix.IndexOf(opt.LabelColumn);

                int rowCount = 0;
                using (var writer = new StreamWriter(filename)) {
                    writer.WriteLine("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
                    writer.WriteLine("<kml xmlns=\"http://www.opengis.net/kml/2.2\">");
                    writer.WriteLine("<Document>");


                    foreach (MatrixRow row in matrix.Rows)
                    {
                        var lat = row[latIndex];
                        var lon = row[lonIndex];
                        if (lat != null && lon != null)
                        {
                            writer.WriteLine("<Placemark>");
                            string name = "" + rowCount;
                            if (nameIndex >= 0)
                            {
                                var nameObj = row[nameIndex];
                                if (nameObj != null)
                                {
                                    name = row[nameIndex].ToString();
                                }
                                else
                                {
                                    name = "";
                                }
                            }
                            if (!string.IsNullOrEmpty(name))
                            {
                                writer.WriteLine(string.Format("<name>{0}</name>", name));
                            }

                            writer.WriteLine(string.Format("<description>{0}</description>", BuildDescription(row)));
                            writer.WriteLine(string.Format("<Point><coordinates>{0},{1}</coordinates></Point>", lon, lat));
                            writer.WriteLine("</Placemark>");
                        }

                        if (++rowCount % 1000 == 0)
                        {
                            double percent = ((double)rowCount / (double)matrix.Rows.Count) * 100;
                            this.ProgressMessage("Exporting points to '" + filename + "'", percent);
                        }
                    }

                    writer.WriteLine("</Document>");
                    writer.WriteLine("</kml>");
                }

                ProgressEnd(string.Format("{0} rows exported.", rowCount));
            }
        }