读取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 }