Web Components シェープ ファイルを地理的データにバインディング
Ignite UI for Web Components Map コンポーネントの IgcShapeDataSource
クラスは、形状ファイルから地理空間データ (ポイント/位置、ポリライン、ポリゴン) を読み込み、それを IgcShapefileRecord
オブジェクトのコレクションに変換します。
Web Components シェープ ファイルを地理的データにバインディングの例
import { html } from 'lit-html' ;
import { IgcGeographicMapModule } from 'igniteui-webcomponents-maps' ;
import { IgcGeographicMapComponent } from 'igniteui-webcomponents-maps' ;
import { IgcDataChartInteractivityModule } from 'igniteui-webcomponents-charts' ;
import { IgcShapeDataSource } from 'igniteui-webcomponents-core' ;
import { IgcGeographicPolylineSeriesComponent } from 'igniteui-webcomponents-maps' ;
import { DataContext } from 'igniteui-webcomponents-core' ;
import { ModuleManager } from 'igniteui-webcomponents-core' ;
ModuleManager.register(
IgcDataChartInteractivityModule,
IgcGeographicMapModule
);
export class MapBindingShapefilePolylines {
private geoMap: IgcGeographicMapComponent;
constructor ( ) {
this .onDataLoaded = this .onDataLoaded.bind(this );
this .geoMap = document .getElementById('geoMap' ) as IgcGeographicMapComponent;
this .geoMap.updateZoomWindow({ left : 0.2 , top : 0.1 , width : 0.6 , height : 0.6 });
const url = 'https://static.infragistics.com/xplatform' ;
const sds = new IgcShapeDataSource();
sds.importCompleted = this .onDataLoaded;
sds.shapefileSource = url + '/shapes/WorldCableRoutes.shp' ;
sds.databaseSource = url + '/shapes/WorldCableRoutes.dbf' ;
sds.dataBind();
}
public onDataLoaded (sds: IgcShapeDataSource, e: any ) {
const shapeRecords = sds.getPointData();
console .log('loaded WorldCities.shp ' + shapeRecords.length);
const geoPolylines: any [] = [];
for (const record of shapeRecords) {
const route = {
points : record.points,
name : record.fieldValues.Name,
capacity : record.fieldValues.CapacityG,
distance : record.fieldValues.DistanceKM
};
geoPolylines.push(route);
}
const geoSeries = new IgcGeographicPolylineSeriesComponent();
geoSeries.name = 'series' ;
geoSeries.dataSource = geoPolylines;
geoSeries.shapeMemberPath = 'points' ;
geoSeries.shapeFilterResolution = 0.0 ;
geoSeries.shapeStrokeThickness = 3 ;
geoSeries.shapeStroke = 'rgb(82, 82, 82, 0.4)' ;
geoSeries.tooltipTemplate = this .createTooltip;
this .geoMap.series.add(geoSeries);
}
public createTooltip(context: any ): any {
const dataContext = context.dataContext as DataContext;
if (!dataContext) return null ;
const series = dataContext.series as any ;
if (!series) return null ;
const dataItem = dataContext.item as any ;
if (!dataItem) return null ;
const capacity = dataItem.capacity + ' GB/s' ;
const distance = dataItem.distance + ' KM' ;
return html`<div >
<div class ='tooltipBox' >
<div class ='tooltipRow' >
<div class ='tooltipLbl' > Name</div >
<div class ='tooltipVal' > ${dataItem.name} </div >
</div >
<div class ='tooltipRow' >
<div class ='tooltipLbl' > Distance</div >
<div class ='tooltipVal' > ${distance} </div >
</div >
<div class ='tooltipRow' >
<div class ='tooltipLbl' > Capacity</div >
<div class ='tooltipVal' > ${capacity} </div >
</div >
<div class ='tooltipRow' >
<div class ='tooltipLbl' > Service</div >
<div class ='tooltipVal' > ${dataItem.service} </div >
</div >
</div > ` ;
}
}
new MapBindingShapefilePolylines();
ts コピー <!DOCTYPE html >
<html >
<head >
<title > MapBindingShapefilePolylines</title >
<meta charset ="UTF-8" />
<link rel ="shortcut icon" href ="https://static.infragistics.com/xplatform/images/browsers/wc.png" >
<link rel ="stylesheet" href ="https://fonts.googleapis.com/icon?family=Material+Icons" />
<link rel ="stylesheet" href ="https://fonts.googleapis.com/css?family=Kanit&display=swap" />
<link rel ="stylesheet" href ="https://fonts.googleapis.com/css?family=Titillium Web" />
<link rel ="stylesheet" href ="https://static.infragistics.com/xplatform/css/samples/shared.v8.css" type ="text/css" />
</head >
<body >
<div id ="root" >
<div class ="container sample" >
<igc-geographic-map id ="geoMap" width ="100%" height ="100%" >
</igc-geographic-map >
</div >
</div >
<% if (false) { %><script src ="src/index.ts" > </script > <% } %>
</body >
</html >
html コピー
このサンプルが気に入りましたか? 完全な Ignite UI for Web Componentsツールキットにアクセスして、すばやく独自のアプリの作成を開始します。無料でダウンロードできます。
以下の表は、シェイプ ファイルを読み込むための IgcShapeDataSource
クラスのプロパティを説明します。
プロパティ
型
概要
shapefileSource
string
シェイプ ファイル(.shp) から読み込まれた 1 つの地理空間シェープにすべてのポイントが含まれます。
databaseSource
string
たとえば、シェープファイルで日本は、以下でポイント オブジェクト リストのリストとして表されます。
両方のソース プロパティが null 以外の値に設定されると、IgcShapeDataSource
オブジェクトの ImportAsync メソッドが起動し、シェイプ ファイルを取得して読み込み、最終的に変換を実行します。この操作が完了すると、IgcShapeDataSource
は IgcShapefileRecord
オブジェクトで生成され、シェイプ ファイルから地理空間データを読み込んで変換するプロセスが完了したことを通知するために、ImportCompleted
イベントが起動されます。
シェープファイルの読み込み
以下のコードは、世界の主要都市の場所を含むシェイプ ファイルを読み込むための IgcShapeDataSource
オブジェクトのインスタンスを作成します。また、xamGeographicMap コントロールにデータをバインドするための前提条件として ImportCompleted
イベントを処理する方法も示します。
シェープファイルをバインド
Map コンポーネントでは、Geographic Series は、シェイプ ファイルから読み込まれる地理的データを表示するために使用されます。すべてのタイプの地理的シリーズには、オブジェクトの配列にバインドできる ItemsSource
プロパティがあります。IgcShapeDataSource
は IgcShapefileRecord
オブジェクトのリストを含むため、このような配列の例です。
IgcShapefileRecord
クラスは、以下の表にリストする地理的データを保存するためのプロパティを提供します。
プロパティ
概要
Points
シェイプ ファイル(.shp) から読み込まれた 1 つの地理空間シェープにすべてのポイントが含まれます。たとえば、シェープファイルで日本は、以下でポイント オブジェクト リストのリストとして表されます。ポイントの最初のリストは北海道のシェイプを表します。 ポイントの 2 番目のリストは本州のシェイプを表します。 ポイントの 3 番目のリストは九州のシェイプを表します。 ポイントの 4 番目のリストは四国のシェイプを表します。
|
| `Fields` |列名でキーが付けられたシェイプ データベース ファイル (.dbf) からのデータ行を含みます。たとえば、日本についてのデータには、人口、地域、首都名などが含まれます。|
このデータ構造は、適切なデータ列がマップされている限り、ほとんどの地理的シリーズでの使用に適しています。
コード スニペット
このコード例は、シェープ ファイルが IgcShapeDataSource
を使用して読み込まれたことを前提としています。
以下のコードは、マップ コンポーネント内の IgcGeographicPolylineSeriesComponent
を IgcShapeDataSource
にバインドし、すべての IgcShapefileRecord
オブジェクトの Points
プロパティをマップします。
<igc-geographic-map id ="geoMap" width ="100%" height ="100%" >
</igc-geographic-map >
html
connectedCallback ( ) {
this .geoMap = document .getElementById("geoMap" ) as IgcGeographicMapComponent;
const sds = new IgcShapeDataSource();
sds.importCompleted = this .onDataLoaded;
sds.shapefileSource = "../shapes/WorldCities.shp" ;
sds.databaseSource = "../shapes/WorldCities.dbf" ;
sds.dataBind();
}
onDataLoaded (sds: IgcShapeDataSource, e: any ) {
const shapeRecords = sds.getPointData();
console .log("loaded WorldCities.shp " + shapeRecords.length);
const geoLocations: any [] = [];
for (const record of shapeRecords) {
const pop = record.fieldValues.POPULATION;
if (pop > 0 ) {
const location = {
latitude : record.points[0 ][0 ].y,
longitude : record.points[0 ][0 ].x,
city : record.fieldValues.NAME,
population : pop
};
geoLocations.push(location);
}
}
const geoSeries = new IgcGeographicSymbolSeriesComponent();
geoSeries.dataSource = geoLocations;
geoSeries.markerType = MarkerType.Circle;
geoSeries.latitudeMemberPath = "latitude" ;
geoSeries.longitudeMemberPath = "longitude" ;
geoSeries.markerBrush = "LightGray" ;
geoSeries.markerOutline = "Black" ;
geoSeries.tooltipTemplate = this .createTooltip;
this .geoMap.series.add(geoSeries);
}
ts
API リファレンス