private FireAreaFeature UpdateFireAreaFeature(FireAreaFeature faf, PixelFeature pixelFeature, IRasterDataProvider prd) { int row = pixelFeature.PixelIndex / prd.Width; int col = pixelFeature.PixelIndex - row * prd.Width; //faf.FireReaIndex = pixelFeature.FireAreaNum; //faf.Longitude = (float)(prd.CoordEnvelope.MinX + col * prd.ResolutionX); //faf.Latitude = (float)(prd.CoordEnvelope.MaxY - row * prd.ResolutionY); faf.FireArea += pixelFeature.PixelArea; faf.SecondryFireArea += pixelFeature.SecondPixelArea; //faf.XJName = _xianJieDictionary.GetPixelName(faf.Longitude, faf.Latitude); faf.FireCount += 1; string solidType = _landTypeDictionary.GetPixelName(faf.Longitude, faf.Latitude); if (solidType.IndexOf("草地") != -1) { faf.GrasslandCount += 1; } else if (solidType.IndexOf("林地") != -1) { faf.WoodlandCount += 1; } else if (solidType.IndexOf("耕地") != -1) { faf.FarmlandCount += 1; } else { faf.OtherCount += 1; } faf.FarmlandPercent = (float)faf.FarmlandCount / faf.FireCount; faf.WoodlandPercent = (float)faf.WoodlandCount / faf.FireCount; faf.GrasslandPercent = (float)faf.GrasslandCount / faf.FireCount; faf.OtherPercent = (float)faf.OtherCount / faf.FireCount; //环保部新增字段 if (faf.FireIndeies == null) { faf.FireIndeies = new List <int>(); } if (!faf.FireIndeies.Contains(pixelFeature.PixelIndex)) { faf.FireIndeies.Add(pixelFeature.PixelIndex); } int code = _xianJieDictionary.GetCode(faf.Longitude, faf.Latitude); faf.SJName = _xianJieDictionary.GetPixelName((int)(Math.Floor(code / 10000f) * 10000)); faf.ShiName = _xianJieDictionary.GetPixelName((int)(Math.Floor(code / 100f) * 100)); if (!string.IsNullOrEmpty(faf.ShiName)) { faf.ShiName = string.IsNullOrEmpty(faf.SJName) ? faf.ShiName : faf.ShiName.Replace(faf.SJName, ""); } return(faf); }
internal IFileExtractResult Generator(IArgumentProvider argProvider, Dictionary <int, PixelFeature> features) { if (argProvider.DataProvider == null || features == null || features.Count == 0) { return(null); } DateTime orbitDateTime = DateTime.MinValue; string saveFilename = GetPLSTFilename(argProvider, out orbitDateTime); CoordEnvelope envelope = argProvider.DataProvider.CoordEnvelope; float resolutionX = argProvider.DataProvider.ResolutionX; float resolutionY = argProvider.DataProvider.ResolutionY; int sample = argProvider.DataProvider.Width; int line = argProvider.DataProvider.Height; int row, col, index = 0; double longitude, latitude; using (StreamWriter sw = new StreamWriter(saveFilename, false, Encoding.Default)) { foreach (int fet in features.Keys) { if (features[fet].IsVertified) { row = features[fet].PixelIndex / sample; col = features[fet].PixelIndex - row * sample; longitude = envelope.MinX + col * resolutionX; latitude = envelope.MaxY - row * resolutionY; //0 sw.Write((index++).ToString().PadLeft(7, ' ')); sw.Write("\t"); //1 sw.Write(latitude.ToString("0.00").PadLeft(6, ' ')); sw.Write("\t"); //2 sw.Write(longitude.ToString("0.00").PadLeft(7, ' ')); sw.Write("\t"); //3 sw.Write(features[fet].FireAreaNum.ToString().PadLeft(7, ' ')); sw.Write("\t"); //4 int xianJie = _xianJieDictionary.GetCode(longitude, latitude); if (xianJie != default(int)) { sw.Write(xianJie.ToString().PadLeft(6, ' ')); } else { //sw.Write("-9999".PadLeft(6, ' ')); sw.Write("0".PadLeft(6, ' ')); } sw.Write("\t"); //5 byte landUse = _landTypeDictionary.GetCode(longitude, latitude); if (landUse != default(byte)) { sw.Write(landUse.ToString().PadLeft(12, ' ')); } else { //sw.Write("-9999".PadLeft(12, ' ')); sw.Write("0".PadLeft(12, ' ')); } sw.Write("\t"); //6 sw.Write(features[fet].PixelArea.ToString("#0.000000").PadLeft(10, ' ')); sw.Write("\t"); //7 if (features[fet].PixelArea == 0) { sw.Write("0.0000".PadLeft(6, ' ')); } else { sw.Write((features[fet].SecondPixelArea / (features[fet].PixelArea * 100) * 100).ToString("#0.0000").PadLeft(6, ' ')); } sw.Write("\t"); //8 sw.Write("750.00".PadLeft(8, ' ')); sw.Write("\t"); //9 sw.Write(orbitDateTime.ToString("yyyy-MM-dd HH:mm").PadLeft(16, ' ')); sw.Write("\t"); //10 sw.Write(features[fet].FireIntensityGrade.ToString().PadLeft(8, ' ')); sw.Write("\t"); //11 //sw.Write(features[fet].FirIntensity.ToString("#.########").PadLeft(16, ' ')); sw.Write(features[fet].FirIntensity.ToString("0.0000000").PadLeft(16, ' ')); sw.WriteLine(); } } } if (File.Exists(saveFilename)) { IFileExtractResult result = new FileExtractResult("PLST", saveFilename); result.SetDispaly(false); return(result); } return(null); }