有時候我們需要獲得矢量邊界的空間坐標,然后把它轉化為行列坐標,例如使用GDALWarp實現裁剪的時候。下面的代碼就是把空間坐標下的矢量多邊形轉化為行列坐標的矢量多邊形。
OGRPolygon* aoiPolygon = (OGRPolygon*)aoiGeometry;
OGRLinearRing* boundary = aoiPolygon->getExteriorRing();
OGRPolygon* pPolygon = (OGRPolygon*)OGRGeometryFactory::createGeometry(wkbPolygon);
int pointcount = boundary->getNumPoints();
OGRLinearRing* pRing = (OGRLinearRing*)OGRGeometryFactory::createGeometry(wkbLinearRing);
for (int i = 0; i < pointcount; i++)
{
double gx = boundary->getX(i);
double gy = boundary->getY(i);
int row = static_cast((gy - srcGeotransform[3]) / srcGeotransform[5]);
int col = static_cast((gx - srcGeotransform[0]) / srcGeotransform[1]);
OGRPoint pt;
pt.setX(col); pt.setY(row);
pRing->addPoint(&pt);
}
pRing->closeRings();
pPolygon->addRing(pRing);
OGRGeometry* cutGeometry = (OGRGeometry*)pPolygon;
注:aoiGeometry是原始多邊形