GetExtent
가상 OGRErr GetExtent(OGREnvelope *psExtent, int bForce = TRUE )
이 레이어의 범위 가져오기
매개변수:
-
psExtent – 익스텐트 값이 반환될 구조.
-
bForce - 범위를 계산해야 하는지 여부를 나타내는 플래그입니다(비싸더라도).
반환: OGRERR_NONE 성공, OGRERR_FAILURE 정도는 알 수 없음
// 获取第一个图层(OGRLayer)
OGRLayer* layer = dataset->GetLayer(0);
// 定义一个 OGREnvelope 对象用于存储范围
OGREnvelope envelope;
// 获取图层的范围
OGRErr err = layer->GetExtent(&envelope);
// 检查获取范围是否成功
if (err == OGRERR_NONE) {
printf("Extent of layer: (%f, %f) - (%f, %f)\n", envelope.MinX, envelope.MinY, envelope.MaxX, envelope.MaxY);
} else {
printf("Failed to get extent.\n");
}
GetExtent
가상 OGRErr GetExtent (int iGeomField, OGREnvelope *psExtent, int bForce = TRUE )
지정된 지오메트리 필드에서 이 레이어의 범위를 가져옵니다.
매개변수:
-
iGeomField -- 범위를 계산하는 데 사용되는 기하학 필드의 인덱스입니다.
-
psExtent – 익스텐트 값이 반환될 구조.
-
bForce - 범위를 계산해야 하는지 여부를 나타내는 플래그입니다(비싸더라도).
반환: OGRERR_NONE 성공, OGRERR_FAILURE 정도는 알 수 없음
OGRLayer* poLayer = poDS->GetLayer(0);
// 指定要获取范围的几何字段索引
int iGeomField = 0;
// 创建一个 OGREnvelope 对象,用于存储范围
OGREnvelope extent;
// 获取指定几何字段的范围
OGRErr err = poLayer->GetExtent(iGeomField, &extent);
테스트 기능
가상 int TestCapability(const char*) = 0
이 계층이 이름 지정 기능을 지원하는지 여부를 테스트합니다.
매개변수:
pszCap – 테스트할 기능의 이름입니다.
반환값: 레이어에 요청된 기능이 있으면 TRUE, 그렇지 않으면 FALSE. OGRLayers는 인식할 수 없는 기능에 대해 FALSE를 반환합니다.
GNMGenericLayer 및 OGRGNMWrappedResultLayer 에서 구현됨
이름 바꾸기
가상 OGRErr 이름 바꾸기(const char *pszNewName )
레이어 이름 바꾸기
매개변수:
pszNewName -- 새 레이어 이름. 비워둘 수 없습니다.
반품:
성공 시 OGRERR_NONE
// 获取第一个图层
OGRLayer* poLayer = poDS->GetLayer(0);
// 输出当前图层名称
cout << "Current layer name: " << poLayer->GetName() << endl;
// 重命名图层
const char* pszNewName = "NewLayerName";
OGRErr err = poLayer->Rename(pszNewName);
if (err == OGRERR_NONE) {
cout << "Layer renamed successfully to: " << poLayer->GetName() << endl;
} else {
cout << "Failed to rename the layer." << endl;
}
CreateField
가상 OGRErr CreateField(OGRFieldDefn *poField, int bApproxOK = TRUE )
레이어에 새 필드 만들기
매개변수:
-
poField – 디스크에 쓸 필드 정의입니다.
-
bApproxOK -- TRUE인 경우 형식 드라이버의 제한 사항에 따라 필드가 약간 다른 형식으로 생성될 수 있습니다.
반환: OGRERR_NONE 성공
// 创建一个新的图层
OGRLayer* poLayer = poDS->CreateLayer("NewLayer", nullptr, wkbPoint, nullptr);
// 创建一个新的字段
OGRFieldDefn oField("NewField", OFTString);
if (poLayer->CreateField(&oField) != OGRERR_NONE) {
std::cout << "Failed to create the new field." << std::endl;
} else {
std::cout << "New field created successfully." << std::endl;
}
필드 삭제
가상 OGRErr DeleteField (int iField )
레이어의 기존 필드 삭제
매개변수:
iField – 제거할 필드의 인덱스입니다.
반환: OGRERR_NONE 성공
// 获取第一个图层
OGRLayer* poLayer = poDS->GetLayer(0);
if (poLayer == nullptr) {
printf("Failed to get layer.\n");
GDALClose(poDS);
return 1;
}
// 获取要删除的字段的索引
int fieldIndex = 2; // 假设要删除第三个字段
// 删除字段
OGRErr err = poLayer->DeleteField(fieldIndex);
if (err == OGRERR_NONE) {
printf("Field deleted successfully.\n");
} else {
printf("Failed to delete field.\n");
}
재정렬 필드
가상 OGRErr ReorderFields (int *panMap )
레이어의 모든 필드 재정렬
매개변수:
panMap -- GetLayerDefn()->OGRFeatureDefn::GetFieldCount() [0, GetLayerDefn ()-> OGRFeatureDefn::GetFieldCount () -1] 의 배열인 요소 배열입니다 .
반환: OGRERR_NONE 성공
// 获取第一个图层
OGRLayer* poLayer = poDS->GetLayer(0);
if (poLayer == nullptr) {
printf("Failed to get layer.\n");
GDALClose(poDS);
return 1;
}
// 获取当前字段顺序
int numFields = poLayer->GetLayerDefn()->GetFieldCount();
int* fieldMap = new int[numFields];
for (int i = 0; i < numFields; ++i) {
fieldMap[i] = i; // 默认顺序
}
// 定义新的字段顺序
int newOrder[] = {2, 0, 1}; // 假设我们想把第三个字段放在第一个位置,第一个字段放在第二个位置,第二个字段放在第三个位置
// 重新排列字段
OGRErr err = poLayer->ReorderFields(newOrder);
if (err == OGRERR_NONE) {
printf("Fields reordered successfully.\n");
} else {
printf("Failed to reorder fields.\n");
}
AlterFieldDefn
가상 OGRErr AlterFieldDefn(int iField, OGRFieldDefn *poNewFieldDefn, int nFlagsIn )
레이어에서 기존 필드의 정의 변경
매개변수:
-
iField -- 정의를 변경해야 하는 필드의 인덱스입니다.
-
poNewFieldDefn -- 새 필드 정의
-
nFlags – ALTER_NAME_FLAG, ALTER_TYPE_FLAG, ALTER_WIDTH_PRECISION_FLAG, ALTER_NULLABLE_FLAG 및 ALTER_DEFAULT_FLAG의 조합으로 새 필드 정의에서 고려해야 하는 이름 및/또는 유형 및/또는 너비 및 정밀도 필드 및/또는 null 허용 여부를 나타냅니다.
반환: OGRERR_NONE 성공
// 获取第一个图层
OGRLayer* poLayer = poDS->GetLayer(0);
if (poLayer == nullptr) {
printf("Failed to get layer.\n");
GDALClose(poDS);
return 1;
}
// 获取指定字段的定义
int fieldIndex = 0; // 假设我们要修改第一个字段的定义
OGRFieldDefn* poFieldDefn = poLayer->GetLayerDefn()->GetFieldDefn(fieldIndex);
if (poFieldDefn == nullptr) {
printf("Failed to get field definition.\n");
GDALClose(poDS);
return 1;
}
// 修改字段定义
poFieldDefn->SetWidth(50); // 设置字段宽度为50
poFieldDefn->SetPrecision(2); // 设置字段精度为2
// 提交字段修改
OGRErr err = poLayer->AlterFieldDefn(fieldIndex, poFieldDefn, OGRAlterFieldDefnOptions::OGR_ALTER_ALL_FLAG);
if (err == OGRERR_NONE) {
printf("Field definition altered successfully.\n");
} else {
printf("Failed to alter field definition.\n");
}
AlterGeomFieldDefn
가상 OGRErr AlterGeomFieldDefn(int iGeomField, const OGRGeomFieldDefn *poNewGeomFieldDefn, int nFlagsIn )
레이어에서 기존 도형 필드의 정의 변경
매개변수:
-
iGeomField -- 정의를 변경해야 하는 필드의 인덱스입니다.
-
poNewGeomFieldDefn -- 새 필드 정의
-
nFlagsIn -- ALTER_GEOM_FIELD_DEFN_NAME_FLAG, ALTER_GEOM_FIELD_DEFN_TYPE_FLAG, ALTER_GEOM_FIELD_DEFN_NULLABLE_FLAG, ALTER_GEOM_FIELD_DEFN_SRS_FLAG ALTER_GEOM_FIELD_DEFN_SRS_COORD_EPOCH_FLAG의 조합으로 이름 및/또는 유형 및/또는 null을 나타냅니다. 능력 및/또는 SRS 및/또는 좌표 에포크는 새로운 필드 정의에서 고려되어야 합니다. 또는 ALTER_GEOM_FIELD_DEFN_ALL_FLAG로 모든 구성원을 업데이트합니다.
반환: OGRERR_NONE 성공
// 获取第一个图层
OGRLayer* poLayer = poDS->GetLayer(0);
// 获取指定几何字段的定义
int geomFieldIndex = 0; // 假设我们要修改第一个几何字段的定义
OGRGeomFieldDefn* poGeomFieldDefn = poLayer->GetLayerDefn()->GetGeomFieldDefn(geomFieldIndex);
// 修改几何字段定义
OGRGeomFieldDefn newGeomFieldDefn = *poGeomFieldDefn; // 复制原有字段定义
newGeomFieldDefn.SetWidth(50); // 设置字段宽度为50
newGeomFieldDefn.SetPrecision(2); // 设置字段精度为2
// 提交几何字段修改
OGRErr err = poLayer->AlterGeomFieldDefn(geomFieldIndex, &newGeomFieldDefn, OGRAlterGeomFieldDefnOptions::OGR_ALTER_NAME_FLAG);
if (err == OGRERR_NONE) {
printf("Geometry field definition altered successfully.\n");
} else {
printf("Failed to alter geometry field definition.\n");
}
'AlterGeomFieldDefn'은 지오메트리 필드, 즉 지오메트리 정보를 저장하는 레이어의 필드의 정의를 수정하는 데 사용됩니다.
'AlterFieldDefn'은 비기하학적 필드, 즉 속성 정보를 저장하는 레이어의 필드 정의를 수정하는 데 사용됩니다.
CreateGeomField
가상 OGRErr CreateGeomField(OGRGeomFieldDefn *poField, int bApproxOK = TRUE )
레이어에 새 도형 필드를 만듭니다.
매개변수:
-
poField – 디스크에 쓸 기하학 필드 정의.
-
bApproxOK -- TRUE인 경우 형식 드라이버의 제한 사항에 따라 필드가 약간 다른 형식으로 생성될 수 있습니다.
반환: OGRERR_NONE 성공
// 创建一个新的几何字段
OGRGeomFieldDefn geomFieldDefn("MyGeometry", OGRwkbGeometryType::wkbPoint);
geomFieldDefn.SetWidth(2); // 设置坐标维度为2
// 调用CreateGeomField添加几何字段到图层
OGRErr err = layer->CreateGeomField(&geomFieldDefn);
if (err == OGRERR_NONE) {
// 几何字段创建成功
std::cout << "Created new geometry field: " << geomFieldDefn.GetName() << std::endl;
} else {
std::cout << "Failed to create geometry field." << std::endl;
}
SyncToDisk
가상 OGRErr SyncToDisk ( )
보류중인 변경 사항을 디스크에 플러시
반환: 오류가 발생하지 않은 경우(아무것도 하지 않는 경우에도) OGRERR_NONE 또는 오류 코드
// 将修改同步到磁盘
OGRErr err = layer->SyncToDisk();
if (err == OGRERR_NONE) {
std::cout << "Changes synchronized to disk." << std::endl;
} else {
std::cout << "Failed to sync changes to disk." << std::endl;
}