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); }
private int[] GetAOI(IRasterDataProvider prd) { using (VectorAOITemplate v = VectorAOITemplateFactory.GetAOITemplate("太湖")) { Size size; Envelope evp = GetEnvelope(out size, out prd); return(v.GetAOI(evp, size)); } }
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); } }
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); }
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(); }
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(); } }
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); } }
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; }
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(); } } } }
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合并 }
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]; }