このトピックでは、データ ポイントの三角測量がどのように機能するか、また散布エリア シリーズまたは散布等高線シリーズを使用する場合に XamDataChart™ コントロールでデータ描画のパフォーマンスをいかに改善できるのかを説明します。
このトピックには、以下のセクションがあります。
三角測量は X と Y の位置に基づいて同じ値によりデータ ポイントを三角測量するプロセスです。データを三角測量する、次の単純なシナリオを検討します。
以下は、ScatterAreaSeries を使用してプロットされた (-130, 30)、(-130, 50)、(-100, 50)、(-100, 30)、(-70, 40) の位置のスクリーンショットです。
上記の 5 つのポイントでは、3 つの三角形があり、それらの三角形の頂点のインデックスは (0, 1, 2)、(0, 2, 3)、(2, 3, 4) です。
次の画像はこれらの三角形と頂点のインデックスを示します。
XamDataChart コントロールで、TriangulationSource クラスは三角測量を作成、読み込み、保存するためのデータ ソースを表します。TriangulationSource の完全なデータ構造は次の表にリストされる 2 つのプロパティで構成されます。
TriangulationSourcePointRecord クラスは三角測量の三角形のポイントの 1 つを表します。以下の表に、TriangulationSourcePointRecord クラスの重要なプロパティをリストします。
Triangle クラスは 3 つの整数値または三角形の頂点のインデックスでレコードを表します。各整数は Points コレクションのポイントに対応するインデックスです。以下の表に、Triangle クラスの重要なプロパティをリストします。
三角測量データは Intermediate Triangular Irregular Network Format (または略して ITF) を使用する三角測量ファイルに保管することも可能です。このファイル形式と仕様の詳細については、この Web サイトをご覧下さい。
TriangulationSource クラスは三角測量を作成し、三角測量データを ITF ファイルに保存および ITF から読み込むためのメソッドを提供します。
以下の表に、三角測量データで作業をするための TriangulationSource クラスにおける重要なメソッドをリストします。
XamDataChart コントロールで、以下のシリーズ タイプが事前に三角測量したデータを使用するか、三角測量ソースが指定されていない場合にランタイムにデータの三角測量を実行できます。
これらのタイプのシリーズは、三角測量が TrianglesSource プロパティに設定されていない場合、 ItemsSource の項目で自動的に実行される定義済みのデータ三角測量を提供します。ただし、三角測量の計算は非常に時間のかかるプロセスであるため、このプロパティのために 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 メソッドに渡すことによって、シェープ ファイルから三角測量を作成する方法を示します。
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
TriangulationSource クラスはデータの三角測量を保存するための SaveItf メソッドを提供します。この静的メソッドは三角測量をアプリケーションと配備できるバイナリ ITF ファイルに保存して三角測量データを読み込むために後で使用します。
以下のコードは、IsolatedStorageFileStream を TriangulationSource クラスの SaveItf メソッドに提供することによって 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
三角測量メソッドの保存と同様に、TriangulationSource クラスはデータの三角測量を読み込むための LoadItf メソッドも提供します。この静的メソッドはバイナリ ITF ファイルから三角測量データを読み込みます。
以下のコードは、ITF の IsolatedStorageFileStream を提供して TriangulationSource クラスの LoadItf メソッドにそれを渡すことによって、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
このトピックに関連する追加情報については、以下のトピックを参照してください。