ogr 缓冲区_OGR读取shapefile中Polygon原始数据
时间: 2024-03-15 12:42:48 浏览: 12
要读取shapefile中Polygon的原始数据,可以使用GDAL/OGR库中的OGRGeometry类。具体步骤如下:
1. 打开shapefile文件:
```c++
OGRRegisterAll();
OGRDataSource *poDS = OGRSFDriverRegistrar::Open("shapefile.shp", FALSE);
if (poDS == NULL) {
printf("Open failed.\n");
exit(1);
}
```
2. 获取第一个图层:
```c++
OGRLayer *poLayer = poDS->GetLayer(0);
if (poLayer == NULL) {
printf("GetLayer failed.\n");
exit(1);
}
```
3. 遍历图层中的所有要素:
```c++
OGRFeature *poFeature;
poLayer->ResetReading();
while ((poFeature = poLayer->GetNextFeature()) != NULL) {
OGRGeometry *poGeometry = poFeature->GetGeometryRef();
if (poGeometry != NULL && wkbFlatten(poGeometry->getGeometryType()) == wkbPolygon) {
// 处理Polygon原始数据
// ...
}
OGRFeature::DestroyFeature(poFeature);
}
```
4. 处理Polygon原始数据:
```c++
OGRPolygon *poPolygon = (OGRPolygon *)poGeometry;
OGRLinearRing *poExteriorRing = poPolygon->getExteriorRing();
int nExteriorPoints = poExteriorRing->getNumPoints();
OGRPoint *paExteriorPoints = new OGRPoint[nExteriorPoints];
poExteriorRing->getPoints(paExteriorPoints);
// 处理外环原始数据
// ...
for (int i = 0; i < poPolygon->getNumInteriorRings(); i++) {
OGRLinearRing *poInteriorRing = poPolygon->getInteriorRing(i);
int nInteriorPoints = poInteriorRing->getNumPoints();
OGRPoint *paInteriorPoints = new OGRPoint[nInteriorPoints];
poInteriorRing->getPoints(paInteriorPoints);
// 处理内环原始数据
// ...
delete[] paInteriorPoints;
}
delete[] paExteriorPoints;
```
以上代码可以读取shapefile中所有的Polygon要素,并将其原始数据提取出来。需要注意的是,OGRGeometry类支持的几何类型很多,如果要处理其他类型的要素,则需要进行相应的判断和处理。