OGRCircularString クラス <ogrsf_frmts.h>
OGRCircularString
このクラスは、OGR ジオメトリ ライブラリ内のクラスで、円弧ストリング (円形ストリング) タイプのジオメトリを表すために使用されます。円弧ストリングは、一連の円弧セグメントで構成される幾何学的図形であり、各円弧セグメントは、開始点、中間点、および終了点の 3 つの点によって定義されます。これらの円弧セグメントは、閉じた円弧ストリングに接続することも、開いた曲線を形成することもできます。
公的行事
OGRCircularString()
空の円弧文字列を作成する
OGRCircularString(const 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 オーバーライド
曲線ジオメトリであるか、曲線ジオメトリを持っている場合、このジオメトリを返します。
線形ジオメトリ タイプ:
- OGRPoint: 点を表すポイント ジオメトリ タイプ。
- OGRLineString: 一連の連続した線分で構成されるポリラインを表す線ジオメトリ タイプ。
- OGRRing: リング ジオメトリ タイプ。これは線形ジオメトリ タイプの特殊なタイプであり、閉じた線を表します。リング ジオメトリ タイプを使用して、単純なポリゴンの外側または内側のリングを表すことができます。
曲線ジオメトリ タイプ:
- OGRCircularString: 円弧を表す円弧ジオメトリ タイプ。
- OGRCompoundCurve: 複合曲線ジオメトリ タイプ。複数の線分と円弧で構成される複雑な曲線。
- OGRCurvePolygon: 曲線ポリゴン ジオメトリ タイプ。曲線で構成されるポリゴンを表します。曲線多角形は、外側のリングと 0 個以上の内側のリングで構成され、これらは直線または円形にすることができます。
bLookForNonLinear
パラメータが に設定されている場合FALSE
、直線のサブジオメトリ オブジェクトのみが検索され、曲線タイプのサブジオメトリ オブジェクト (円弧、複合曲線などを含む) は検索されないことを意味します。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
オブジェクトが線形ジオメトリ オブジェクトに変換されると、円弧セグメントは、元の円弧の形状に近似する一連の連続した直線セグメントに分割されます。