Angular 複数データ ソースのバインド
Ignite UI for Angular マップでは、カスタム データ ソースを地理空間データとオーバーレイするために複数の地理的シリーズ オブジェクトを追加できます。たとえば、空港の地理的位置をプロットするための IgxGeographicSymbolSeriesComponent
、空港間のフライトをプロットするための IgxGeographicPolylineSeriesComponent
、主要な地理座標のグリッド線をプロットするための別の IgxGeographicPolylineSeriesComponent
などです。
Angular 複数データ ソースのバインドの例
このトピックでは、以下の地理空間データをプロットする複数の地理的シリーズを表示するための手順を説明します。
IgxGeographicSymbolSeriesComponent
– 主要空港の場所を表示します。IgxGeographicPolylineSeriesComponent
– 空港間のフライトを表示します。IgxGeographicPolylineSeriesComponent
– 主座標のグリッド線を表示します。
目的のデータをプロットするために、地理的シリーズをこの組み合わせまたは他の組み合わせでも使用できます。
データ ソースの作成
Ignite UI for Angular マップに表示するすべての地理的シリーズのデータソースを作成します。たとえば、WorldConnections スクリプトを使用できます。
<div className="sampleRoot" >
<igx-geographic-map #map
width="700px"
height="500px"
zoomable="true" >
</igx-geographic-map>
</div>
<ng-template let-series="series" let-item="item" #polylineTooltipTemplate>
<div>
<span>
Arrival: {{item.origin.country}}
</span>
<br/>
<span>
Destination: {{item.dest.country}}
</span>
<br/>
<span>
Distance: {{item.distance}} miles
</span>
</div>
</ng-template>
<ng-template let-series="series" let-item="item" #pointTooltipTemplate>
<div>
<span>
{{item?.country}}
</span>
<br />
<span>
{{item?.name}}
</span>
<br />
<span>
Population: {{item.pop}} M
</span>
<br/>
<span>
Flights: {{item.flights}}
</span>
</div>
</ng-template>
フライトのオーバーレイ
主要空港間のフライト接続を持つ最初の IgxGeographicPolylineSeriesComponent
オブジェクトを作成し、Ignite UI for Angular マップの Series コレクションに追加します。
<igx-geographic-polyline-series #polylineSeries
[tooltipTemplate]="polylineTooltipTemplate"
name="polylineSeries"
shapeMemberPath="points"
shapeStroke="rgba(147, 15, 180, 0.5)"
thickness={3.0} >
</igx-geographic-polyline-series>
グリッド線のオーバーレイ
地理グリッド線を使用して2番目の IgxGeographicPolylineSeriesComponent
オブジェクトを作成し、それを XamGeographicMap の Series コレクションに追加します。
<igx-geographic-polyline-series #polylineSeries
[tooltipTemplate]="polylineTooltipTemplate"
datasource = worldFlights
name="polylineSeries"
shapeMemberPath="points"
shapeStroke="rgba(196, 14, 14,0.05)"
thickness={3.0} >
</igx-geographic-polyline-series>
空港のオーバーレイ
空港ポイントを使用して IgxGeographicSymbolSeriesComponent
オブジェクトを作成し、それを Ignite UI for Angular 地理マップの Series コレクションに追加します。
<igx-geographic-symbol-series #symbolSeries
name="symbolSeries"
longitudeMemberPath="longitude"
latitudeMemberPath="latitude"
markerType="Circle"
markerOutline="rgb(73, 73, 73)"
markerBrush="White" >
</igx-geographic-symbol-series>
まとめ
上記すべてのコード スニペットを以下のコード ブロックにまとめて、プロジェクトに簡単にコピーできます。
import { AfterViewInit, Component, TemplateRef, ViewChild } from "@angular/core";
import { MarkerType } from 'igniteui-angular-charts';
import { IgxGeographicMapComponent } from 'igniteui-angular-maps';
import { IgxGeographicPolylineSeriesComponent } from "igniteui-angular-maps";
import { IgxGeographicSymbolSeriesComponent } from "igniteui-angular-maps";
import { WorldConnections } from "../../utilities/WorldConnections";
@Component({
selector: "app-map-binding-multiple-data-sources",
styleUrls: ["./map-binding-multiple-data-sources.component.scss"],
templateUrl: "./map-binding-multiple--data-sources.component.html"
})
export class MapBindingMultipleSourcesComponent implements AfterViewInit {
@ViewChild ("map")
public map: IgxGeographicMapComponent;
@ViewChild("polylineTooltipTemplate")
public polylineTooltipTemplate: TemplateRef<object>;
@ViewChild("pointTooltipTemplate")
public pointTooltipTemplate: TemplateRef<object>;
public data: any;
constructor() {
}
public ngAfterViewInit(): void {
this.map.windowRect = { left: 0.195, top: 0.1, width: 0.5, height: 0.5 };
const worldFlights = WorldConnections.getFlights();
const worldAirports = WorldConnections.getAirports();
const worldGridlines = WorldConnections.getGridlines();
this.addPolylineSeriesWith(worldFlights);
this.addGridlineSeriesWith(worldGridlines);
this.addSymbolSeriesWith(worldAirports);
}
public addGridlineSeriesWith(data: any[]) {
const gridSeries = new IgxGeographicPolylineSeriesComponent();
gridSeries.dataSource = data;
gridSeries.shapeMemberPath = "points";
gridSeries.shapeStroke = "Gray";
gridSeries.shapeStrokeThickness = 1;
this.map.series.add(gridSeries);
}
public addPolylineSeriesWith(data: any[]) {
const lineSeries = new IgxGeographicPolylineSeriesComponent ();
lineSeries.dataSource = data;
lineSeries.shapeMemberPath = "points";
lineSeries.shapeStroke = "rgba(196, 14, 14,0.05)";
lineSeries.shapeStrokeThickness = 4;
lineSeries.tooltipTemplate = this.polylineTooltipTemplate;
this.map.series.add(lineSeries);
}
public addSymbolSeriesWith(data: any[]) {
const symbolSeries = new IgxGeographicSymbolSeriesComponent ();
symbolSeries.dataSource = data;
symbolSeries.markerType = MarkerType.Circle;
symbolSeries.latitudeMemberPath = "lat";
symbolSeries.longitudeMemberPath = "lon";
symbolSeries.markerBrush = "#aad3df";
symbolSeries.markerOutline = "rgb(73, 73, 73)";
symbolSeries.thickness = 1;
symbolSeries.tooltipTemplate = this.pointTooltipTemplate;
this.map.series.add(symbolSeries);
}
}