public override string ToString() { string ret = "Attribute:[\"" + name + "\"|" + type.ToString() + "|"; // if it's if (type == NC_TYPE.NC_CHAR) { ret += "\"" + NetCDFTools.byteToString(values) + "\""; } else { ret += values.Length; } ret += "]"; return(ret); }
public Variable(string name, int[] dimid, LinkedList <Attribute> vatt_list, NC_TYPE type, uint vsize, uint begin) { this.name = name; this.dimid = dimid; this.vatt_list = vatt_list; this.type = type; this.vsize = vsize; this.begin = begin; this.length = this.vsize / NetCDFTools.getTypeLength(this.type); foreach (Attribute att in vatt_list) { if (att.name.Equals("units")) { this.units = NetCDFTools.byteToString(att.values); } else if (att.name.Equals("missing_value")) { this.missing_value = NetCDFTools.byteToFloat(att.values[0], att.type); } else if (att.name.Equals("valid_min")) { this.valid_min = NetCDFTools.byteToFloat(att.values[0], att.type); } else if (att.name.Equals("valid_max")) { this.valid_max = NetCDFTools.byteToFloat(att.values[0], att.type); } else if (att.name.Equals("valid_max")) { this.valid_max = NetCDFTools.byteToFloat(att.values[0], att.type); } else if (att.name.Equals("scale_factor")) { this.scale_factor = NetCDFTools.byteToFloat(att.values[0], att.type); } else if (att.name.Equals("add_offset")) { this.add_offset = NetCDFTools.byteToFloat(att.values[0], att.type); } } }
/// <summary> /// Constructor for interpreting from an NC file /// </summary> /// <param name="head">the raw NC data</param> public GeoSpatialData(Header head) { Variable latVar = null; Variable lngVar = null; Variable timeVar = null; Variable dataVar = null; Dimension[] dataDimensions = null; int latDimID = 0; Dimension latDim = null; int lngDimID = 0; Dimension lngDim = null; int timeDimID = 0; Dimension timeDim = null; dataDimensions = new Dimension[3]; foreach (Variable v in head.var_list) { if (v.name.Equals("latitude") || v.name.Equals("lat")) { latVar = v; latDimID = v.dimid[0]; latDim = head.dim_list.ElementAt(latDimID); dataDimensions[latDimID] = latDim; } else if (v.name.Equals("longitude") || v.name.Equals("lng") || v.name.Equals("long")) { lngVar = v; lngDimID = v.dimid[0]; lngDim = head.dim_list.ElementAt(lngDimID); dataDimensions[lngDimID] = lngDim; } else if (v.name.Equals("time")) { timeVar = v; timeDimID = v.dimid[0]; timeDim = head.dim_list.ElementAt(timeDimID); dataDimensions[timeDimID] = timeDim; } else { dataVar = v; } } // pull out the relevant attributes from the dataVar foreach (Attribute a in dataVar.vatt_list) { if (a.name == "long_name") { this.data_name = NetCDFTools.byteToString(a.values); } else if (a.name == "units") { this.units = NetCDFTools.byteToString(a.values); } } this.data_type = dataVar.name; this.data_missing_value = dataVar.missing_value; this.data_max = dataVar.valid_max; this.data_min = dataVar.valid_min; // convert each set of data into its real format this.data = new float[timeVar.length, latVar.length, lngVar.length]; for (int i = 0; i < dataDimensions[0].length; i++) { for (int j = 0; j < dataDimensions[1].length; j++) { for (int k = 0; k < dataDimensions[2].length; k++) { int index = i * dataDimensions[1].length * dataDimensions[2].length + j * dataDimensions[2].length + k; data[i, j, k] = NetCDFTools.byteToFloat(dataVar.data[index], dataVar.type); } } } this.lat = new decimal[latVar.length]; for (int i = 0; i < this.lat.Length; i++) { this.lat[i] = (decimal)NetCDFTools.byteToFloat(latVar.data[i], latVar.type); } this.lng = new decimal[lngVar.length]; for (int i = 0; i < this.lng.Length; i++) { this.lng[i] = (decimal)NetCDFTools.byteToFloat(lngVar.data[i], lngVar.type); } DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); this.time = new int[timeVar.length]; this.dateTime = new DateTime[timeVar.length]; for (int i = 0; i < this.time.Length; i++) { this.time[i] = NetCDFTools.byteToInt(timeVar.data[i]); this.dateTime[i] = epoch.AddSeconds(this.time[i]); } }