ogr 缓冲区_OGR读取shapefile中Polygon原始数据

本文介绍了如何使用OGR库读取shapefile中的Polygon数据,包括获取几何对象、计算面积、判断方向以及尝试导出WKB缓冲区。在处理过程中遇到了WkbSize返回0的问题,作者寻求解决方案以提高空间数据导入数据库的效率。
摘要由CSDN通过智能技术生成

第一次用OGR,想读取一个shapefile的Polygon数据,碰到了下面问题:。。。。。。。。。之前的代码略去          //之前已经得到几...

第一次用OGR,想读取一个shapefile的Polygon数据,碰到了下面问题:。。。。。。。。。之前的代码略去            //之前已经得到几何对象指针poGeometry,并且确定可用OGRPolygon *poPolygon = (OGRPolygon *)poGeometry;//将该指针转化为OGRPolygon几何对象类型的指针fprintf(fp,"GeometryName:%s",poPolygon->getGeometryName());//输出:“GeometryName:POLYGON”fprintf(fp,"Area:%lf\n",poPolygon->get_Area());//Compute area of polygon.//输出:“Area:54.447115” 说明该多边形应该是有效的int   NumInteriorRings = poPolygon->getNumInteriorRings();//多边形内部环的数目fprintf(fp,"环的数目:%d\n",NumInteriorRings);//输出:“环的数目:0”,内部没有环,是一个简单多边形OGRLinearRing *pOGRLinearRing = poPolygon->getExteriorRing();//得到最外的环,这里就可以看成是这个多边形本身了,因为没有内部环fprintf(fp,pOGRLinearRing->isClockwise()?"顺时针\n":"逆时针\n");//输出:“顺时针”,显然应该是这个结果 fprintf(fp,"Area:%lf\n",pOGRLinearRing->get_Area()); //输出:“Area:54.447115” 和 poPolygon的结果一样,因为该多边形只有这个环 OGRPoint point;pOGRLinearRing->getPoint(0,&point);//用getPoint方法得到环中第一个点fprintf(fp,"Coord:%lf %lf\n",point.getX(),point.getY());//输出:“Coord:121.488441 53.332649”   得到一个正确的坐标unsigned char *pData;//unsigned char*类型指针,用于指向数据缓冲区pData = new unsigned char[pOGRLinearRing->WkbSize()];fprintf(fp,"WkbSize:%d\n",pOGRLinearRing->WkbSize());//输出:“WkbSize:0”   ????WHY!!!???// enum wkbByteOrder// {// wkbXDR = 0, // Big Endian// wkbNDR = 1  // Little Endian// };//下面显然是徒劳pOGRLinearRing->exportToWkb(wkbXDR,pData);for(int i=0;iWkbSize();i++)                fprintf(fp,"%d\n",pData[i]);//试着分析一下pData指向缓冲区中的数据,也发现没改过不知道为什么纠结啊,因为要将整个空间数据导入数据库,显然用getPoint方法是十分低效和耗时的。。。不知道有没有哪位大侠知道怎么做

展开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值