Example #1
0
        private void 矢量统计测试_Click(object sender, EventArgs e)
        {
            //fname = "F:\\FIR_NDVI_FY3A_MERSI_250M_20120610164136_20120611164136.dat";
            IAOITemplateStat <UInt16> stat = new AOITemplateStat <UInt16>();
            string fullname = VectorAOITemplate.FindVectorFullname("省级行政区域_面.shp");

            StatResultItem[] items = stat.CountByVector(_fname, fullname, "NAME", (x) => x == 1);
        }
Example #2
0
 private int[] GetAOI(IRasterDataProvider prd)
 {
     using (VectorAOITemplate v = VectorAOITemplateFactory.GetAOITemplate("太湖"))
     {
         Size     size;
         Envelope evp = GetEnvelope(out size, out prd);
         return(v.GetAOI(evp, size));
     }
 }
Example #3
0
 private int[] GetAOI(IRasterDataProvider prd, bool isLand)
 {
     using (VectorAOITemplate v = VectorAOITemplateFactory.GetAOITemplate("海陆模版"))
     {
         Size     size;
         Envelope evp        = GetEnvelope(out size, prd);
         int[]    landAoi    = v.GetAOI(evp, size);              //陆地
         int[]    reverseAOI = AOIHelper.Reverse(landAoi, size); //海洋
         return(isLand ? landAoi : reverseAOI);
     }
 }
Example #4
0
        private int[] GetAOI()
        {
            VectorAOITemplate template = VectorAOITemplateFactory.GetAOITemplate("洞庭湖");
            Size size;
            IRasterDataProvider prd;
            Envelope            evp = GetEnvelope(out size, out prd);

            aoi = template.GetAOI(evp, size);
            //
            int[] reverseAOI = AOIHelper.Reverse(aoi, size);
            return(reverseAOI);
        }
Example #5
0
        public static Dictionary <string, int[]> GetFeatureAOIIndex(string shpFileName, string primaryFieldName, CoordEnvelope envelope, Size size)
        {
            string shpFullname = VectorAOITemplate.FindVectorFullname(shpFileName);

            if (String.IsNullOrEmpty(shpFullname))
            {
                return(null);
            }
            Feature[] features = GetFeatures(shpFullname);
            if (features == null || features.Length == 0)
            {
                return(null);
            }
            Dictionary <string, int[]> result = new Dictionary <string, int[]>();
            int        featuresLength         = features.Length;
            List <int> tempInt = new List <int>();

            using (VectorAOIGenerator vg = new VectorAOIGenerator())
            {
                int[]  aoi = null;
                string currentFiledValue = string.Empty;
                for (int i = 0; i < featuresLength; i++)
                {
                    aoi = vg.GetAOI(new ShapePolygon[] { features[i].Geometry as ShapePolygon }, new Envelope(envelope.MinX, envelope.MinY, envelope.MaxX, envelope.MaxY), size);
                    if (aoi == null || aoi.Length == 0)
                    {
                        continue;
                    }
                    currentFiledValue = features[i].GetFieldValue(primaryFieldName);
                    if (result.ContainsKey(currentFiledValue))
                    {
                        tempInt.AddRange(result[currentFiledValue]);
                        tempInt.AddRange(aoi);
                        result[currentFiledValue] = tempInt.ToArray();
                    }
                    else
                    {
                        result.Add(currentFiledValue, aoi);
                    }
                    tempInt.Clear();
                }
                return(result.Count == 0 ? null : result);
            }
        }
        private void InitCategories()
        {
            listView1.Items.Clear();
            listView1.Columns.Clear();
            cbFields.Items.Clear();
            VectorTempFeatureCategory c = new VectorTempFeatureCategory("省级行政区域", VectorAOITemplate.FindVectorFullname("省级行政区域_面.shp"));

            if (c != null)
            {
                Feature[] fets = c.LoadFeatures();
                if (fets == null || fets.Length == 0)
                {
                    return;
                }
                AddVectoreFeaturesToListView(fets);
                _selectUrl = c.Urls[0];
            }
            LoadCustomRegionFiles();
        }
Example #7
0
 private void button16_Click(object sender, EventArgs e)
 {
     using (VectorAOITemplate v = VectorAOITemplateFactory.GetAOITemplate("贝尔湖")) //贝尔湖
     {
         Size size;
         IRasterDataProvider prd;
         Envelope            evp = GetEnvelope(out size, out prd);
         Stopwatch           sw  = new Stopwatch();
         sw.Start();
         aoi = v.GetAOI(evp, size);
         //
         int[] reverseAOI       = AOIHelper.Reverse(aoi, size);
         IBinaryBitmapBuilder b = new BinaryBitmapBuilder();
         Bitmap bm = b.CreateBinaryBitmap(size, Color.Red, Color.Black);
         b.Fill(reverseAOI, size, ref bm);
         //
         string express = "NDVI(band1,band2)";
         int[]  bandNos = new int[] { 1, 2 };
         //构造栅格计算判识器
         ArgumentProvider argprd = new ArgumentProvider(prd, null);
         argprd.AOI = aoi;
         IRasterExtracter <UInt16, float> extracter = new SimpleRasterExtracter <UInt16, float>();
         extracter.Reset(argprd, bandNos, express);
         //判识
         resultNDVI = new MemPixelFeatureMapper <float>("NDVI", 1000, new Size(prd.Width, prd.Height), prd.CoordEnvelope, prd.SpatialRef);
         extracter.Extract(resultNDVI);
         //
         RasterIdentify id = new RasterIdentify();
         id.ThemeIdentify      = "CMA";
         id.ProductIdentify    = "FIR";
         id.SubProductIdentify = "NDVI";
         id.Satellite          = "FY3A";
         id.Sensor             = "MERSI";
         id.Resolution         = "250M";
         id.OrbitDateTime      = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0, 0));
         id.GenerateDateTime   = DateTime.Now;
         IInterestedRaster <float> iir = new InterestedRaster <float>(id, new Size(prd.Width, prd.Height), prd.CoordEnvelope.Clone());
         iir.Put(resultNDVI);
         iir.Dispose();
     }
 }
Example #8
0
        public static int[] GetAOIByVectorTemplate(IRasterDataProvider dataProvider, string shpTemplateName, string primaryFieldName)
        {
            string shpFullname = VectorAOITemplate.FindVectorFullname(shpTemplateName);

            if (String.IsNullOrEmpty(shpFullname))
            {
                return(null);
            }
            //step2:读取矢量
            Feature[] features = GetFeatures(shpFullname);
            if (features == null || features.Length == 0)
            {
                return(null);
            }
            //step3:矢量栅格化
            Dictionary <string, Color> nameColors = new Dictionary <string, Color>();

            using (Bitmap bitmap = VectorsToBitmap(dataProvider, features, primaryFieldName, out nameColors))
            {
                int[]      aoi;
                Color      color;
                string     name;
                List <int> items = new List <int>();
                foreach (Feature fea in features)
                {
                    name = fea.GetFieldValue(primaryFieldName);
                    if (String.IsNullOrEmpty(name))
                    {
                        continue;
                    }
                    color = nameColors[name];
                    aoi   = GetAOIByFeature(bitmap, color);
                    if (aoi != null)
                    {
                        items.AddRange(aoi);
                    }
                }
                return(items != null?items.ToArray() : null);
            }
        }
Example #9
0
        private void InitCategories()
        {
            treeView1.Nodes.Clear();
            //VectorTempFeatureCategory wholeCategory = new VectorTempFeatureCategory("当前区域");
            //_categories.Add(wholeCategory);
            VectorTempFeatureCategory chinaAdminsCategory = new VectorTempFeatureCategory("省级行政区域", VectorAOITemplate.FindVectorFullname("省级行政区域_面.shp"));
            VectorTempFeatureCategory chinaCategory       = new VectorTempFeatureCategory("中国边界", VectorAOITemplate.FindVectorFullname("中国边界.shp"));

            _categories.Add(chinaCategory);
            _categories.Add(chinaAdminsCategory);
            //VectorTempFeatureCategory cityCategory = new VectorTempFeatureCategory("地区行政区域", VectorAOITemplate.FindVectorFullname("市级行政区域_面.shp"));
            //_categories.Add(cityCategory);
            //VectorTempFeatureCategory countryCategory = new VectorTempFeatureCategory("县市行政区域", VectorAOITemplate.FindVectorFullname("县级行政区域_面.shp"));
            //_categories.Add(countryCategory);
            LoadCustomRegionFiles();
            foreach (VectorTempFeatureCategory c in _categories)
            {
                TreeNode tn = new TreeNode(c.Name);
                tn.Tag = c;
                treeView1.Nodes.Add(tn);
            }
            treeView1.ExpandAll();
            treeView1.SelectedNode = treeView1.Nodes[0];
            listView1.MultiSelect  = true;
            btnSelectAll.Visible   = btnUnSelectAll.Visible = true;
        }
Example #10
0
        private StatResultItem[] ApplyStatByVectorTemplate(IRasterDataProvider raster, string shpTemplateName, string primaryFieldName)
        {
            string shpFullname = VectorAOITemplate.FindVectorFullname(shpTemplateName);

            if (String.IsNullOrEmpty(shpFullname))
            {
                return(null);
            }
            CodeCell.AgileMap.Core.Feature[] features = null;
            //step2:读取矢量
            try
            {
                features = GetFeatures(shpFullname);
                if (features == null || features.Length == 0)
                {
                    return(null);
                }
                //step3:矢量栅格化
                Dictionary <string, Color> nameColors = new Dictionary <string, Color>();
                using (Bitmap bitmap = VectorsToBitmap(raster, features, primaryFieldName, out nameColors))
                {
                    int[]  aoi;
                    Color  color;
                    double totalArea;
                    string name;
                    List <StatResultItem> items = new List <StatResultItem>();
                    foreach (Feature fea in features)
                    {
                        name = fea.GetFieldValue(primaryFieldName);
                        if (String.IsNullOrEmpty(name))
                        {
                            continue;
                        }
                        color = nameColors[name];
                        aoi   = GetAOIByFeature(bitmap, color);
                        if (aoi == null)
                        {
                            totalArea = 0;
                        }
                        else
                        {
                            totalArea = GetTotalArea(raster, aoi);
                        }
                        StatResultItem it = new StatResultItem();
                        it.Name  = name;
                        it.Code  = fea.OID.ToString();
                        it.Value = totalArea / _dayCount;
                        items.Add(it);
                    }
                    return(items != null?items.ToArray() : null);
                }
            }
            finally
            {
                if (features != null && features.Length > 0)
                {
                    foreach (Feature item in features)
                    {
                        item.Dispose();
                    }
                }
            }
        }
Example #11
0
        private void 海陆模板_Click(object sender, EventArgs e)
        {
            using (VectorAOITemplate v = VectorAOITemplateFactory.GetAOITemplate("海陆模版")) //贝尔湖
            {
                Size size;
                IRasterDataProvider prd;
                Envelope            evp = GetEnvelope(out size, out prd);
                Stopwatch           sw  = new Stopwatch();
                sw.Start();
                landAoi = v.GetAOI(evp, size);
                //
                int[] reverseAOI = AOIHelper.Reverse(landAoi, size);
                //IBinaryBitmapBuilder b = new BinaryBitmapBuilder();
                //Bitmap bm = b.CreateBinaryBitmap(size, Color.Red, Color.Black);
                //b.Fill(reverseAOI, size, ref bm);
                //对陆地区域使用陆地判识算法
                Dictionary <string, object> args = new Dictionary <string, object>();
                //args.Add("a", 28);
                //args.Add("b", 78);
                //args.Add("c", 245);
                //args.Add("d", 293);
                //args.Add("f", 28);
                //args.Add("g", 0);
                //args.Add("h", 15);
                //args.Add("i", 250);
                //构造判识表达式
                //string express = "((band2/10f) > var_a) && (band2/10f < var_b) && (band5/10f > var_c) && (band5/10f < var_d) && "
                //               + "(band6/10f > var_f) && ((band6 - band2)>var_g)  && ((band6/10f - band5/10f + var_i)>var_h)";
                ////band2:可见光,0.525~0.575(波长范围)
                ////band5:远红外,10.3~11.55
                ////band6:短波红外,1.60~1.69
                //int[] bandNos = new int[] { 2, 5, 6 };
                ////构造栅格计算判识器
                //ArgumentsProvider argprd = new ArgumentsProvider(prd, args);
                //argprd.AOI = reverseAOI;
                //IThresholdExtracter<UInt16> extracter = new SimpleThresholdExtracter<UInt16>();
                //extracter.Reset(argprd, bandNos, express);
                ////判识
                //landResult = new MemPixelIndexMapper("SAND", 1000);
                //extracter.Extract(landResult);
                //landInd = landResult.Indexes.ToArray();

                //对海洋区域使用海洋判识算法
                args.Clear();
                args.Add("a", 8);
                args.Add("b", 26);
                args.Add("c", 265);
                args.Add("d", 283);
                args.Add("e", -10);
                args.Add("f", 0);
                string express = "(band2/10f > var_a) && (band2/10f < var_b) && (band5/10f > var_c) && (band5/10f < var_d) && "
                                 + "(band6/10f > var_a)&& ((band6/10f - band4/10f)>var_e) &&((band2/10f - band4/10f )>var_f)";
                int[]            bandNos = new int[] { 2, 5, 6, 4 };
                ArgumentProvider argprd  = new ArgumentProvider(prd, args);
                argprd.AOI = reverseAOI;
                IThresholdExtracter <UInt16> extracter = new SimpleThresholdExtracter <UInt16>();
                extracter.Reset(argprd, bandNos, express);
                //判识
                seaResult = PixelIndexMapperFactory.CreatePixelIndexMapper("DST", prd.Width, prd.Height, prd.CoordEnvelope, prd.SpatialRef);
                extracter.Extract(seaResult);
                seaIdx = seaResult.Indexes.ToArray();

                //
                IBinaryBitmapBuilder builder = new BinaryBitmapBuilder();
                Size   bmSize = new Size(prd.Width / 2, prd.Height / 2);
                Bitmap bitmap = builder.CreateBinaryBitmap(bmSize, Color.Red, Color.White);
                builder.Fill(landInd, new Size(prd.Width, prd.Height), ref bitmap);
                bitmap.Save("h:\\陆地沙尘.png", ImageFormat.Png);
                builder.Fill(seaIdx, new Size(prd.Width, prd.Height), ref bitmap);
                bitmap.Save("h:\\海洋沙尘.png", ImageFormat.Png);
                //
                RasterIdentify id = new RasterIdentify();
                id.ThemeIdentify      = "CMA";
                id.ProductIdentify    = "SAND";
                id.SubProductIdentify = "2VAL";
                id.Satellite          = "FY3A";
                id.Sensor             = "MERSI";
                id.Resolution         = "1000M";
                id.OrbitDateTime      = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0, 0));
                id.GenerateDateTime   = DateTime.Now;
                IInterestedRaster <UInt16> iir = new InterestedRaster <UInt16>(id, new Size(prd.Width, prd.Height), prd.CoordEnvelope.Clone());
                iir.Put(landInd, 1);
                iir.Put(seaIdx, 1);
                sw.Stop();
                Text = sw.ElapsedMilliseconds.ToString();
                iir.Dispose();
            }


            ////取海洋矢量作为AOI,使用海洋的判识算法
            //Dictionary<string, object> seaargs = new Dictionary<string, object>();
            //seaargs.Add("sa", 8);
            //seaargs.Add("sb", 26);
            //seaargs.Add("sc", 265);
            //seaargs.Add("sd", 283);
            //seaargs.Add("se", -10);
            //seaargs.Add("sf", 0);
            //string seaExpress = "(band2/10f > var_sa) && (band2/10f < var_sb) && (band5/10f > var_sc) && (band5/10f < var_sd) && "
            //                  + "(band6/10f > var_sa)&& ((band6/10f - band4/10f)>var_se) &&((band2/10f - band4/10f )>var_sf)";
            //int[] seabandNos = new int[] { 2, 5, 6, 4 };
            //ArgumentsProvider seaargprd = new ArgumentsProvider(prd, seaargs);
            ////构造判识表达式
            ////构造基于阈值的判识器
            //IThresholdExtracter<UInt16> seaextracter = new SimpleThresholdExtracter<UInt16>();
            //seaextracter.Reset(seaargprd, seabandNos, seaExpress);
            ////判识
            //IPixelIndexMapper searesult = new MemPixelIndexMapper("SAND", 1000);
            //seaextracter.Extract(searesult);
            //int[] seaidxs = searesult.Indexes.ToArray();


            //将两者判识的idex合并
        }
Example #12
0
        private void InitCategories()
        {
            treeView1.Nodes.Clear();
            //
            //VectorTempFeatureCategory wholeCategory = new VectorTempFeatureCategory("当前区域");
            //_categories.Add(wholeCategory);
            //
            VectorTempFeatureCategory chinaCategory = new VectorTempFeatureCategory("中国边界", VectorAOITemplate.FindVectorFullname("中国边界.shp"));

            _categories.Add(chinaCategory);
            //
            VectorTempFeatureCategory chinaAdminsCategory = new VectorTempFeatureCategory("省级行政区域", VectorAOITemplate.FindVectorFullname("省级行政区域_面.shp"));

            _categories.Add(chinaAdminsCategory);
            //
            VectorTempFeatureCategory cityCategory = new VectorTempFeatureCategory("地区行政区域", VectorAOITemplate.FindVectorFullname("市级行政区域_面.shp"));

            _categories.Add(cityCategory);
            //
            VectorTempFeatureCategory countryCategory = new VectorTempFeatureCategory("县市行政区域", VectorAOITemplate.FindVectorFullname("县级行政区域_面.shp"));

            _categories.Add(countryCategory);
            ////
            //VectorTempFeatureCategory landUseTypeCategory = new VectorTempFeatureCategory("土地利用类型", VectorAOITemplate.FindVectorFullname("土地利用类型_合并.shp"));
            //_categories.Add(landUseTypeCategory);
            ////
            //VectorTempFeatureCategory waterBackCategory = new VectorTempFeatureCategory("湖泊", VectorAOITemplate.FindVectorFullname("中国湖泊.shp"));
            //_categories.Add(waterBackCategory);
            //LoadCustomRegionFiles();
            //
            foreach (VectorTempFeatureCategory c in _categories)
            {
                TreeNode tn = new TreeNode(c.Name);
                tn.Tag = c;
                treeView1.Nodes.Add(tn);
            }
            treeView1.ExpandAll();
            //
            treeView1.SelectedNode = treeView1.Nodes[0];
        }