GEOJSON ファイルを TopoJSON に変換することは、Web マップ向けにより小さくトポロジー対応のデータセットを求める GIS 開発者にとって一般的なニーズです。 Aspose.GIS for .NET は、C# アプリケーションでこの変換を簡素化する強力な SDK です。このガイドでは、環境の設定方法、非同期ストリーミング変換の実行、 大きなファイル向けのパフォーマンス最適化、ベストプラクティスの推奨事項を学び、完全なコードサンプルで実例を確認できます。

.NET で GEOJSON から Topojson への変換を実行する手順

  1. Aspose.GIS NuGet パッケージをインストール - パッケージ マネージャ コンソールで Install-Package Aspose.GIS を実行します。
  2. ソース GEOJSON から VectorLayer を作成 - VectorLayer.FromFile("input.geojson") を使用します。
  3. 変換オプションを構成 - TopoJsonExportOptions を使用してトポロジー精度と対象座標系を設定します。
  4. 非同期エクスポートを実行 - ExportToTopoJsonAsync(outputStream, options) を呼び出して、ファイル全体をメモリにロードせずに結果を書き込みます。
  5. 結果を処理 - ストリームをファイルに保存するか、Web API から返します。

詳細なクラス情報については、API リファレンスをご覧ください。

GEOJSON から Topojson へのサンプル - 完全なコード例

以下の例は、非同期ストリーミングとオプションの座標系変換を含む、エンドツーエンドの完全な変換を示しています。

using System;
using System.IO;
using System.Threading.Tasks;
using Aspose.Gis;
using Aspose.Gis.Export;
using Aspose.Gis.Geometries;

namespace GeoJsonToTopoJsonDemo
{
    class Program
    {
        static async Task Main(string[] args)
        {
            // Path to the source GEOJSON file
            string geoJsonPath = @"C:\Data\sample.geojson";

// Output TopoJSON file path
            string topoJsonPath = @"C:\Data\sample.topojson";

// Load GEOJSON into a VectorLayer
            using (VectorLayer geoLayer = VectorLayer.FromFile(geoJsonPath))
            {
                // Prepare export options
                var options = new TopoJsonExportOptions
                {
                    // Set topology precision (higher = more accurate, larger file)
                    Precision = 0.00001,
                    // Optional: reproject to WGS84 if needed
                    TargetCoordinateSystem = SpatialReferenceSystem.Wgs84
                };

// Open a file stream for async writing
                using (FileStream outputStream = new FileStream(topoJsonPath, FileMode.Create, FileAccess.Write, FileShare.None, 8192, useAsync: true))
                {
                    // Perform async conversion
                    await geoLayer.ExportToTopoJsonAsync(outputStream, options);
                }
            }

Console.WriteLine("Conversion completed successfully.");
        }
    }
}

注意: このコード例はコア機能を示しています。プロジェクトで使用する前に、ファイルパス(sample.geojsonsample.topojson)を実際の場所に合わせて更新し、すべての必須依存関係がインストールされていることを確認し、開発環境で十分にテストしてください。問題が発生した場合は、公式ドキュメント または サポートチーム にお問い合わせください。

.NET のインストールとセットアップ

  1. Visual Studio ソリューションを開きます。
  2. Package Manager Console を開き、実行します:
Install-Package Aspose.GIS
  1. 代わりに、NuGet UI を使用して Aspose.GIS を検索し、インストールします。
  2. インストール後、C# ファイルに using Aspose.Gis; を追加します。
  3. クイックスタートとして、ダウンロードページ からサンプル データをダウンロードしてください。

.NET と Aspose.GIS を使用した Geojson から Topojson への変換

GeoJSON は地理的なフィーチャーをシンプルな JSON オブジェクトとして保存し、TopoJSON はトポロジー情報を追加してファイルサイズを削減し、重複した座標を排除します。TopoJSON への変換は、帯域幅や描画速度が重要な D3.js や Leaflet などのウェブマッピングライブラリで特に有用です。Aspose.GIS for .NET が重い処理を担当し、GeoJSON を解析し、トポロジーグラフを構築し、標準準拠の TopoJSON ファイルをワンコールで書き出します。

Aspose.GIS このタスクに重要な機能

  • GEOJSON と TOPJSON のフルサポート - ネイティブのリーダーとライター。
  • 非同期ストリーミング API - 利用可能な RAM より大きなファイルを処理します。
  • 精度制御 - ファイルサイズと幾何精度のバランスを取ります。
  • 座標系変換 - エクスポート時にリアルタイムで再投影します。
  • 高性能トポロジーエンジン - 大規模なフィーチャコレクション向けに最適化されています。

Async Conversion and Streaming Support

SDK の非同期メソッド (ExportToTopoJsonAsync) はストリームでの操作を可能にし、Web サービスやバックグラウンドジョブに最適です。useAsync:true を指定した FileStream を使用すると、変換は I/O バウンド スレッドで実行され、メインスレッドが解放されアプリケーションの応答性が保たれます。また、出力を直接 HTTP 応答ストリームにパイプでき、一時ファイルを不要にします。

大規模GeoJSONファイルのパフォーマンス最適化

マルチメガバイトのGEOJSONファイルを扱う際は、次のヒントを検討してください。

ファイルサイズ推定変換時間 (秒)メモリ使用量 (MB)
5 MB0.845
50 MB5.2210
200 MB21.5780

ヒント:

  • 必要に応じて Precision を増やしてください - 精度を下げると処理が高速化します。
  • メモリフットプリントを低く保つために async streaming API を使用してください。
  • 変換はバックグラウンドスレッドまたは専用のワーカーサービスで実行してください。

ベストプラクティスとコードサンプル

  • 入力を検証 - エクスポート前に geoLayer.Validate() を呼び出し、形状が不正なジオメトリを検出します。
  • TopoJsonExportOptions を再利用 - 同じ設定で多数のファイルを変換する場合は、オプションインスタンスを1つだけ作成します。
  • 例外を処理 - エクスポート呼び出しを try‑catch ブロックでラップし、Aspose.Gis.GisException の詳細をログに記録します。
  • リソースを破棄 - VectorLayer とストリームには常に using ステートメントを使用し、ファイルハンドルを速やかに解放します。
  • バージョン管理 - 環境間で Aspose.GIS NuGet パッケージのバージョンを統一し、API の不整合を防ぎます。

結論

このガイドでは、.NET で Aspose.GIS for .NET を使用して GEOJSON から Topojson への変換方法を示しました。これで、動作する非同期実装、大規模データセット向けのパフォーマンスチューニング戦略、そしてコードを堅牢に保つためのベストプラクティスが揃いました。製品環境で使用する際は適切なライセンスを取得してください。まずは temporary license で開始し、後で pricing page からフルライセンスを購入できます。マッピングをお楽しみください!

よくある質問

.NET における GEOJSON から TopoJSON への変換とは何ですか?
これは、GEOJSON ファイルを読み取り、トポロジー グラフを構築し、Aspose.GIS for .NET SDK を使用して結果を TopoJSON ファイルとして書き出すプロセスです。この変換によりファイルサイズが削減され、共有エッジが保持されるため、Web ベースの可視化に最適です。

Aspose.GISは複数のGEOJSONファイルのバッチ変換をサポートしていますか?
はい。ファイルパスのコレクションをループし、単一の TopoJsonExportOptions インスタンスを再利用することで、多数のファイルを効率的に変換できます。非同期ストリーミング API は、大規模バッチでもメモリ使用量を低く抑えます。

ディスクに書き込まずに GEOJSON を TopoJSON に変換できますか?
もちろんです。MemoryStream またはその他の Stream 実装を ExportToTopoJsonAsync と共に使用してください。これは、TopoJSON をクライアントに直接返す必要がある Web API に便利です。

トポロジーの精度をカスタマイズする方法はありますか?
TopoJsonExportOptions.Precision プロパティを使用すると、座標の小数点精度を定義できます。値を小さくするとファイルサイズは小さくなりますが、詳細が失われる可能性があります。アプリケーションの精度要件に応じて調整してください。

さらに読む