读取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. 动态提交使用jQuery 完成ajax 文件下载----后端php

    1.js代码 // Ajax 文件下载 //当不用传参时,可以将data去掉 jQuery.download = function(url, data, method){ // 获得url和data ...

  2. Sprite与屏幕之间的关系

    锚点这东西挺怀念的,N年前我在做J2ME手游的时候.屏幕整体的坐标是左上角是00点.X轴向右递增,Y轴向下递增.所有的image也是这个原理.只是unity的触摸屏坐标不是左上角,而是左下角. 所以这 ...

  3. C#一个关于委托和事件通俗易懂的例子

    using System; namespace Test { public class 室友 { public delegate void 这是一个委托(); public void 起床晨跑去() ...

  4. centos7下配置免密码登录

    主机master ,slaver1,slaver2 1.每台主机都执行 ssh-keygen -t rsa 然后一直回车 2.操作master.master生成公钥 放入authorized_keys ...

  5. SSL 证书配置nginx

    ssl.conf文件: server { listen 443; server_name www.domain.com; # 改为绑定证书的域名 ssl on; ssl_certificate 1_w ...

  6. mac 环境配置

    安装homebrew 用于安装各种软件 eg:brew search qq 查看qq安装目录 brew install 复制刚刚查看到的目录安装qq 安装 oh my zsh 自动补全目录跳转 1.安 ...

  7. 实例:用类来写一个 memcached 启动脚本

    [root@localhost ~]$ yum install -y memcached #!/usr/bin/env python #-*- coding:utf-8 -*- import os i ...

  8. 开源免费天气预报接口API以及全国所有地区代码[值得收藏]

    国家气象局提供的天气预报接口 接口地址: http://www.weather.com.cn/data/sk/101010100.html http://www.weather.com.cn/data ...

  9. 使用Node.js完成路由

    首先先看一下文件的结构: 我想通过改变不同的路由进不同的页面, 先看这几个HTML页面: 404: <!DOCTYPE html> <html lang="en" ...

  10. Egret5.2.2 微信小游戏行的示例排行榜

    Egret5.2.2版本发布微信小游戏后,在开放数据域有一个默认排行榜.这个文件夹代码+图大小就22kb. 排行榜的效果就是示范用的,很丑...带翻页. 代码如下,基本就是使用canvas渲染了一个排 ...