C#+GDAL读写文件

 读取shp文件:

 1  private void btnBrower_Click(object sender, EventArgs e)
 2         {
 3             OpenFileDialog dlg = new OpenFileDialog();
 4             dlg.Title = "打开ShapeFile数据";
 5             dlg.Filter = "ShapeFile数据(*.shp)|*.shp";
 6             if (dlg.ShowDialog() == DialogResult.OK)
 7             {
 8                 Ogr.RegisterAll();
 9 
10                 string strVectorFile = dlg.FileName;
11                 textBox1.Text = strVectorFile;
12                 //打开数据  
13                 DataSource ds = Ogr.Open(strVectorFile, 0);
14                 if (ds == null)
15                 {
16                     listBox1.Items.Add(string.Format("打开文件【{0}】失败!", strVectorFile));
17                     return;
18                 }
19                 listBox1.Items.Add(string.Format("打开文件【{0}】成功!", strVectorFile));
20 
21                 // 获取该数据源中的图层个数,一般shp数据图层只有一个,如果是mdb、dxf等图层就会有多个  
22                 int iLayerCount = ds.GetLayerCount();
23 
24                 // 获取第一个图层  
25                 Layer oLayer = ds.GetLayerByIndex(0);
26                 if (oLayer == null)
27                 {
28                     listBox1.Items.Add(string.Format("获取第{0}个图层失败!\n", 0));
29                     return;
30                 }
31 
32                 // 对图层进行初始化,如果对图层进行了过滤操作,执行这句后,之前的过滤全部清空  
33                 oLayer.ResetReading();
34 
35                 // 通过属性表的SQL语句对图层中的要素进行筛选,这部分详细参考SQL查询章节内容  
36                 //oLayer.SetAttributeFilter("\"NAME99\"LIKE \"北京市市辖区\"");
37 
38                 // 通过指定的几何对象对图层中的要素进行筛选  
39                 //oLayer.SetSpatialFilter();  
40 
41                 // 通过指定的四至范围对图层中的要素进行筛选  
42                 //oLayer.SetSpatialFilterRect();  
43 
44                 // 获取图层中的属性表表头并输出  
45                 listBox1.Items.Add("属性表结构信息:");
46                 FeatureDefn oDefn = oLayer.GetLayerDefn();
47                 int iFieldCount = oDefn.GetFieldCount();
48                 for (int iAttr = 0; iAttr < iFieldCount; iAttr++)
49                 {
50                     FieldDefn oField = oDefn.GetFieldDefn(iAttr);
51 
52                     listBox1.Items.Add(string.Format("{0}:{1} ({2}.{3})", oField.GetNameRef(),
53                              oField.GetFieldTypeName(oField.GetFieldType()),
54                              oField.GetWidth(), oField.GetPrecision()));
55                 }
56                 // 输出图层中的要素个数  
57                 listBox1.Items.Add(string.Format("要素个数 = {0}", oLayer.GetFeatureCount(0)));
58                 Feature oFeature = null;
59                 // 下面开始遍历图层中的要素  
60                 while ((oFeature = oLayer.GetNextFeature()) != null)
61                 {
62                     Geometry geo = oFeature.GetGeometryRef();
63                     wkbGeometryType wkb = geo.GetGeometryType();
64                     listBox1.Items.Add(string.Format("当前处理第要素值:{0}", wkb.ToString()));
65                     string strGml=geo.ExportToGML();
66                     listBox1.Items.Add(strGml);
67                     listBox1.Items.Add(string.Format("当前处理第{0}个: \n属性值:", oFeature.GetFID()));
68 
69                     // 获取要素中的属性表内容  
70                     for (int iField = 0; iField < iFieldCount; iField++)
71                     {
72                         FieldDefn oFieldDefn = oDefn.GetFieldDefn(iField);
73                         FieldType type = oFieldDefn.GetFieldType();
74                         switch (type)
75                         {
76                             case FieldType.OFTString:
77                                 listBox1.Items.Add(string.Format("{0}\t", oFeature.GetFieldAsString(iField)));
78                                 break;
79                             case FieldType.OFTReal:
80                                 listBox1.Items.Add(string.Format("{0}\t", oFeature.GetFieldAsDouble(iField)));
81                                 break;
82                             case FieldType.OFTInteger:
83                                 listBox1.Items.Add(string.Format("{0}\t", oFeature.GetFieldAsInteger(iField)));
84                                 break;
85                             default:
86                                 listBox1.Items.Add(string.Format("{0}\t", oFeature.GetFieldAsString(iField)));
87                                 break;
88                         }
89                     }
90                     // 获取要素中的几何体  
91                     Geometry oGeometry = oFeature.GetGeometryRef();
92                     // 为了演示,只输出一个要素信息  
93                     break;
94                 }
95                 listBox1.Items.Add("数据集关闭!");
96             }
97         }
View Code

 读取个人地理数据库mdb:

  1  private void btnBrower_Click(object sender, EventArgs e)
  2         {
  3             OpenFileDialog dlg = new OpenFileDialog();
  4             dlg.Title = "打开Personal Geodatabase";
  5             dlg.Filter = "Personal Geodatabase数据(*.mdb)|*.mdb";
  6             if (dlg.ShowDialog() == DialogResult.OK)
  7             {
  8                 Ogr.RegisterAll();
  9 
 10                 string strVectorFile = dlg.FileName;
 11                 textBox1.Text = strVectorFile;
 12                 string strInfo = string.Empty;
 13                 //打开数据  
 14                 DataSource ds = Ogr.Open(strVectorFile, 0);
 15                 if (ds == null)
 16                 {
 17                     strInfo += string.Format("打开文件【{0}】失败!\n", strVectorFile);
 18                     return;
 19                 }
 20                 strInfo += string.Format("打开文件【{0}】成功!\n", strVectorFile);
 21 
 22                 // 获取该数据源中的图层个数,一般shp数据图层只有一个,如果是mdb、dxf等图层就会有多个  
 23                 int iLayerCount = ds.GetLayerCount();
 24                 strInfo += string.Format("个人地理数据库共包含{0}个图层!\n", iLayerCount);
 25                 // 获取第一个图层  
 26                 Layer oLayer = ds.GetLayerByIndex(1);
 27                 if (oLayer == null)
 28                 {
 29                     strInfo += string.Format("获取第{0}个图层失败!\n", 1);
 30                     return;
 31                 }
 32                 strInfo += string.Format("第0个图层名称:{0}\n", oLayer.GetName());
 33                 // 对图层进行初始化,如果对图层进行了过滤操作,执行这句后,之前的过滤全部清空  
 34                 oLayer.ResetReading();
 35 
 36                 // 通过属性表的SQL语句对图层中的要素进行筛选,这部分详细参考SQL查询章节内容  
 37                 //oLayer.SetAttributeFilter("\"NAME99\"LIKE \"北京市市辖区\"");
 38 
 39                 // 通过指定的几何对象对图层中的要素进行筛选  
 40                 //oLayer.SetSpatialFilter();  
 41 
 42                 // 通过指定的四至范围对图层中的要素进行筛选  
 43                 //oLayer.SetSpatialFilterRect();  
 44 
 45                 // 获取图层中的属性表表头并输出  
 46                 strInfo += "属性表结构信息:\n";
 47                 FeatureDefn oDefn = oLayer.GetLayerDefn();
 48                 int iFieldCount = oDefn.GetFieldCount();
 49                 for (int iAttr = 0; iAttr < iFieldCount; iAttr++)
 50                 {
 51                     FieldDefn oField = oDefn.GetFieldDefn(iAttr);
 52 
 53                     strInfo += string.Format("{0}:{1} ({2}.{3})\n", oField.GetNameRef(),
 54                              oField.GetFieldTypeName(oField.GetFieldType()),
 55                              oField.GetWidth(), oField.GetPrecision());
 56                 }
 57                 // 输出图层中的要素个数  
 58                 strInfo += string.Format("要素个数 = {0}\n", oLayer.GetFeatureCount(0));
 59                 Feature oFeature = null;
 60                 // 下面开始遍历图层中的要素  
 61                 while ((oFeature = oLayer.GetNextFeature()) != null)
 62                 {
 63                     Geometry geo = oFeature.GetGeometryRef();
 64                     if (geo==null)
 65                     {
 66                         break;
 67                     }
 68                     wkbGeometryType wkb = geo.GetGeometryType();
 69                     strInfo += string.Format("当前处理第{0}要素值:{1}\n", oFeature.GetFID(), wkb.ToString());
 70                     string strGml = geo.ExportToGML();
 71                     strInfo += strGml;
 72                     strInfo += string.Format("\n当前处理第{0}个: \n属性值:", oFeature.GetFID());
 73 
 74                     // 获取要素中的属性表内容  
 75                     for (int iField = 0; iField < iFieldCount; iField++)
 76                     {
 77                         FieldDefn oFieldDefn = oDefn.GetFieldDefn(iField);
 78                         FieldType type = oFieldDefn.GetFieldType();
 79                         switch (type)
 80                         {
 81                             case FieldType.OFTString:
 82                                 strInfo += string.Format("{0}\t", oFeature.GetFieldAsString(iField));
 83                                 break;
 84                             case FieldType.OFTReal:
 85                                 strInfo += string.Format("{0}\t", oFeature.GetFieldAsDouble(iField));
 86                                 break;
 87                             case FieldType.OFTInteger:
 88                                 strInfo += string.Format("{0}\t", oFeature.GetFieldAsInteger(iField));
 89                                 break;
 90                             default:
 91                                 strInfo += string.Format("{0}\t", oFeature.GetFieldAsString(iField));
 92                                 break;
 93                         }
 94                     }
 95                     // 获取要素中的几何体  
 96                     Geometry oGeometry = oFeature.GetGeometryRef();
 97                     // 为了演示,只输出一个要素信息  
 98                     break;
 99                 }
100                 strInfo += "\n数据集关闭!";
101                 richTextBox1.Text = strInfo;
102             }
103         }
View Code

 

 

posted @ 2013-11-11 18:18  太一吾鱼水  阅读(2117)  评论(0编辑  收藏  举报