このトピックでは、データ ポイントの三角測量がどのように機能するか、また XamGeographicMap™ コントロールでデータ描画のパフォーマンスをいかに向上できるのかを説明します。
以下の表は、このトピックを理解するための前提条件として必要なトピックを示しています。
このトピックには次のセクションがあります。
三角測量は緯度と経度の位置に基づいて同じ値によりデータ ポイントを三角測量するプロセスです。地理的コンテキストでデータを三角測量する、次の単純なシナリオを検討します。
以下は、 GeographicScatterAreaSeries を使用してプロットされた (-130, 30)、(-130, 50)、(-100, 50)、(-100, 30)、(-70, 40) の地理的位置のスクリーンショットです。
上記の 5 つのポイントでは、3 つの三角形があり、それらの三角形の頂点のインデックスは (0, 1, 2)、(0, 2, 3)、(2, 3, 4) です。
次の画像はこれらの三角形と頂点のインデックスを示します。
XamGeographicMap コントロールで、 TriangulationSource クラスは三角測量を作成、読み込み、保存するためのデータ ソースを表します。 TriangulationSource の完全なデータ構造は次の表にリストされる 2 つのプロパティで構成されます。
上記の TriangulationSourcePointRecord クラスは三角測量の三角形のポイントの 1 つを表します。以下の表に、 TriangulationSourcePointRecord クラスの重要なプロパティをリストします。
Triangle クラスは 3 つの整数値または三角形の頂点のインデックスでレコードを表します。各整数は Points コレクションのポイントに対応するインデックスです。以下の表に、Triangle クラスの重要なプロパティをリストします。
三角測量データは Intermediate Triangular Irregular Network Format (または略して ITF) を使用する三角測量ファイルに保管することも可能です。このファイル形式と仕様の詳細については、この Web サイトをご覧下さい。
さらに、TriangulationSource クラスは三角測量を作成し、三角測量データを ITF ファイルに保存および ITF から読み込むためのメソッドを提供します。
以下の表に、三角測量データで作業をするための TriangulationSource クラスにおける重要なメソッドをリストします。
XamGeographicMap コントロールでは、以下のタイプの地理的シリーズでデータの三角測量が必要となります。
これらのタイプのシリーズは、三角測量が TrianglesSource プロパティに設定されていない場合、 ItemsSource の項目で自動的に実行される定義済みのデータ三角測量を提供します。ただし、三角測量の計算は非常に時間のかかるプロセスであるため、このプロパティのために TriangulationSource を指定すると、ランタイム パフォーマンスがよくなります。特にデータ項目が多数ある場合には顕著です。したがって、データを事前に三角測量し三角測量を地理的シリーズに提供することによってランタイムにはこの計算を回避すべきです。
以下の表は、事前の三角測量の主な手順をリストします。
事前三角測量を完了した後で、地理的シリーズを三角測量データにバインドするための手順が必要です。詳細な説明については以下のトピックを参照してください。
さらに、TriangulationSource クラスは地理データの三角測量を作成するための Create メソッドを提供します。この静的メソッドは、Points と Triangles を取得して三角測量を作成するためにデリゲートを使用して TriangulationSource を作成します。
以下のコードは、 ShapefileConverter クラスの ImportCompleted イベントのためのハンドラーを実装して、Points および Fields コレクションを取得するためのデリゲートを TriangulationSource クラスの Create メソッドに渡すことによって、シェープ ファイルから三角測量を作成する方法を示します。
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"]));
}
また、TriangulationSource クラスは地理データの三角測量を保存するための SaveItf メソッドを提供します。この静的メソッドは三角測量をアプリケーションと配備できるバイナリ ITF ファイルに保存して三角測量データを読み込むために後で使用します。
以下のコードは、 IsolatedStorageFileStream を TriangulationSource クラスの SaveItf メソッドに提供することによって 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();
}
}
三角測量メソッドの保存と同様に、TriangulationSource クラスは地理的データの三角測量を読み込むための LoadItf メソッドも提供します。この静的メソッドはバイナリ ITF ファイルから三角測量データを読み込みます。
以下のコードは、ITF の IsolatedStorageFileStream を提供して TriangulationSource クラスの LoadItf メソッドにそれを渡すことによって、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;
このトピックについては、以下のトピックも参照してください。