예제 #1
0
        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);
        }
예제 #2
0
        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);
        }