用GDAL/OGR去读shapefile

摘要:
打开ArcCatalog,在“新建”-˃“形状文件”上单击鼠标右键,名称:点,要素类型:点。单击“编辑”并选择投影类型=NULL)//获取元素。该示例涉及五个点,因此{OGRFeatureDefn*poFDefn=poLayer-˃GetLayerDefn();intiField;int i=poFDefn-˃GetFieldCount();//获得字段数。此实例返回5个,不包括前两个字段,这两个字段在arcgis中无法修改;对于{OGRFieldDefn*poFieldDefn=poFDefn-˃GetFieldDefn;//选择相应的输出ifprintf;elseifprintf;elseilprintf;elseprintf;}OGRGeometry*poGeometry;poGeometry=poFeature-˃GetGeometryRef();如果(poGeometry!

一、读shapefile

1、首先,用Arcgis创建所要读的shp文件。打开ArcCatalog,右键NEW->Shapefile,名称Name:point ,要素类型(Feature Type):Point。点击Edit,选择投影类型。

2、打开ArcMap. 单击工具栏里的Add data按钮,打开刚才创建的point.shp文件。

3、添加5个点要素,并添加字段(添加字段要在非编辑模式下,修改字段的值要在编辑模式下,记得退出编辑时要保存),如图所示:用GDAL/OGR去读shapefile第1张

编辑如下C++/GDAL代码:

#include "ogrsf_frmts.h"

int main()

{
	OGRRegisterAll();

	OGRDataSource *poDS;

	poDS = OGRSFDriverRegistrar::Open( "G:\LJF\point.shp", FALSE );//shape文件存放的路径(point.shp即为自己创建的文件)
	if( poDS == NULL )
	{
		printf( "Open failed.
%s" );
		exit( 1 );
	}

	OGRLayer  *poLayer;

	poLayer = poDS->GetLayerByName( "point" );

	OGRFeature *poFeature;

	poLayer->ResetReading();
	while( (poFeature = poLayer->GetNextFeature()) != NULL )//获得要素,本实例指的是五个点,所以会循环5次
	{
		OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();
		int iField;
		int i=poFDefn->GetFieldCount(); //获得字段的数目,本实例返回5,不包括前两个字段(FID,Shape),这两个字段在arcgis里也不能被修改;
		for( iField = 0; iField < poFDefn->GetFieldCount(); iField++ )
		{
			OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn( iField );
           //根据字段值得类型,选择对应的输出
			if( poFieldDefn->GetType() == OFTInteger )
				printf( "%d,", poFeature->GetFieldAsInteger( iField ) );
			else if( poFieldDefn->GetType() == OFTReal )
				printf( "%.3f,", poFeature->GetFieldAsDouble(iField) );
			else if( poFieldDefn->GetType() == OFTString )
				printf( "%s,", poFeature->GetFieldAsString(iField) );
			else
				printf( "%s,", poFeature->GetFieldAsString(iField) );
		}

		OGRGeometry *poGeometry;

		poGeometry = poFeature->GetGeometryRef();
		if( poGeometry != NULL 
			&& wkbFlatten(poGeometry->getGeometryType()) == wkbPoint )
		{
			OGRPoint *poPoint = (OGRPoint *) poGeometry;

			printf( "%.3f,%3.f
", poPoint->getX(), poPoint->getY() );
		}
		else
		{
			printf( "no point geometry
" );
		}       
		OGRFeature::DestroyFeature( poFeature );
	}

	OGRDataSource::DestroyDataSource( poDS );
	system("pause");
	return 0;
}



运行结果如下图:

用GDAL/OGR去读shapefile第2张

免责声明:文章转载自《用GDAL/OGR去读shapefile》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Eclipse设置:背景与字体大小和xml文件中字体大小调整本地yum仓库搭建及rpm软件包定制下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

故障排查:vsftpd无法用浏览器访问

CentOS6上设置的ftp服务器突然无法使用浏览器访问,但可以使用xftp等工具正常访问。据推测,阿里云的安全组设置之前已经过修改,这可能与1)修改vsftpd的配置,在被动模式下手动指定一个随机连接端口,并添加以下内容:passv_min_port=50000pasv_max_port=60000 02)如果只打开端口20和21,设置阿里云安全组控制端口...

mini.DataGrid使用说明

√√√ ajaxOptionsObjectajax配置对象。√√√ idFieldString是行数据的唯一字段。设置为“client”之后,客户端将排序√√√√ totalCountNumber记录总数√√√ defaultColumnWidthNumber默认列宽100√√√√ showColumnsBoolean显示标头true√√√√ showPag...

关于服务器并发量的简单计算

最简单的计算方式就是根据服务器带宽与页面的大小1.假设机房带宽为10Mbs,页面的大小为20KB同时并发量的理论值:10*1024/=64个请求/秒理论上1秒钟同时可以有64个请求访问页面。本考试系统,登陆的页面容量比较大,所有的js,css以及图片未优化前在400KB左右,我们就以400KB为基准,所有后面要用的文件是在首页一次性加载下来的。这一天的测评情...

CAS单点登录------未认证授权服务

问题背景:之前我使用的127.0.0.1进行CAS直接url进行过滤!后来我用nginx进行反向代理出现问题:如下图第一眼,就在内心想,草这什么鬼!调试了五分钟发现还是不行!  网上各种教程!  半小时过去了!我吧配置文件自己看看!    出现这样问题:原因是CAS 的服务认真之前先有个REgx的正则判断,目录如上看这个正则时候,我瞬间明白了,我下面这个问题...

支付宝支付api

使用:alipayDemo来配置支付宝支付接口1拿到商户号,回调地址,支付宝公钥,我的私钥---生成一个对象#给支付宝发请求,信息要用支付宝公钥加密#支付宝给我响应信息,信息会用商户的公钥加密,回来之后再拿用户私钥解密2对象.direct_pay传支付金额,支付商品描述,支付订单号---返回个加密的串3拿到加密的串拼到get请求参数部分pay_url="ht...

转:(WIN)S04-CH01 PCIE XDMA开发环境搭建以及环路测试

XDMAIP使用部分教程分LINUX篇和WINDOWS篇两个部分。通过实战,面向应用,提供给大家XILINXFPGAPCIE应用解决方案。本教程以MK7160FA作为样机测试。这是一款高性价比的FPGA开发板。而M_AXI_LITE挂载的BRAM是需要进行BAR空间操作,所以地址设置为0x80000000...