GDAL C++ API ラーニング パス OGRGeometry アーク クラス OGRCircularString

OGRCircularString クラス        <ogrsf_frmts.h>

OGRCircularStringこのクラスは、OGR ジオメトリ ライブラリ内のクラスで、円弧ストリング (円形ストリング) タイプのジオメトリを表すために使用されます。円弧ストリングは、一連の円弧セグメントで構成される幾何学的図形であり、各円弧セグメントは、開始点、中間点、および終了点の 3 つの点によって定義されます。これらの円弧セグメントは、閉じた円弧ストリングに接続することも、開いた曲線を形成することもできます。

公的行事

OGRCircularString()

空の円弧文字列を作成する

OGRCircularStringconst  OGRCircularString  &other

コピーコンストラクター

OGRCircularString  &演算子= ( const  OGRCircularString  &other )

代入演算子

importFromWkb

仮想 OGRErr  importFromWkb(const unsigned char*, size_t,  OGRwkbVariant , size_t &nBytesConsumedOut) オーバーライド

既知のバイナリ データからジオメトリを指定する

パラメータ:

  • pabyData  -- バイナリ入力データ。

  • nSize  -- pabyData のサイズ (バイト単位)、または不明な場合は -1。

  • eWkbVariant  – wkbVariantPostGIS1 の場合の曲線ジオメトリ コードの特別な解釈

  • nBytesConsumptiondOut  -- 出力パラメータ。消費されたバイト数。

戻り値: すべてがうまくいった場合は OGRERR_NONE、それ以外の場合は OGRERR_NOT_ENOUGH_DATA、OGRERR_UNSUPPORTED_GEOMETRY_TYPE、または OGRERR_CORRUPT_DATA のいずれかが返される可能性があります。

Wkb にエクスポート

virtual  OGRErr  exportToWkb( OGRwkbByteOrder , unsigned char*,  OGRwkbVariant  =  wkbVariantOldOgc ) const オーバーライド

ジオメトリをよく知られたバイナリ形式に変換します

パラメータ:

  • eByteOrder  -- wkbXDR または wkbNDR の 1 つで、それぞれ MSB または LSB のバイト順序を示します。

  • pabyData  -- バイナリ表現を書き込むバッファ。このバッファのサイズは少なくとも ORGGeometry::WkbSize() バイトである必要があります。

  • eWkbVariant  -- 3D (またはそれ以上) ジオメトリをエクスポートするときに使用する標準。デフォルトの wkbVariantOldOgc は、歴史的な OGR バリアントです。wkbVariantIso は ISO SQL/MM で定義され、SFSQL 1.2 の OGC によって使用されるバリアントです。

戻り値: 現在は常に OGRERR_NONE を返します。

importFromWkt

仮想 OGRErr  importFromWkt(const char**)オーバーライド

既知のテキスト データからジオメトリを指定する

パラメータ:

ppszInput  -- ソース テキスト ポインタへのポインタ。ポインタは、使用されたテキストの後のポインタに更新されます。

戻り値: すべてがうまくいった場合は OGRERR_NONE、それ以外の場合は OGRERR_NOT_ENOUGH_DATA、OGRERR_UNSUPPORTED_GEOMETRY_TYPE、または OGRERR_CORRUPT_DATA のいずれかが返される可能性があります。

エクスポートまでの時間

virtual std::文字列exportToWkt(const OGRWktOptions &opts = OGRWktOptions()、  OGRErr  *err = nullptr) constオーバーライド

ループ文字列を WKT にエクスポートする

パラメータ:

  • opts – 出力オプション

  • err  – エラー コードへのポインタ (必要な場合)。

戻る:

このループ文字列を表す WKT 文字列

有効です

virtual  OGRBoolean  IsValid() const オーバーライド

ジオメトリが有効であることをテストします

戻り値: ジオメトリにポイントがない場合は TRUE、それ以外の場合は FALSE

getエンベロープ

virtual void getEnvelope(OGREnvelope  *psEnvelope) const オーバーライド

渡された psEnvelope 構造体のこのジオメトリの境界エンベロープを計算して返します。

パラメータ:

psEnvelope  -- 結果を配置する構造体

// 创建一个圆弧几何对象
    OGRCircularString circularString;
    
    // 添加一些点到圆弧
    circularString.addPoint(0, 0);
    circularString.addPoint(1, 1);
    circularString.addPoint(2, 2);
    
    // 创建一个用于存储外包络矩形的结构体
    OGREnvelope envelope;
    
    // 获取圆弧的外包络矩形
    circularString.getEnvelope(&envelope);
    
    // 打印外包络矩形的坐标信息
    std::cout << "MinX: " << envelope.MinX << std::endl;
    std::cout << "MinY: " << envelope.MinY << std::endl;
    std::cout << "MaxX: " << envelope.MaxX << std::endl;
    std::cout << "MaxY: " << envelope.MaxY << std::endl;

getエンベロープ

virtual void getEnvelope(OGREnvelope3D  *psEnvelope) const オーバーライド

渡された psEnvelope 構造体のこのジオメトリの境界エンベロープ (3D) を計算して返します。

パラメータ:

psEnvelope  -- 結果を配置する構造体

クローン

virtual  OGRCircularString  *clone() const オーバーライド

このオブジェクトのコピーを作成します

戻り値: 元のオブジェクトと同じジオメトリと空間参照系を持つ新しいオブジェクト インスタンス

get_Length

virtual double get_Length() const オーバーライド

曲線の長さを返します

戻り値: カーブの長さ、またはカーブが初期化されていない場合はゼロ

曲線と線

virtual  OGRLineString  *CurveToLine(double dfMaxAngleStepSizeDegrees = 0、const char *const *papszOptions = nullptr) const オーバーライド

パラメータ:

  • dfMaxAngleStepSizeDegrees  – 円弧に沿った最大ステップ サイズ (度単位)。デフォルトは 0 に設定されます。

  • papszOptions  -- NULL で終わる文字列リストまたは NULL としてのオプション。

戻り値: 曲線を近似する線ストリング

価値

virtual void Value(double、  OGRPoint *) const オーバーライド

曲線に沿って指定された距離にある点を取得します

パラメータ:

  • dfDistance  – サンプリング位置の曲線に沿った距離。この曲線の場合、この距離は 0 と get_Length()の間である必要があります 。

  • poPoint  – 曲線の位置を指定する点

    // 创建一个OGRPoint对象表示圆弧曲线的起点
    OGRPoint startPoint(0.0, 0.0);

    // 创建一个圆弧曲线对象,构建一个圆弧
    OGRCircularString circularString;
    circularString.addPoint(&startPoint);
    circularString.addCircularArc(10.0, 0.0, 20.0);

    // 调用Value函数计算圆弧上的点
    double Distance = 15.0; // 假设给定一个长度
    OGRPoint resultPoint;
    circularString.Value(Distance, &resultPoint);

    // 打印计算得到的点坐标
    std::cout << "Point on circular arc at angle " << angle << ": " << resultPoint.getX() << ", " << resultPoint.getY() << std::endl;

get_Area

virtual double get_Area() const オーバーライド

(閉) 曲線の面積を取得する

getGeometryType

virtual  OGRwkbGeometryType  getGeometryType() const オーバーライド

ジオメトリタイプを取得する

getGeometryName

仮想 const char *getGeometryName() const オーバーライド

ジオメトリ タイプの WKT 名を取得します

戻り値: このジオメトリ タイプに使用する名前 (既知のテキスト形式)。返されたポインタは静的な内部文字列を指すため、変更または解放しないでください。

細分化する

仮想 void セグメント化(double dfMaxLength) オーバーライド

指定された距離より長い線分が含まれないようにジオメトリを変更します。

パラメータ:

dfMaxLength  -- 分割後の 2 点間の最大距離

// 创建一个圆弧几何对象
    OGRPoint point1(0, 0);
    OGRPoint point2(5, 0);
    OGRPoint point3(10, 0);
    OGRCircularString circularString;
    circularString.addPoint(&point1);
    circularString.addPoint(&point2);
    circularString.addPoint(&point3);

    // 打印原始的圆弧几何对象
    std::cout << "原始圆弧几何对象:" << std::endl;
    char* wkt;
    circularString.exportToWkt(&wkt);
    std::cout << wkt << std::endl;
    CPLFree(wkt);

    // 使用最大长度为2.0的线段对圆弧几何对象进行分段
    circularString.segmentize(2.0);

    // 打印分段后的圆弧几何对象
    std::cout << "分段后的圆弧几何对象:" << std::endl;
    circularString.exportToWkt(&wkt);
    std::cout << wkt << std::endl;
    CPLFree(wkt)

曲線ジオメトリあり

virtual  OGRBoolean  hasCurveGeometry(int bLookForNonLinear = FALSE) const オーバーライド

曲線ジオメトリであるか、曲線ジオメトリを持っている場合、このジオメトリを返します。

  1. 線形ジオメトリ タイプ:

    • OGRPoint: 点を表すポイント ジオメトリ タイプ。
    • OGRLineString: 一連の連続した線分で構成されるポリラインを表す線ジオメトリ タイプ。
    • OGRRing: リング ジオメトリ タイプ。これは線形ジオメトリ タイプの特殊なタイプであり、閉じた線を表します。リング ジオメトリ タイプを使用して、単純なポリゴンの外側または内側のリングを表すことができます。
  2. 曲線ジオメトリ タイプ:

    • OGRCircularString: 円弧を表す円弧ジオメトリ タイプ。
    • OGRCompoundCurve: 複合曲線ジオメトリ タイプ。複数の線分と円弧で構成される複雑な曲線。
    • OGRCurvePolygon: 曲線ポリゴン ジオメトリ タイプ。曲線で構成されるポリゴンを表します。曲線多角形は、外側のリングと 0 個以上の内側のリングで構成され、これらは直線または円形にすることができます。
  1. bLookForNonLinearパラメータが に設定されている場合FALSE、直線のサブジオメトリ オブジェクトのみが検索され、曲線タイプのサブジオメトリ オブジェクト (円弧、複合曲線などを含む) は検索されないことを意味します。
  2. bLookForNonLinearパラメータが に設定されている場合TRUE、曲線タイプと直線タイプのサブジオメトリ オブジェクトを同時に検索することを意味します。

パラメータ:

bLookForNonLinear  -- これを TRUE に設定すると、ジオメトリに CIRCULARSTRING があるか、または CIRCULARSTRING が含まれているかどうかがチェックされます。

戻り値: このジオメトリが曲線ジオメトリであるか、曲線ジオメトリを持っている場合は TRUE

 OGRPoint point(10.0, 20.0);

    //检查点是否具有曲线几何(非线性)。
    if (point.hasCurveGeometry()) {
        std::cout << "The point contains curve geometry." << std::endl;
    } else {
        std::cout << "The point does not contain curve geometry." << std::endl;
    }

getLinearGeometry

virtual  ORGGeometry  *getLinearGeometry(double dfMaxAngleStepSizeDegrees = 0, const char *const *papszOptions = nullptr) const オーバーライド

このジオメトリの非曲線バージョン (おそらく近似) を返します。

パラメータ:

  • dfMaxAngleStepSizeDegrees  – 円弧に沿った最大ステップ サイズ (度単位)。デフォルトは 0 に設定されます。

  • papszOptions  -- NULL で終わる文字列リストとしてのオプション。

戻り値: 新しいジオメトリ

OGRPoint p1(0, 0);
OGRPoint p2(1, 1);
OGRPoint p3(2, 0);

OGRCircularString cs;
cs.addPoint(&p1);
cs.addPoint(&p2);
cs.addPoint(&p3);

// 转换为线性几何对象
OGRGeometry* linearGeom = cs.getLinearGeometry();

上の例では、先頭に設定した点が のOGRCircularString円弧を表しており、中心点、始点、終点、半径などの情報で表現できます。ただし、OGRCircularStringオブジェクトが線形ジオメトリ オブジェクトに変換されると、円弧セグメントは、元の円弧の形状に近似する一連の連続した直線セグメントに分割されます。

рекомендация

отblog.csdn.net/qq_69574549/article/details/132006932
рекомендация