C#+GDAL读写文件
1.ArcEngine和GDAL读写栅格数据机制对比(一)2.[GDAL]1.GDAL1.8.1编译与第一个程序3.C#+GDAL读取影像(1)4.[GDAL]4.影像的读取和显示5.[GDAL]3.影像金字塔构建6.[GDAL]2.读取栅格和矢量数据7.[GDAL]读取HDF格式的calipso数据8.[GDAL]写入shp9.ArcEngine和GDAL读写栅格数据机制对比(二)—— IPixelBlock读写栅格10.[GDAL]GEOS和Proj4编译11.[GDAL]在三维场景中显示DEM12.[转载]C#下使用GDAL将dem转换为灰度图13.[GDAL]编译64位GDAL1.10
14.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 }
读取个人地理数据库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 }
作者:太一吾鱼水
文章未经说明均属原创,学习笔记可能有大段的引用,一般会注明参考文献。
欢迎大家留言交流,转载请注明出处。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
2012-11-11 [C++学习]C++内存管理