读取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 }
读取个人地理数据库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 }