このトピックは、シェープ ファイルを読み込んで、 XamGeographicMap™ コントロールに地理的データをバインドする方法を提供します。
以下の表に、このトピックを理解するための前提条件として求められるトピックをリストします。
このトピックには次のセクションがあります。
アプリケーションへのシェープ ファイルの追加は、画像、オーディオ、ビデオ ファイルなどの実行可能ではないデータ ファイルの通常の追加と同じです。開発者として、アプリケーションでシェープ ファイルを配置するための多くの方法があります。これらの方法は、以下の MSDN トピックで説明されています。
すべてのシェープ ファイルは、アプリケーションの同じフォルダに配置してください。
以下の画像は、リソース ファイルとして追加されたシェープ ファイルがある WPF アプリケーション プロジェクトのサンプル構造を示します。
XamGeographicMap コントロールでは、 ShapefileConverter クラスはシェープ ファイルから地理的データを読み込んで、それを ShapefileRecord オブジェクトのコレクションに変換します。
以下の表は、シェープ ファイルを読み込むための ShapefileConverter クラスのプロパティを説明します。
シェープ ファイルのソース プロパティは両方とも Uri タイプです。つまり、シェープ ファイルは、インターネット上(http を介して) assembly または で、アプリケーション アセンブリ内の埋め込みリソースとすることができます。この手順の詳細については、「地理的データでシェープ ファイルをバインディング」のセクションを参照してください。Uri オブジェクトを解決するルールは、たとえば BitmapImage.UriSource プロパティの標準的な Uri プロパティと同じです。
両方のソース プロパティが null 以外の値に設定されると、 ShapefileConverter オブジェクトの ImportAsync メソッドが起動し、シェープ ファイルを取得して読み込み、最終的に変換を実行します。この操作が完了すると、 ShapefileConverter は ShapefileRecord オブジェクトで生成され、シェープ ファイルから地理的データを読み込んで変換するプロセスが完了したことを通知するために、 ImportCompleted イベントが起動されます。
以下のコードは、世界の主要都市の場所を含むシェープ ファイルを読み込むための ShapefileConverter オブジェクトのインスタンスを作成します。また、XamGeographicMap コントロールにデータをバインドするための前提条件として ImportCompleted イベントを処理する方法も示します。
XAML の場合:
xmlns:ig="http://schemas.infragistics.com/xaml"
<ig:ShapefileConverter x:Key="shapefileConverter"
ImportCompleted="OnShapefileImportCompleted"
ShapefileSource="ShapeFiles/world_countries.shp"
DatabaseSource="ShapeFiles/world_countries.dbf" >
</ig:ShapefileConverter>
Visual Basic の場合:
Imports Infragistics.Controls.Maps
Private WithEvents shapefileConverter As New ShapefileConverter()
shapefileConverter.ShapefileSource = New Uri("ShapeFiles/world_countries.shp", UriKind.RelativeOrAbsolute)
shapefileConverter.DatabaseSource = New Uri("ShapeFiles/world_countries.dbf", UriKind.RelativeOrAbsolute)
Private Sub OnShapefileConverterImportCompleted(sender As Object, e As System.ComponentModel.AsyncCompletedEventArgs) Handles shapefileConverter.ImportCompleted
' TODO: bind shapefileConverter to the XamGeographicMap control
End Sub
C# の場合:
using Infragistics.Controls.Maps;
ShapefileConverter shapefileConverter = new ShapefileConverter();
shapefileConverter.ImportCompleted += OnShapefileImportCompleted;
shapefileConverter.ShapefileSource = new Uri("ShapeFiles/world_countries.shp", UriKind.RelativeOrAbsolute);
shapefileConverter.DatabaseSource = new Uri("ShapeFiles/world_countries.dbf", UriKind.RelativeOrAbsolute);
private void OnShapefileImportCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
// TODO: shapefileConverter を XamGeographicMap コントロールにバインドします
}
XamGeographicMap コントロールでは、地理的シリーズは、シェープ ファイルから読み込まれる地理的データを表示するために使用されます。XamGeographicMap コントロールによってサポートされている地理的シリーズの概要については、 「地理的シリーズを使用」のトピックを参照してください。地理的シリーズのすべてのタイプには、このインターフェイス(たとえば、 List、 Collection、 Queue、 Stack)を実装するオブジェクトにバインドできる ItemsSource プロパティがあります。 ShapefileConverter は Enumerable オブジェクトのもうひとつの例です。 ShapefileRecord オブジェクトのコレクションを実装するからです。
ShapefileRecord クラスは、以下の表にリストする地理的データを保存するためのプロパティを提供します。
このデータ構造は、適切なデータ列がマップされている限り、ほとんどの地理的シリーズでの使用に適しています。
以下のトピックは、地理的シリーズの各タイプのバインディングおよびデータ要件を詳細に説明しています。
このコードは、このトピックの 「地理的データでシェープ ファイルをバインディング」のセクションで説明しているように、シェープ ファイルが ShapefileConverter を使用して読み込まれることを想定しています。
以下のコードは、XamGeographicMap コントロールの GeographicShapeSeries を ShapefileConverter にバインドし、すべての ShapefileRecord オブジェクトの Points プロパティをマップします。
XAML の場合:
<ig:XamGeographicMap x:Name="GeoMap">
<ig:XamGeographicMap.Series>
<ig:GeographicShapeSeries Brush="DimGray"
ItemsSource="{StaticResource shapeFileSource}"
ShapeMemberPath="Points" >
</ig:GeographicShapeSeries>
</ig:XamGeographicMap.Series>
</ig:XamGeographicMap>
Visual Basic の場合:
Private Sub OnShapefileConverterImportCompleted(sender As Object, e As System.ComponentModel.AsyncCompletedEventArgs) Handles shapeFileConverter.ImportCompleted
Me.GeoMap.Series[0].ItemsSource = shapefileConverter
Me.GeoMap.Series[0].ShapeMemberPath = “Points”
End Sub
C# の場合:
private void OnShapefileConverterImportCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
this.GeoMap.Series[0].ItemsSource = shapefileConverter;
this.GeoMap.Series[0].ShapeMemberPath = “Points”;
}
以下のトピックでは、このトピックに関連する情報を提供しています。