读取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. strusts annotation

    也叫Zero Configuration(零配置),它省去了写xml文件的麻烦,可以直接在类叫进行配置,不用在java文件和xml文件中来回切换. 1.Action级的注解 @ParentPackag ...

  2. Javascript定义类(class)的最新方法

    极简主义法 3.1 封装 这种方法不使用this和prototype,代码部署起来非常简单,这大概也是它被叫做"极简主义法"的原因. 首先,它也是用一个对象模拟"类&qu ...

  3. 如何使用matlab中的胞元数组

    胞元数组(cell Arry)的基本组分是胞元(cell),每个胞元本身在数组中是平等的,只能以下标区分.胞元可以存放任何类型.任何大小的数组,如任意维数值数组.字符串数组.符号对象等,而且同一个胞元 ...

  4. [转] Windows局域网通过NTP设置时间同步

    NTP(Network Time Protocol,网络时间协议)是用来使网络中的各个计算机时间同步的一种协议. 如果局域网计算机(Windows系统)可以连接Internet,可以通过“控制面板”— ...

  5. HLS图像处理系列——肤色检測

    本博文採用Xilinx HLS 2014.4工具.实现一个肤色检測的模块.当中,本文重点是构建HLS图像处理函数. 新建HLSproject的步骤,本博文不再详述. 本project新建之后,仅仅加入 ...

  6. android 过USB-IF測试注意事项及改动

    USB IF本身是个自愿性的标志(logo)认证. 使用或贴有USB标志的产品都需接受这项測试.其用意是确保全部USB装置的品质都符合要求.产品接受測试的方法有两种:參加USB- IF赞助的兼容性測试 ...

  7. Java课后简答题

    1.简述Java的特点. 面向对象.跨平台性.健壮性.安全性.可移植性.多线程性.动态性等. 2.简述JRE与JDK的区别. JRE(Java Runtime Environment,Java运行时环 ...

  8. LoadRunner监视器

    视图 说明 Runtime Graphs 运行时视图 Running Vusers 虚拟用户运行视图 User Delined Data Points 用户自定义数据点视图 Error Statist ...

  9. CentOs 设置静态IP 方法[测试没问题]

    首先关闭VMware的DHCP: Edit->Virtual Network Editor 选择VMnet8,去掉Use local DHCP service to distribute IP ...

  10. golang 小知识-持续更新中

    Golang 中的指针 - Pointer Go 的原生数据类型可以分为基本类型和高级类型,基本类型主要包含 string, bool, int 及 float 系列,高级类型包含 struct,ar ...