バージョン

データを三角測量

目的

このトピックでは、データ ポイントの三角測量がどのように機能するか、また散布エリア シリーズまたは散布等高線シリーズを使用する場合に XamDataChart™ コントロールでデータ描画のパフォーマンスをいかに改善できるのかを説明します。

三角測量の理解

概要

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

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

DataChart Triangulating Data 1.png

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

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

DataChart Triangulating Data 2.png

三角測量のソース

XamDataChart コントロールで、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
注:

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

事前三角測量プロセス

XamDataChart コントロールで、以下のシリーズ タイプが事前に三角測量したデータを使用するか、三角測量ソースが指定されていない場合にランタイムにデータの三角測量を実行できます。

シリーズのタイプ 説明

このシリーズは、各ポイントに割り当てられた数値を使用して、ポイント データ (X と Y 位置) の三角測量に基づいて、色付きのサーフェスを描画します。このシリーズの詳細については、「散布エリア シリーズ」トピックを参照してください。

このシリーズは、各ポイントに割り当てられた数値を使用して、ポイント データ (X と Y 位置) の三角測量に基づいて、色付きの等高線を描画します。 このシリーズの詳細については、「散布等高線シリーズ」トピックを参照してください。

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

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

三角測量プロセス 説明

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

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

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

TriangulationSource を作成して事前三角測量を完了した後、TrianglesSource プロパティを使用して ScatterAreaSeries または ScatterContourSeries にバインドできます。以下のようになります。

XAML の場合:

<ig:ScatterAreaSeries ItemsSource="{Binding Path=Source.Points}"
                      TrianglesSource="{Binding Path=Source.Triangles}"
                      .../>

C# の場合:

public TriangulationSource Source { get; set; }

// After TriangulationSource is created pass it to the series.
var scatterAreaSeries = new ScatterAreaSeries();
scatterAreaSeries.ItemsSource = Source.Points;
scatterAreaSeries.TrianglesSource = Source.Triangles;

Visual Basic の場合:

Private Dim _source As TriangulationSource
Public Property TriangulationSource Source
    Get
        Return _source
    End Get
    Set
        _source = value
    End Set
End Property

' After TriangulationSource is created pass it to the series.
Dim scatterAreaSeries As New ScatterAreaSeries()
scatterAreaSeries.ItemsSource = Source.Points
scatterAreaSeries.TrianglesSource = Source.Triangles

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

概要

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

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

Note
注:

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

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"]));
}

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

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

概要

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

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

Note
注:

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

C# の場合:

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

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

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

概要

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

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

Note
注:

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

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();
        }
    }
}

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

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

XAML の場合:

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

C# の場合:

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

Visual Basic の場合:

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

関連コンテンツ

このトピックに関連する追加情報については、以下のトピックを参照してください。

トピック 目的

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

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