sealed override protected List <MetaDataItem> doParseFile(TextAsset fileToParse) { this.lastFileParsed = fileToParse; List <MetaDataItem> result = new List <MetaDataItem>(); //first open the file. string [,] csvData = CSVReader.SplitCsvGrid(fileToParse.text); Debug.Log(csvData[0, 0]); List <string> columns = new List <string>(); int rowIndex, colIndex; int size = csvData.GetLength(1); /* Not sure why i have to subtract 2. Something to do with the CSVReader I guess? */ for (rowIndex = 0; rowIndex < csvData.GetLength(1) - 2; rowIndex++) { if (rowIndex == 0) { for (colIndex = 0; colIndex < csvData.GetLength(0); colIndex++) { columns.Add(csvData[colIndex, rowIndex]); } } else { var dataItem = new AutographerMetaDataItem(); dataItem.id = csvData[columns.IndexOf("id"), rowIndex]; dataItem.dt = csvData[columns.IndexOf("dt"), rowIndex]; dataItem.latitude = float.Parse(csvData[columns.IndexOf("lat_smooth"), rowIndex]); dataItem.longitude = float.Parse(csvData[columns.IndexOf("lon_smooth"), rowIndex]); dataItem.filename = csvData[columns.IndexOf("imgFile"), rowIndex]; dataItem.heading = float.Parse(csvData[columns.IndexOf("heading"), rowIndex]); dataItem.priority = int.Parse(csvData[columns.IndexOf("priority"), rowIndex]); dataItem.episode = int.Parse(csvData[columns.IndexOf("episode"), rowIndex]); dataItem.height = float.Parse(csvData[columns.IndexOf("unity_height"), rowIndex]); result.Add(dataItem); //Debug.Log ("added row " + rowIndex + " of " + size); } } int lastValueIndex = 0; //now go through again, finding the last index with non-zero longitude //first item is guaranteed to be non-zero. //a "value" index is an index with a non zero value. this.min = new MetaDataItem(); this.max = new MetaDataItem(); for (int i = 0; i < result.Count; i++) { if (i == 0) { this.min.longitude = result[i].longitude; this.min.latitude = result[i].latitude; this.min.altitude = result[i].altitude; this.max.longitude = result[i].longitude; this.max.latitude = result[i].latitude; this.max.altitude = result[i].altitude; } if (result[i].longitude != 0.0) { //interpolate between previous value index and this value index. int startTerpIndex = lastValueIndex; int endTerpIndex = i; int numItems = i - (startTerpIndex + 1); for (int j = startTerpIndex + 1; j < i; j++) { int numerator = j - startTerpIndex; // starts from 1. int denominator = numItems + 1; float terpAmount = numerator / (float)denominator; result[j].latitude = Mathf.Lerp(result[startTerpIndex].latitude, result[endTerpIndex].latitude, terpAmount); result[j].longitude = Mathf.Lerp(result[startTerpIndex].longitude, result[endTerpIndex].longitude, terpAmount); result[j].altitude = Mathf.Lerp(result[startTerpIndex].altitude, result[endTerpIndex].altitude, terpAmount); } lastValueIndex = i; this.min.latitude = result[i].latitude < this.min.latitude ? result[i].latitude : this.min.latitude; this.min.longitude = result[i].longitude < this.min.longitude ? result[i].longitude : this.min.longitude; this.min.altitude = result[i].altitude < this.min.altitude ? result[i].altitude : this.min.altitude; this.max.latitude = result[i].latitude > this.max.latitude ? result[i].latitude : this.max.latitude; this.max.longitude = result[i].longitude > this.max.longitude ? result[i].longitude : this.max.longitude; this.max.altitude = result[i].altitude > this.max.altitude ? result[i].altitude : this.max.altitude; } } //now cull everything past the last index. while (result.Count > lastValueIndex + 1) { result.RemoveAt(result.Count - 1); } return(result); }
sealed override protected List<MetaDataItem> doParseFile(TextAsset fileToParse) { this.lastFileParsed = fileToParse; List<MetaDataItem> result = new List<MetaDataItem>(); //first open the file. string [,] csvData = CSVReader.SplitCsvGrid(fileToParse.text); Debug.Log (csvData[0, 0]); List<string> columns = new List<string>(); int rowIndex, colIndex; int size = csvData.GetLength(1); /* Not sure why i have to subtract 2. Something to do with the CSVReader I guess? */ for (rowIndex = 0; rowIndex < csvData.GetLength(1) - 2; rowIndex++) { if (rowIndex == 0) { for (colIndex = 0; colIndex < csvData.GetLength(0); colIndex++) { columns.Add(csvData[colIndex, rowIndex]); } } else { var dataItem = new AutographerMetaDataItem(); dataItem.id = csvData[columns.IndexOf("id"), rowIndex]; dataItem.dt = csvData[columns.IndexOf("dt"), rowIndex]; dataItem.latitude = float.Parse(csvData[columns.IndexOf("lat_smooth"), rowIndex]); dataItem.longitude = float.Parse(csvData[columns.IndexOf("lon_smooth"), rowIndex]); dataItem.filename = csvData[columns.IndexOf("imgFile"), rowIndex]; dataItem.heading = float.Parse(csvData[columns.IndexOf("heading"), rowIndex]); dataItem.priority = int.Parse(csvData[columns.IndexOf("priority"), rowIndex]); dataItem.episode = int.Parse(csvData[columns.IndexOf("episode"), rowIndex]); dataItem.height = float.Parse(csvData[columns.IndexOf("unity_height"), rowIndex]); result.Add (dataItem); //Debug.Log ("added row " + rowIndex + " of " + size); } } int lastValueIndex = 0; //now go through again, finding the last index with non-zero longitude //first item is guaranteed to be non-zero. //a "value" index is an index with a non zero value. this.min = new MetaDataItem(); this.max = new MetaDataItem(); for (int i = 0; i < result.Count; i++) { if (i == 0) { this.min.longitude = result[i].longitude; this.min.latitude = result[i].latitude; this.min.altitude = result[i].altitude; this.max.longitude = result[i].longitude; this.max.latitude = result[i].latitude; this.max.altitude = result[i].altitude; } if (result[i].longitude != 0.0) { //interpolate between previous value index and this value index. int startTerpIndex = lastValueIndex; int endTerpIndex = i; int numItems = i - (startTerpIndex + 1); for (int j = startTerpIndex + 1; j < i; j++ ) { int numerator = j - startTerpIndex; // starts from 1. int denominator = numItems + 1; float terpAmount = numerator/(float)denominator; result[j].latitude = Mathf.Lerp(result[startTerpIndex].latitude,result[endTerpIndex].latitude,terpAmount); result[j].longitude = Mathf.Lerp(result[startTerpIndex].longitude,result[endTerpIndex].longitude,terpAmount); result[j].altitude = Mathf.Lerp(result[startTerpIndex].altitude,result[endTerpIndex].altitude,terpAmount); } lastValueIndex = i; this.min.latitude = result[i].latitude < this.min.latitude ? result[i].latitude : this.min.latitude; this.min.longitude = result[i].longitude < this.min.longitude ? result[i].longitude : this.min.longitude; this.min.altitude = result[i].altitude < this.min.altitude ? result[i].altitude : this.min.altitude; this.max.latitude = result[i].latitude > this.max.latitude ? result[i].latitude : this.max.latitude; this.max.longitude = result[i].longitude > this.max.longitude ? result[i].longitude : this.max.longitude; this.max.altitude = result[i].altitude > this.max.altitude ? result[i].altitude : this.max.altitude; } } //now cull everything past the last index. while (result.Count > lastValueIndex+1) { result.RemoveAt (result.Count - 1); } return result; }
protected override sealed List<MetaDataItem> doParseFile(string fileToParse) { this.lastFileParsed = fileToParse; List<MetaDataItem> result = new List<MetaDataItem>(); //first open the file. using (CsvFileReader reader = new CsvFileReader(fileToParse)) { CsvRow row = new CsvRow(); List<string> columns = new List<string>(); int rowIndex = 0; while (reader.ReadRow(row)) { //Use the first row to build column definition if(rowIndex == 0){ foreach(var field in row){ columns.Add(field); } }else{ //Other rows to fill data var dataItem = new AutographerMetaDataItem(); dataItem.id = row[columns.IndexOf("id")]; dataItem.dt = row[columns.IndexOf("dt")]; dataItem.latitude = float.Parse(row[columns.IndexOf("lat_smooth")]); dataItem.longitude = float.Parse(row[columns.IndexOf("lon_smooth")]); dataItem.filename = row[columns.IndexOf("imgFile")]; dataItem.heading = float.Parse(row[columns.IndexOf("heading")]); dataItem.priority = int.Parse(row[columns.IndexOf("priority")]); /* * These fiels not used and not always present in CSV file ... dataItem.AccuracyX = float.Parse(row[columns.IndexOf("accx")]); dataItem.AccuracyY = float.Parse(row[columns.IndexOf("accy")]); dataItem.AccuracyZ = float.Parse(row[columns.IndexOf("accz")]); dataItem.MagnitudeX = float.Parse(row[columns.IndexOf("magx")]); dataItem.MagnitudeY = float.Parse(row[columns.IndexOf("magy")]); dataItem.MagnitudeZ = float.Parse(row[columns.IndexOf("magz")]); dataItem.Red = int.Parse(row[columns.IndexOf("red")]); dataItem.Blue = int.Parse(row[columns.IndexOf("blue")]); dataItem.Green = int.Parse(row[columns.IndexOf("green")]); dataItem.Luminance = float.Parse(row[columns.IndexOf("lum")]); dataItem.Temperature = float.Parse(row[columns.IndexOf("tem")]); dataItem.Gs = float.Parse(row[columns.IndexOf("g")]); dataItem.xOrientation = float.Parse(row[columns.IndexOf("xor")]); dataItem.yOrientation = float.Parse(row[columns.IndexOf("yor")]); dataItem.zOrientation = float.Parse(row[columns.IndexOf("zor")]); */ result.Add (dataItem); } rowIndex++; } } int lastValueIndex = 0; //now go through again, finding the last index with non-zero longitude //first item is guaranteed to be non-zero. //a "value" index is an index with a non zero value. this.min = new MetaDataItem(); this.max = new MetaDataItem(); for (int i = 0; i < result.Count; i++) { if (i == 0) { this.min.longitude = result[i].longitude; this.min.latitude = result[i].latitude; this.min.altitude = result[i].altitude; this.max.longitude = result[i].longitude; this.max.latitude = result[i].latitude; this.max.altitude = result[i].altitude; } if (result[i].longitude != 0.0) { //interpolate between previous value index and this value index. int startTerpIndex = lastValueIndex; int endTerpIndex = i; int numItems = i - (startTerpIndex + 1); for (int j = startTerpIndex + 1; j < i; j++ ) { int numerator = j - startTerpIndex; // starts from 1. int denominator = numItems + 1; float terpAmount = numerator/(float)denominator; result[j].latitude = Mathf.Lerp(result[startTerpIndex].latitude,result[endTerpIndex].latitude,terpAmount); result[j].longitude = Mathf.Lerp(result[startTerpIndex].longitude,result[endTerpIndex].longitude,terpAmount); result[j].altitude = Mathf.Lerp(result[startTerpIndex].altitude,result[endTerpIndex].altitude,terpAmount); } lastValueIndex = i; this.min.latitude = result[i].latitude < this.min.latitude ? result[i].latitude : this.min.latitude; this.min.longitude = result[i].longitude < this.min.longitude ? result[i].longitude : this.min.longitude; this.min.altitude = result[i].altitude < this.min.altitude ? result[i].altitude : this.min.altitude; this.max.latitude = result[i].latitude > this.max.latitude ? result[i].latitude : this.max.latitude; this.max.longitude = result[i].longitude > this.max.longitude ? result[i].longitude : this.max.longitude; this.max.altitude = result[i].altitude > this.max.altitude ? result[i].altitude : this.max.altitude; } } //now cull everything past the last index. while (result.Count > lastValueIndex+1) { result.RemoveAt (result.Count - 1); } return result; }