第一次用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方法是十分低效和耗时的。。。不知道有没有哪位大侠知道怎么做
展开