/// <summary> /// 区域查找 /// </summary> /// <param name="queryArea">选择的范围,经纬度之间','隔开,"小经,小纬,大经,大纬"</param> /// <param name="ncfilepath">nc文件路径</param> /// <param name="zoom">地图缩放等级</param> public string ZoneLookUp(string queryArea, string ncfilepath, string zoom) { Inital(ncfilepath); IRectangle zoneQueryRect = CoreUtil.GetRectangle <QueryRectangleF>(queryArea); //前台所要查找的范围 //2.读取nc文件 //先读取经纬度信息,确定读取的下标 NCFileUtil ncFile = new NCFileUtil(ncfilepath); NcLonLatModel ncLatLonModel = ncFile.ReadNcLonLat(models[0]); int minLonIndex = 0, maxLonIndex = 0, minLatIndex = 0, maxLatIndex = 0; CoreUtil.GetIndex(ncLatLonModel.Lon, zoneQueryRect.minLon, zoneQueryRect.maxLon, ref minLonIndex, ref maxLonIndex); CoreUtil.GetIndex(ncLatLonModel.Lat, zoneQueryRect.minLat, zoneQueryRect.maxLat, ref minLatIndex, ref maxLatIndex); ncLatLonModel.minLonIndex = minLonIndex; ncLatLonModel.minLatIndex = minLatIndex; ncLatLonModel.maxLonIndex = maxLonIndex; ncLatLonModel.maxLatIndex = maxLatIndex; QueryNcDataModel queryNcDataModel = new QueryNcDataModel(); queryNcDataModel.ncLatLonModel = ncLatLonModel; queryNcDataModel.StartRow = minLatIndex; queryNcDataModel.StartColumn = minLonIndex; queryNcDataModel.EndRow = maxLatIndex; queryNcDataModel.EndColumn = maxLonIndex; queryNcDataModel.RowCount = maxLatIndex - minLatIndex + 1; queryNcDataModel.ColumnCount = maxLonIndex - minLonIndex + 1; queryNcDataModel.Dir = ncFile.GetValueInArea(models[0].Dir, minLatIndex, minLonIndex, queryNcDataModel.RowCount, queryNcDataModel.ColumnCount); queryNcDataModel.Value = ncFile.GetValueInArea(models[0].Value, minLatIndex, minLonIndex, queryNcDataModel.RowCount, queryNcDataModel.ColumnCount); queryNcDataModel.Levels = CoreUtil.GetLEVEL(queryNcDataModel.RowCount, queryNcDataModel.ColumnCount, 6); GFSWeatherJson gfsjson = new GFSWeatherJson(); string json = gfsjson.createGeoJsonFromNetcdf(queryNcDataModel, int.Parse(zoom)); return(json); }
public string createGeoJsonFromNetcdf(QueryNcDataModel queryNcDataModel, int zoom) { int countZoom = 0; for (int i = 0; i < queryNcDataModel.Levels.Length; i++) { if (queryNcDataModel.Levels[i] == 3) { countZoom++; } } NcJsonObject uObject = new NcJsonObject(); NcJsonHeader uHeader = new NcJsonHeader(); uHeader.parameterNumber = 2; uHeader.parameterNumberName = "U-7"; uHeader.numberPoints = queryNcDataModel.ncLatLonModel.Lat.Length * queryNcDataModel.ncLatLonModel.Lon.Length; uHeader.nx = queryNcDataModel.ncLatLonModel.Lon.Length; uHeader.ny = queryNcDataModel.ncLatLonModel.Lat.Length; uHeader.lo1 = queryNcDataModel.ncLatLonModel.minLon; uHeader.lo2 = queryNcDataModel.ncLatLonModel.maxLon; uHeader.la1 = queryNcDataModel.ncLatLonModel.maxLat; uHeader.la2 = queryNcDataModel.ncLatLonModel.minLat; uHeader.dx = 1; uHeader.dy = 1; uObject.header = uHeader; uObject.data = new double[countZoom]; NcJsonObject vObject = new NcJsonObject(); NcJsonHeader vHeader = new NcJsonHeader(); vHeader.parameterNumber = 3; vHeader.parameterNumberName = "V-component_of_wind"; vHeader.numberPoints = queryNcDataModel.ncLatLonModel.Lat.Length * queryNcDataModel.ncLatLonModel.Lon.Length; vHeader.nx = queryNcDataModel.ncLatLonModel.Lon.Length; vHeader.ny = queryNcDataModel.ncLatLonModel.Lat.Length; vHeader.lo1 = queryNcDataModel.ncLatLonModel.minLon; vHeader.lo2 = queryNcDataModel.ncLatLonModel.maxLon; vHeader.la1 = queryNcDataModel.ncLatLonModel.maxLat; vHeader.la2 = queryNcDataModel.ncLatLonModel.minLat; vHeader.dx = 1; vHeader.dy = 1; vObject.header = vHeader; vObject.data = new double[countZoom]; DateTime start = DateTime.Now; int idx = 0; float u = 0f, v = 0f; for (int j = 0; j < queryNcDataModel.Value.Length; j++) { if (queryNcDataModel.Levels[j] != zoom) { continue; } float _dir = queryNcDataModel.Dir[j]; float _power = queryNcDataModel.Value[j]; if (!float.IsNaN(_power)) { CalUV(ref u, ref v, (double)_dir, (double)_power); //uHeader power vObject.data[idx] = saveValidNumber(v, 2); //vHeader dir uObject.data[idx] = saveValidNumber(u, 2); } else { //uHeader power vObject.data[idx] = float.NaN; //vHeader dir uObject.data[idx] = float.NaN; } idx++; } List <NcJsonObject> objectFiles = new List <NcJsonObject>(); objectFiles.Add(vObject); objectFiles.Add(uObject); string json = JsonUtil.JsonSerialize <NcJsonObject>(objectFiles); return(json); }