读取shp文件:

  private void btnBrower_Click(object sender, EventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.Title = "打开ShapeFile数据";
dlg.Filter = "ShapeFile数据(*.shp)|*.shp";
if (dlg.ShowDialog() == DialogResult.OK)
{
Ogr.RegisterAll(); string strVectorFile = dlg.FileName;
textBox1.Text = strVectorFile;
//打开数据
DataSource ds = Ogr.Open(strVectorFile, );
if (ds == null)
{
listBox1.Items.Add(string.Format("打开文件【{0}】失败!", strVectorFile));
return;
}
listBox1.Items.Add(string.Format("打开文件【{0}】成功!", strVectorFile)); // 获取该数据源中的图层个数,一般shp数据图层只有一个,如果是mdb、dxf等图层就会有多个
int iLayerCount = ds.GetLayerCount(); // 获取第一个图层
Layer oLayer = ds.GetLayerByIndex();
if (oLayer == null)
{
listBox1.Items.Add(string.Format("获取第{0}个图层失败!\n", ));
return;
} // 对图层进行初始化,如果对图层进行了过滤操作,执行这句后,之前的过滤全部清空
oLayer.ResetReading(); // 通过属性表的SQL语句对图层中的要素进行筛选,这部分详细参考SQL查询章节内容
//oLayer.SetAttributeFilter("\"NAME99\"LIKE \"北京市市辖区\""); // 通过指定的几何对象对图层中的要素进行筛选
//oLayer.SetSpatialFilter(); // 通过指定的四至范围对图层中的要素进行筛选
//oLayer.SetSpatialFilterRect(); // 获取图层中的属性表表头并输出
listBox1.Items.Add("属性表结构信息:");
FeatureDefn oDefn = oLayer.GetLayerDefn();
int iFieldCount = oDefn.GetFieldCount();
for (int iAttr = ; iAttr < iFieldCount; iAttr++)
{
FieldDefn oField = oDefn.GetFieldDefn(iAttr); listBox1.Items.Add(string.Format("{0}:{1} ({2}.{3})", oField.GetNameRef(),
oField.GetFieldTypeName(oField.GetFieldType()),
oField.GetWidth(), oField.GetPrecision()));
}
// 输出图层中的要素个数
listBox1.Items.Add(string.Format("要素个数 = {0}", oLayer.GetFeatureCount()));
Feature oFeature = null;
// 下面开始遍历图层中的要素
while ((oFeature = oLayer.GetNextFeature()) != null)
{
Geometry geo = oFeature.GetGeometryRef();
wkbGeometryType wkb = geo.GetGeometryType();
listBox1.Items.Add(string.Format("当前处理第要素值:{0}", wkb.ToString()));
string strGml=geo.ExportToGML();
listBox1.Items.Add(strGml);
listBox1.Items.Add(string.Format("当前处理第{0}个: \n属性值:", oFeature.GetFID())); // 获取要素中的属性表内容
for (int iField = ; iField < iFieldCount; iField++)
{
FieldDefn oFieldDefn = oDefn.GetFieldDefn(iField);
FieldType type = oFieldDefn.GetFieldType();
switch (type)
{
case FieldType.OFTString:
listBox1.Items.Add(string.Format("{0}\t", oFeature.GetFieldAsString(iField)));
break;
case FieldType.OFTReal:
listBox1.Items.Add(string.Format("{0}\t", oFeature.GetFieldAsDouble(iField)));
break;
case FieldType.OFTInteger:
listBox1.Items.Add(string.Format("{0}\t", oFeature.GetFieldAsInteger(iField)));
break;
default:
listBox1.Items.Add(string.Format("{0}\t", oFeature.GetFieldAsString(iField)));
break;
}
}
// 获取要素中的几何体
Geometry oGeometry = oFeature.GetGeometryRef();
// 为了演示,只输出一个要素信息
break;
}
listBox1.Items.Add("数据集关闭!");
}
}

读取个人地理数据库mdb:

  private void btnBrower_Click(object sender, EventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.Title = "打开Personal Geodatabase";
dlg.Filter = "Personal Geodatabase数据(*.mdb)|*.mdb";
if (dlg.ShowDialog() == DialogResult.OK)
{
Ogr.RegisterAll(); string strVectorFile = dlg.FileName;
textBox1.Text = strVectorFile;
string strInfo = string.Empty;
//打开数据
DataSource ds = Ogr.Open(strVectorFile, );
if (ds == null)
{
strInfo += string.Format("打开文件【{0}】失败!\n", strVectorFile);
return;
}
strInfo += string.Format("打开文件【{0}】成功!\n", strVectorFile); // 获取该数据源中的图层个数,一般shp数据图层只有一个,如果是mdb、dxf等图层就会有多个
int iLayerCount = ds.GetLayerCount();
strInfo += string.Format("个人地理数据库共包含{0}个图层!\n", iLayerCount);
// 获取第一个图层
Layer oLayer = ds.GetLayerByIndex();
if (oLayer == null)
{
strInfo += string.Format("获取第{0}个图层失败!\n", );
return;
}
strInfo += string.Format("第0个图层名称:{0}\n", oLayer.GetName());
// 对图层进行初始化,如果对图层进行了过滤操作,执行这句后,之前的过滤全部清空
oLayer.ResetReading(); // 通过属性表的SQL语句对图层中的要素进行筛选,这部分详细参考SQL查询章节内容
//oLayer.SetAttributeFilter("\"NAME99\"LIKE \"北京市市辖区\""); // 通过指定的几何对象对图层中的要素进行筛选
//oLayer.SetSpatialFilter(); // 通过指定的四至范围对图层中的要素进行筛选
//oLayer.SetSpatialFilterRect(); // 获取图层中的属性表表头并输出
strInfo += "属性表结构信息:\n";
FeatureDefn oDefn = oLayer.GetLayerDefn();
int iFieldCount = oDefn.GetFieldCount();
for (int iAttr = ; iAttr < iFieldCount; iAttr++)
{
FieldDefn oField = oDefn.GetFieldDefn(iAttr); strInfo += string.Format("{0}:{1} ({2}.{3})\n", oField.GetNameRef(),
oField.GetFieldTypeName(oField.GetFieldType()),
oField.GetWidth(), oField.GetPrecision());
}
// 输出图层中的要素个数
strInfo += string.Format("要素个数 = {0}\n", oLayer.GetFeatureCount());
Feature oFeature = null;
// 下面开始遍历图层中的要素
while ((oFeature = oLayer.GetNextFeature()) != null)
{
Geometry geo = oFeature.GetGeometryRef();
if (geo==null)
{
break;
}
wkbGeometryType wkb = geo.GetGeometryType();
strInfo += string.Format("当前处理第{0}要素值:{1}\n", oFeature.GetFID(), wkb.ToString());
string strGml = geo.ExportToGML();
strInfo += strGml;
strInfo += string.Format("\n当前处理第{0}个: \n属性值:", oFeature.GetFID()); // 获取要素中的属性表内容
for (int iField = ; iField < iFieldCount; iField++)
{
FieldDefn oFieldDefn = oDefn.GetFieldDefn(iField);
FieldType type = oFieldDefn.GetFieldType();
switch (type)
{
case FieldType.OFTString:
strInfo += string.Format("{0}\t", oFeature.GetFieldAsString(iField));
break;
case FieldType.OFTReal:
strInfo += string.Format("{0}\t", oFeature.GetFieldAsDouble(iField));
break;
case FieldType.OFTInteger:
strInfo += string.Format("{0}\t", oFeature.GetFieldAsInteger(iField));
break;
default:
strInfo += string.Format("{0}\t", oFeature.GetFieldAsString(iField));
break;
}
}
// 获取要素中的几何体
Geometry oGeometry = oFeature.GetGeometryRef();
// 为了演示,只输出一个要素信息
break;
}
strInfo += "\n数据集关闭!";
richTextBox1.Text = strInfo;
}
}

C#+GDAL读写文件的更多相关文章

  1. gdal读写图像分块处理

    转自赵文原文 gdal读写图像分块处理(精华版) Review: 用gdal,感觉还不如直接用C++底层函数对遥感数据进行处理.因为gdal进行太多封装,如果你仅仅只是Geotif等格式进行处理,IO ...

  2. 关于GDAL读写Shp乱码的问题总结

    目录 1. 正文 1.1. shp文件本身的编码的问题 1.2. 设置读取的编码方式 1.2.1. GDAL设置 1.2.2. 解码方式 1.2.3. 其他 2. 参考 1. 正文 最近在使用GDAL ...

  3. Hyper-V无法文件拖拽解决方案~~~这次用一个取巧的方法架设一个FTP来访问某个磁盘,并方便的读写文件

    异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 服务器相关的知识点:http://www.cnblogs.com/dunitia ...

  4. 计算机程序的思维逻辑 (60) - 随机读写文件及其应用 - 实现一个简单的KV数据库

    57节介绍了字节流, 58节介绍了字符流,它们都是以流的方式读写文件,流的方式有几个限制: 要么读,要么写,不能同时读和写 不能随机读写,只能从头读到尾,且不能重复读,虽然通过缓冲可以实现部分重读,但 ...

  5. Python读写文件

    Python读写文件1.open使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open('t ...

  6. php中并发读写文件冲突的解决方案

    在这里提供4种高并发读写文件的方案,各有优点,可以根据自己的情况解决php并发读写文件冲突的问题. 对于日IP不高或者说并发数不是很大的应用,一般不用考虑这些!用一般的文件操作方法完全没有问题.但如果 ...

  7. C#读写文件的方法汇总_C#教程_脚本之家

    C#读写文件的方法汇总_C#教程_脚本之家 http://www.jb51.net/article/34936.htm

  8. Inno Setup 如何读写文件

    软件安装的实质就是拷贝,对于简单的打包当然不需要考虑修改某(配置)文件.通过inno修改文件的目的在于把安装时相关信息写入文件中,提供其它应用的读取,而这些信息也只能在安装时才能确定,比如安装用户选择 ...

  9. java使用IO读写文件总结

    每次用到IO的读写文件都老忘记写法,都要翻过往笔记,今天总结下,省的以后老忘.java读写文件的IO流分两大类,字节流和字符流,基类分别是字符:Reader和Writer:字节:InputStream ...

随机推荐

  1. NHibernate初学六之关联多对多关系

    1:创建三张表T_Course.T_Student.T_Middle:其中一个学生可以对应多个课程,一个课程也可以对应多个学生,用T_Middle存放它们的关系内容: CREATE TABLE [db ...

  2. UITextField 全属性

    //初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, ...

  3. AndroidStudio遇到过的问题

    尊重原创 1.uses-sdk:minSdkVersion 1 cannot be smaller than version 4 declared in library [com.android.su ...

  4. php遍历文件夹下的所有文件及文件夹

    //第一种 遍历放入数据中 function my_scandir($dir) { $files = array(); if ( $handle = opendir($dir) ) { while ( ...

  5. Django学习笔记 Django的工程目录

    mysite├── manage.py 管理项目:包括数据库建立.服务器运行.测试……└── mysite    ├── __init__.py     ├── settings.py 配置文件:应用 ...

  6. linux系统查看IP地址,不显示IP地址或者只显示127.0.0.1

    在linux系统中输入命令: vi  /etc/sysconfig/network-scripts/ifcfg-eth0 然后显示如下结果 点击I或者是A进入可编辑状态(需要先切换到管理员帐号下,自行 ...

  7. ASP.NET 4.0尚未在Web服务器注册 解决

    http://www.cnblogs.com/lvxiouzi/p/3511446.html 安装asp.net 4.0.30319.0版本 命令: %windir%\Microsoft.NET\Fr ...

  8. MVC AJAX Pager Helper

    MVCPager 分页控件: Author:杨涛 http://www.webdiyer.com/mvcpager/demos/ajaxpagers/ https://yunpan.cn/cq4HDc ...

  9. 【BZOJ4424】Cf19E Fairy DFS树

    [BZOJ4424]Cf19E Fairy Description 给定 n 个点,m 条边的无向图,可以从图中删除一条边,问删除哪些边可以使图变成一个二分图. Input 第 1 行包含两个整数 n ...

  10. c# Use NAudio Library to Convert MP3 audio into WAV audio(将Mp3格式转换成Wav格式)

    Have you been in need of converting mp3 audios to wav audios?  If so, the skill in this article prov ...