public static FieldHeadersInfo CreateFieldHeaderinfo(string newCSVFilePath, string LatFieldName = "", string LongFieldName = "", string DisplayFieldName="")
        {
            Row row = new Row();
              Row headerFields = new Row();
              using (CsvParser reader = new CsvParser(newCSVFilePath))
              {
            //Read the header line
            if (!reader.ReadOneRow(row))
              return null;
            headerFields = row;

            //Set up the field info
            List<FieldInfo> FieldInfos = new List<FieldInfo>();

            FieldInfo SelectedLatField = null;
            FieldInfo SelectedLongField = null;
            foreach (string fieldName in headerFields)
            {
              FieldInfo field;

              //If lat/long field has been set previously, use it
              if (fieldName == LatFieldName)
              {
            field = new FieldInfo(LatFieldName, true, false);
            SelectedLatField = field;
              }
              else if (fieldName == LongFieldName)
              {
            field = new FieldInfo(LongFieldName, false, true);
            SelectedLongField = field;
              }

              //Otherwise, try to find the fields that potentially contain location information
              else if (string.Compare(fieldName.ToLower(), "y") == 0)
              {
            field = new FieldInfo(fieldName, true, false);
            if (SelectedLatField == null)
              SelectedLatField = field;
              }
              else if (fieldName.ToLower().Contains("lat"))
              {
            field = new FieldInfo(fieldName, true, false);
            if (SelectedLatField == null)
              SelectedLatField = field;
              }
              else if (string.Compare(fieldName.ToLower(), "x") == 0)
              {
            field = new FieldInfo(fieldName, false, true);
            if (SelectedLongField == null)
              SelectedLongField = field;
              }
              else if (fieldName.ToLower().Contains("lon"))
              {
            field = new FieldInfo(fieldName, false, true);
            if (SelectedLongField == null)
              SelectedLongField = field;
              }
              else
            field = new FieldInfo(fieldName, false, false);

              FieldInfos.Add(field);
            }

            //Update properties to trigger UI change
            FieldHeadersInfo fieldHeadersInfo = new FieldHeadersInfo();
            fieldHeadersInfo.Fields = FieldInfos;
            fieldHeadersInfo.SelectedLatField = SelectedLatField == null ? fieldHeadersInfo.Fields.First() : SelectedLatField;
            fieldHeadersInfo.SelectedLongField = SelectedLongField == null ? fieldHeadersInfo.Fields.First() : SelectedLongField;
            fieldHeadersInfo.SelectedDisplayField = string.IsNullOrEmpty(DisplayFieldName) ? fieldHeadersInfo.Fields.First() : fieldHeadersInfo.Fields.First(f => f.FieldName == DisplayFieldName);

            fieldHeadersInfo.FieldsVisibility = Visibility.Visible;

            return fieldHeadersInfo;
              }
        }
        /// <summary>
        /// Create features from the csv file
        /// </summary>
        private void ParseCsvData()
        {
            Features = new List<Feature>();

              Row row = new Row();
              try
              {
            using (CsvParser reader = new CsvParser(CsvFilePath))
            {
              //Read off the first line
              if (!reader.ReadOneRow(row))
            return;

              //Read a row
              while (reader.ReadOneRow(row))
              {
            //Read the fields
            IDictionary<string, object> Attributes = new Dictionary<string, object>();
            for (int i = 0; i < row.Count(); i++)
              Attributes.Add(FieldHeadersInfo.Fields[i].FieldName, row[i].ToString());

            Feature feature = new Feature(Attributes);

            Features.Add(feature);
              }
            }
              }
              catch (IOException)
              {
            MessageBox.Show("Error reading csv file");
              }
              catch (Exception)
              {
            MessageBox.Show("Error occured");
              }
        }