flattenTo2D
virtual void flattenTo2D() = 0
将几何图形转换为严格的 2D 从某种意义上说,这会将所有 Z 坐标转换为 0.0
class MyPoint : public OGRPoint {
public:
void flattenTo2D() override {
// 将几何图形的坐标点转换为二维坐标,去除 Z 和 M 坐标信息
if (getCoordinateDimension() > 2) {
setZ(0);
}
if (getCoordinateDimension() > 3) {
setM(0);
}
}
};
int main() {
// 创建一个自定义的派生类对象
MyPoint point;
point.setX(1);
point.setY(2);
point.setZ(3);
point.setM(4);
// 打印原始坐标信息
std::cout << "原始坐标信息:" << std::endl;
std::cout << "X: " << point.getX() << std::endl;
std::cout << "Y: " << point.getY() << std::endl;
std::cout << "Z: " << point.getZ() << std::endl;
std::cout << "M: " << point.getM() << std::endl;
// 执行 flattenTo2D 函数,将几何图形转换为二维坐标
point.flattenTo2D();
// 打印转换后的坐标信息
std::cout << "转换后的坐标信息:" << std::endl;
std::cout << "X: " << point.getX() << std::endl;
std::cout << "Y: " << point.getY() << std::endl;
std::cout << "Z: " << point.getZ() << std::endl;
std::cout << "M: " << point.getM() << std::endl;
return 0;
}
exportToGML
virtual char *exportToGML(const char *const *papszOptions = nullptr) const
将几何图形转换为 GML 格式 当不再需要时,应使用 CPLFree() 释放返回的字符串
参数:
papszOptions -- 以 NULL 结尾的选项列表。
返回: GML 片段或 NULL 以防出现错误
// 创建一个点对象
OGRPoint point(1, 2);
// 导出为 GML 格式
char* gmlString = point.exportToGML();
// 打印导出的 GML 字符串
std::cout << "导出的 GML 字符串:" << std::endl;
std::cout << gmlString << std::endl;
// 释放内存
CPLFree(gmlString);
exportToKML
Virtual char *exportToKML() const
将几何转换为 KML 格式 当不再需要时,应使用 CPLFree() 释放返回的字符串
返回: KML 片段或空(如果出现错误)
// 创建一个点对象
OGRPoint point(1, 2);
// 导出为 KML 格式
char* kmlString = point.exportToKML();
// 打印导出的 KML 字符串
std::cout << "导出的 KML 字符串:" << std::endl;
std::cout << kmlString << std::endl;
exportToJson
Virtual char *exportToJson() const
将几何图形转换为 GeoJSON 格式 当不再需要时,应使用 CPLFree() 释放返回的字符串
返回: GeoJSON 片段或 NULL 以防出错
// 创建一个线段对象
OGRLineString lineString;
lineString.addPoint(0, 0);
lineString.addPoint(1, 1);
lineString.addPoint(2, 2);
// 导出为 JSON 格式
char* jsonString = lineString.exportToJson();
// 打印导出的 JSON 字符串
std::cout << "导出的 JSON 字符串:" << std::endl;
std::cout << jsonString << std::endl;
exportToGEOS
virtual GEOSGeom exportToGEOS(GEOSContextHandle_t hGEOSCtxt) const
返回与几何图形对应的 GEOSGeom 对象
参数:
hGEOSCtxt -- GEOS 上下文
返回: 与几何图形对应的 GEOSGeom 对象
// 创建一个点对象
OGRPoint point(10, 20);
// 导出为 GEOS 几何对象
GEOSContextHandle_t geosContext = OGRGeometry::createGEOSContext();
GEOSGeom geosGeom = point.exportToGEOS(geosContext);
// 打印导出的 GEOS 几何对象
char* wkt = GEOSGeomToWKT(geosGeom);
std::cout << "导出的 GEOS 几何对象:" << wkt << std::endl;
// 释放内存
CPLFree(wkt);
GEOSGeom_destroy(geosGeom);
OGRGeometry::freeGEOSContext(geosContext);
hasCurveGeometry
virtual OGRBoolean hasCurveGeometry(int bLookForNonLinear = FALSE) const
如果此几何图形是或具有曲线几何图形,则返回此几何图形
参数:
bLookForNonLinear -- 将其设置为 TRUE 以检查几何图形是否为 CIRCULARSTRING 或包含 CIRCULARSTRING。
返回: 如果此几何图形是或具有曲线几何图形,则为 TRUE
// 创建一个线字符串对象
OGRLineString lineString;
lineString.addPoint(0, 0);
lineString.addPoint(1, 1);
lineString.addPoint(2, 0);
// 检查是否存在曲线几何
OGRBoolean hasCurve = lineString.hasCurveGeometry();
// 输出结果
if (hasCurve)
std::cout << "线字符串包含曲线几何" << std::endl;
else
std::cout << "线字符串不包含曲线几何" << std::endl;
getCurveGeometry
virtual OGRGeometry *getCurveGeometry(const char *const *papszOptions = NULLPTR) const
返回此几何图形的曲线版本 如果几何图形没有曲线部分,则返回的几何图形将是它的克隆
相反的方法是OGRGeometry::getLinearGeometry()。
参数:
papszOptions -- 选项作为以 null 结尾的字符串列表。暂时未使用。必须设置为 NULL。
返回: 新的几何图形
// 创建一个多边形几何对象
OGRPolygon polygon;
OGRLinearRing ring;
ring.addPoint(0, 0);
ring.addPoint(0, 1);
ring.addPoint(1, 1);
ring.addPoint(1, 0);
ring.addPoint(0, 0);
polygon.addRing(&ring);
// 获取曲线几何对象
OGRGeometry* curveGeometry = polygon.getCurveGeometry();
getLinearGeometry
virtual OGRGeometry *getLinearGeometry(double dfMaxAngleStepSizeDegrees = 0, const char *const *papszOptions = nullptr) const
返回此几何图形的非曲线版本,可能是近似值 相反的方法是OGRGeometry::getCurveGeometry()。
参数:
-
dfMaxAngleStepSizeDegrees -- 沿弧的最大步长(以度为单位),使用默认设置为零。
-
papszOptions -- 选项作为以 null 结尾的字符串列表。请参阅 OGRGeometryFactory::curveToLineString() 了解有效选项。
返回: 新的几何图形
// 创建一个曲线几何对象
OGRLineString curve;
curve.addPoint(0, 0);
curve.addPoint(1, 1);
curve.addPoint(2, 0);
// 获取线性几何对象
OGRGeometry* linearGeometry = curve.getLinearGeometry();
closeRings
virtual void closeRings()
强制封闭环 如果此几何或任何包含的几何具有未闭合的多边形环,则将通过在末尾添加起点来闭合它们
// 创建一个多边形几何对象
OGRPolygon polygon;
OGRLinearRing ring;
ring.addPoint(0, 0);
ring.addPoint(0, 1);
ring.addPoint(1, 1);
ring.addPoint(1, 0);
polygon.addRing(&ring);
// 封闭多边形的环
polygon.closeRings();
// 打印多边形的环状态
printf("Is ring closed: %d\n", ring.isClosed());
set3D
virtual void set3D(OGRBoolean bIs3D)
添加或删除 Z 坐标维度。
此方法添加或删除显式 Z 坐标尺寸,移除几何的 Z 坐标尺寸将移除所有现有的 Z 值。将 Z 维度添加到几何集合、复合曲线、多边形等。会影响子几何形状。
参数:
bIs3D -- 几何图形是否应具有 Z 维,即 TRUE 或 FALSE
// 创建一个三维点
OGRPoint point(1.0, 2.0, 3.0);
// 输出点的坐标
printf("Before setting 3D: (%.2f, %.2f, %.2f)\n", point.getX(), point.getY(), point.getZ());
// 将点设置为三维
point.set3D(TRUE);
// 输出点的坐标
printf("After setting 3D: (%.2f, %.2f, %.2f)\n", point.getX(), point.getY(), point.getZ());
setMeasured
virtual void setMeasured(OGRBoolean bIsMeasured)
添加或删除 M 坐标维度
此方法添加或删除显式 M 坐标维度。移除几何图形的 M 坐标尺寸将移除任何现有的 M 值。将 M 维添加到几何集合、复合曲线、多边形等。会影响子几何形状
参数:
bIsMeasured -- 几何图形是否应具有 M 维,即 TRUE 或 FALSE
// 创建一个带有 X、Y 和 M 坐标的点
OGRPoint point(1.0, 2.0, 0.0);
// 输出点的坐标和 M 值
printf("Before setting measured: (%.2f, %.2f), M = %.2f\n", point.getX(), point.getY(), point.getM());
// 将点设置为带有 M 坐标
point.setMeasured(TRUE);
point.setM(3.0);
// 输出点的坐标和 M 值
printf("After setting measured: (%.2f, %.2f), M = %.2f\n", point.getX(), point.getY(), point.getM());