バージョン

地理的データを三角測量

トピックの概要

目的

このトピックでは、データ ポイントの三角測量がどのように機能するか、また XamGeographicMap™ コントロールでデータ描画のパフォーマンスをいかに向上できるのかを説明します。

前提条件

以下の表は、このトピックを理解するための前提条件として必要なトピックを示しています。

トピック 目的

このトピックでは、XamGeographicMap コントロールに地理的データがあるシェープ ファイルをバインドする方法を提供します。

このトピックは、マップおよび関連する地理的素材についてのリソースおよびシェープ ファイルの情報を提供します。これらのリソースを使用して、シェープ ファイルおよび XamGeographicMap コントロールに地理的データをバインドする前に編集するためのツールを学習し、取得します。

三角測量の理解

概要

三角測量は緯度と経度の位置に基づいて同じ値によりデータ ポイントを三角測量するプロセスです。地理的コンテキストでデータを三角測量する、次の単純なシナリオを検討します。

以下は、 GeographicScatterAreaSeries を使用してプロットされた (-130, 30)、(-130, 50)、(-100, 50)、(-100, 30)、(-70, 40) の地理的位置のスクリーンショットです。

GeographicMap Triangulating Geographic Data 1.png

上記の 5 つのポイントでは、3 つの三角形があり、それらの三角形の頂点のインデックスは (0, 1, 2)、(0, 2, 3)、(2, 3, 4) です。

次の画像はこれらの三角形と頂点のインデックスを示します。

GeographicMap Triangulating Geographic Data 2.png

三角測量のソース

XamGeographicMap コントロールで、 TriangulationSource クラスは三角測量を作成、読み込み、保存するためのデータ ソースを表します。 TriangulationSource の完全なデータ構造は次の表にリストされる 2 つのプロパティで構成されます。

プロパティ名 プロパティ タイプ 説明

ObservableCollection<TriangulationSourcePointRecord>

三角測量が作成される数値と組み合わされたポイントを保管する TriangulationSourcePointRecord オブジェクトのコレクションを取得または設定します。

ObservableCollection<Triangle>

Points コレクションのポイントにそれぞれが対応する 3 つのインデックスを保管する Triangle オブジェクトのコレクションを取得または設定します。

上記の TriangulationSourcePointRecord クラスは三角測量の三角形のポイントの 1 つを表します。以下の表に、 TriangulationSourcePointRecord クラスの重要なプロパティをリストします。

プロパティ名 プロパティ タイプ 説明

Point

三角形のポイントの 1 つの 2 次元 (2-D) の位置を表すポイントを取得または設定します。

Value

float

三角形のポイントの 1 つと関連付けられた値を取得または設定します。

Triangle クラスは 3 つの整数値または三角形の頂点のインデックスでレコードを表します。各整数は Points コレクションのポイントに対応するインデックスです。以下の表に、Triangle クラスの重要なプロパティをリストします。

プロパティ名 プロパティ タイプ 説明

V1

Integer

三角形の最初の頂点のインデックスを取得または設定します。

V2

Integer

三角形の 2 番目の頂点のインデックスを取得または設定します。

V3

Integer

三角形の 3 番目の頂点のインデックスを取得または設定します。

三角測量ファイル

三角測量データは Intermediate Triangular Irregular Network Format (または略して ITF) を使用する三角測量ファイルに保管することも可能です。このファイル形式と仕様の詳細については、この Web サイトをご覧下さい。

三角測量メソッド

さらに、TriangulationSource クラスは三角測量を作成し、三角測量データを ITF ファイルに保存および ITF から読み込むためのメソッドを提供します。

以下の表に、三角測量データで作業をするための TriangulationSource クラスにおける重要なメソッドをリストします。

メソッド名 説明

地理的データの三角測量を作成するためのメソッド。

地理的データの三角測量をバイナリ ITF ファイルに保存するためのメソッド。

地理的データの三角測量をバイナリ ITF ファイルから読み込むためのメソッド。

Note
注:

このトピックの最後にコード例とともにこれらのメソッドそれぞれの詳細な説明を提供します。

事前三角測量プロセス

XamGeographicMap コントロールでは、以下のタイプの地理的シリーズでデータの三角測量が必要となります。

地理的シリーズのタイプ 説明

このシリーズは、各ポイントに数値が割り当てられた緯度および経度データの三角測量に基づいて、地理的コンテキストで色が付けられた面を描画する地理的シリーズを表します。この地理的シリーズの詳細については、 「地理散布エリア シリーズの使用」トピックを参照してください。

このシリーズは、各ポイントに数値が割り当てられた緯度および経度データの三角測量に基づいて、地理的コンテキストで色が付けられた等高線を描画する地理的シリーズを表します。この地理的シリーズの詳細については、 「地理等高線シリーズの使用」トピックを参照してください。

これらのタイプのシリーズは、三角測量が TrianglesSource プロパティに設定されていない場合、 ItemsSource の項目で自動的に実行される定義済みのデータ三角測量を提供します。ただし、三角測量の計算は非常に時間のかかるプロセスであるため、このプロパティのために TriangulationSource を指定すると、ランタイム パフォーマンスがよくなります。特にデータ項目が多数ある場合には顕著です。したがって、データを事前に三角測量し三角測量を地理的シリーズに提供することによってランタイムにはこの計算を回避すべきです。

以下の表は、事前の三角測量の主な手順をリストします。

三角測量プロセス 説明

ShapefileConverter クラスを使用してシェープ ファイルから TriangulationSource オブジェクトとして三角測量データを作成します。

アプリケーションで配備可能な ITF ファイルに三角測量データを保存します。

三角測量データを ITF から読み込んで TriangulationSource オブジェクトとして保管します。

事前三角測量を完了した後で、地理的シリーズを三角測量データにバインドするための手順が必要です。詳細な説明については以下のトピックを参照してください。

シェープ ファイルから三角測量を作成

概要

さらに、TriangulationSource クラスは地理データの三角測量を作成するための Create メソッドを提供します。この静的メソッドは、Points と Triangles を取得して三角測量を作成するためにデリゲートを使用して TriangulationSource を作成します。

以下のコードは、 ShapefileConverter クラスの ImportCompleted イベントのためのハンドラーを実装して、Points および Fields コレクションを取得するためのデリゲートを TriangulationSource クラスの Create メソッドに渡すことによって、シェープ ファイルから三角測量を作成する方法を示します。

Note
注:

このコード例は、 NOAA Web サイトからの降水量データを含むシェープ ファイルを使用しており、シェープ ファイルをプロジェクトに追加し ShapefileConverter と使用する方法をすでに知っていることを前提としています。また、データベース (DBF) ファイルの “Globvalue” データ列の地理的データ ポイントに関連付けられた値を保存しますが、値を含むデータ列の名前はシェープ ファイルで異なります。この場合、 ShapefileConverterFields コレクションに渡されたキーを更新する必要があります。

Visual Basic の場合:

Imports Infragistics.Controls.Charts
Imports Infragistics.Controls.Maps
Imports System.ComponentModel

Private WithEvents converter As New ShapefileConverter()

converter.ShapefileSource = New Uri("nws_precip_1day_observed_20110419.shp", System.UriKind.RelativeOrAbsolute)
converter.DatabaseSource = New Uri("nws_precip_1day_observed_20110419.dbf", System.UriKind.RelativeOrAbsolute)

Private Sub OnShapeFileConverterImportCompleted(sender As Object, e As AsyncCompletedEventArgs) Handles converter.ImportCompleted
      Dim triangulationSource As TriangulationSource = TriangulationSource.Create(converter.Count,
                    Function(i) converter(i).Points(0)(0),
                    Function(i) Convert.ToSingle(converter(i).Fields("Globvalue")))
End Sub

C# の場合:

using Infragistics.Controls.Charts;
using Infragistics.Controls.Maps;
using System.ComponentModel;

var converter = new ShapefileConverter();
converter.ImportCompleted += OnShapeFileConverterImportCompleted;
converter.ShapefileSource= new Uri("nws_precip_1day_observed_20110419.shp", System.UriKind.Relative);
converter.DatabaseSource = new Uri("nws_precip_1day_observed_20110419.dbf", System.UriKind.Relative);

void OnShapeFileConverterImportCompleted(object sender, AsyncCompletedEventArgs e)
{
  TriangulationSource triangulationSource = TriangulationSource.Create(converter.Count,
        (i) => converter[i].Points[0][0],
        (i) => Convert.ToSingle(converter[i].Fields["Globvalue"]));
}

三角測量を ITF ファイルに保存

概要

また、TriangulationSource クラスは地理データの三角測量を保存するための SaveItf メソッドを提供します。この静的メソッドは三角測量をアプリケーションと配備できるバイナリ ITF ファイルに保存して三角測量データを読み込むために後で使用します。

以下のコードは、 IsolatedStorageFileStreamTriangulationSource クラスの SaveItf メソッドに提供することによって ITF ファイルに三角測量データを保存する方法を示します。

Note
注:

このコード例は、分離したストレージに ITF ファイルのサイズに適切なスペースを割り当てるための承認済みリクエストを前提としています。

Visual Basic の場合:

Using iso As IsolatedStorageFile = IsolatedStorageProvider.GetIsolatedStorageFile()
      Dim filePath As String = "TriangulatedFile.itf"
      Using stream = New IsolatedStorageFileStream(filePath, FileMode.Create, iso)
            triangulationSource.SaveItf(stream)
            stream.Close()
      End Using
End Using

C# の場合:

using (IsolatedStorageFile iso = IsolatedStorageProvider.GetIsolatedStorageFile())
{
    string filePath = "TriangulatedFile.itf";
    using (var stream = new IsolatedStorageFileStream(filePath, FileMode.Create, iso))
    {
        triangulationSource.SaveItf(stream);
        stream.Close();
    }
}

三角測量を ITF ファイルから読み込む

概要

三角測量メソッドの保存と同様に、TriangulationSource クラスは地理的データの三角測量を読み込むための LoadItf メソッドも提供します。この静的メソッドはバイナリ ITF ファイルから三角測量データを読み込みます。

以下のコードは、ITF の IsolatedStorageFileStream を提供して TriangulationSource クラスの LoadItf メソッドにそれを渡すことによって、ITF ファイルから三角測量を読み込む方法を示します。

Note
注:

このコード例は、ITF ファイルがすでに存在し分離したストレージでアクセス可能であることを前提としています。

Visual Basic の場合:

Dim triangulationSource As TriangulationSource
Using iso As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForAssembly()
      Dim filePath As String = "TriangulatedFile.itf"
      If iso.FileExists(filePath) Then
            Using stream = New IsolatedStorageFileStream(filePath, FileMode.Open, iso)
                  triangulationSource = TriangulationSource.LoadItf(stream)
                  stream.Close()
            End Using
      End If
End Using

C# の場合:

TriangulationSource triangulationSource;
using (IsolatedStorageFile iso = IsolatedStorageFile.GetUserStoreForAssembly();
{
    string filePath = "TriangulatedFile.itf";
    if (iso.FileExists(filePath))
    {
        using (var stream = new IsolatedStorageFileStream(filePath, FileMode.Open, iso))
        {
            triangulationSource = TriangulationSource.LoadItf(stream);
            stream.Close();
        }
    }
}

ItfConverter メソッドの使用は、以下のコードに示すように、ITF ファイルから三角測量データを読み込むための代替え策です。

XAML の場合:

<ig:ItfConverter x:Key="itfConverter"
                 Source="TriangulatedFile.itf" >
</ig:ItfConverter>

Visual Basic の場合:

 Dim itfConverter = New ItfConverter()
itfConverter.Source = New Uri("TriangulatedFile.itf", UriKind.RelativeOrAbsolute)
Dim triangulationSource As TriangulationSource = itfConverter.TriangulationSource

C# の場合:

var itfConverter = new ItfConverter();
itfConverter.Source = new Uri("TriangulatedFile.itf", UriKind.RelativeOrAbsolute);
TriangulationSource triangulationSource = itfConverter.TriangulationSource;

関連コンテンツ

このトピックについては、以下のトピックも参照してください。

トピック 目的

このトピックでは、XamGeographicMap コントロールに地理的データがあるシェープ ファイルをバインドする方法を提供します。

このトピックでは、マップおよび関連する地理的素材についてのリソースおよびシェープ ファイルの情報を提供します。これらのリソースを使用して、シェープ ファイルおよび XamGeographicMap コントロールに地理的データをバインドする前に編集するためのツールを学習し、取得します。

このトピックは、XamGeographicMap コントロールで GeographicScatterAreaSeries 要素を使用する方法を提供します。

このトピックでは、XamGeographicMap コントロールで GeographicContourLineSeries 要素を使用する方法を提供します。