既存のレイヤからフィーチャーを別のレイヤへ高速にコピーしたい

ジオメトリの書き込みと属性の書き込みを分けることで高速にコピーを実現可能です。

コピー手順

  1. MapComponent.IsExclusive を false に設定して排他を切る。
  2. コピー元レイヤの mq 属性テーブルを SQL で全件取得し、メモリ上に保持する。
  3. コピー元レイヤからジオメトリを 1 件ずつ読み込んで、コピー先レイヤに書き込む。
  4. 手順 3 で書き込んだジオメトリから Feature Id を取得して、MqxKey を生成する。
  5. MqxKey の key3 と key4 を用いて、手順 2 で取得した属性データを検索する。
  6. 一致する属性データがあれば CSV ファイルに書き出す。
  7. CSV に書きだした属性データをデータベースへ一括インポートする。

コード例[C#]

var baseReader = baseLayer.FeatureClass.CreateReader();

baseReader.Contents = new SearchContents();
baseReader.Contents.Add("#Geometry", true);

var featureFactory = cloneLayer.FeatureClass.Factory;

using (var cloneWriter = outLayer.FeatureClass.CreateWriter())
{
    var it = baseReader.Search();

    while (it.MoveNext())
    {
        var feature = featureFactory.Create(null, it.Current.Geometry);
        cloneWriter.Write(feature);

        var mqxKey = new MqxKey(feature.ID);

        // 属性CSVを出力する
        // mqxKey.Key1, mqxKey.Key2, mqxKey.Key3, mqxKey.Key4 のようにアクセス可能
    }
}
この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています

解決できない場合はこちら お問い合わせ