Angular Binding Shape Files with Geo-spatial Data
The Ignite UI for Angular map component, the IgxShapeDataSource class loads geo-spatial data (points/locations, polylines, polygons) from shape files and converts it to a collection of IgxShapefileRecord objects.
Angular Binding Shape Files with Geo-spatial Data Example
The following table explains properties of the IgxShapeDataSource class for loading shape files.
| Propriedade | Tipo | Descrição |
|---|---|---|
shapefileSource |
corda | Especifica o Uri para um arquivo de forma (.shp) que contém itens de dados geoespaciais. |
databaseSource |
corda | Especifica o Uri para um arquivo de banco de dados de forma (.dbf) que contém uma tabela de dados para itens de dados geoespaciais. |
When both source properties are set to non-null values, then the IgxShapeDataSource object’s ImportAsync method is invoked which in return performs fetching and reading the shape files and finally doing the conversion. After this operation is complete, the IgxShapeDataSource is populated with IgxShapefileRecord objects and the ImportCompleted event is raised in order to notify about completed process of loading and converting geo-spatial data from shape files.
Loading Shapefiles
The following code creates an instance of the IgxShapeDataSource object for loading a shape file that contains locations of major cities in the world. It also demonstrates how to handle the ImportCompleted event as a prerequisite for binding data to the map component.
Binding Shapefiles
In the map component, Geographic Series are used for displaying geo-spatial data that is loaded from shape files. All types of Geographic Series have an ItemsSource property which can be bound to an array of objects. The IgxShapeDataSource is an example such array because it contains a list of IgxShapefileRecord objects.
The IgxShapefileRecord class provides properties for storing geo-spatial data, listed in the following table.
| Propriedade | Descrição |
|---|---|
Points |
Contém todos os pontos em uma forma geoespacial carregada de um arquivo de forma (.shp). Por exemplo, o país do Japão no arquivo de forma seria representado como uma lista de uma lista de objetos de pontos, onde:
|
Fields |
Contém uma linha de dados do arquivo de banco de dados de formas (.dbf) indexada pelo nome de uma coluna. Por exemplo, um dado sobre o condado do Japão que inclui população, área, nome de uma capital, etc. |
Essa estrutura de dados é adequada para uso na maioria das Séries Geográficas, desde que as colunas de dados apropriadas sejam mapeadas para elas.
Code Snippet
This code example assumes that shape files were loaded using the IgxShapeDataSource.
The following code binds IgxGeographicPolylineSeriesComponent in the map component to the IgxShapeDataSource and maps the Points property of all IgxShapefileRecord objects.
<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" #template>
<div>
<span>
Airline: {{item.name}}
</span>
<br />
<span>
Length: {{item.distance}} miles
</span>
</div>
</ng-template>
import { AfterViewInit, Component, TemplateRef, ViewChild } from "@angular/core";
import { IgxShapeDataSource } from 'igniteui-angular-core';
import { IgxGeographicMapComponent } from 'igniteui-angular-maps';
import { IgxGeographicPolylineSeriesComponent } from 'igniteui-angular-maps';
@Component({
selector: "app-map-binding-shape-files",
styleUrls: ["./map-binding-shape-files.component.scss"],
templateUrl: "./map-binding-shape-files.component.html"
})
export class MapBindingShapefilePolylinesComponent implements AfterViewInit {
@ViewChild ("map")
public map: IgxGeographicMapComponent;
@ViewChild("template")
public tooltipTemplate: TemplateRef<object>;
constructor() { }
public ngAfterViewInit() {
// loading a shapefile with geographic polygons
const sds = new IgxShapeDataSource();
sds.importCompleted.subscribe(() => this.onDataLoaded(sds, ""));
sds.shapefileSource = "assets/Shapes/WorldCableRoutes.shp";
sds.databaseSource = "assets/Shapes/WorldCableRoutes.dbf";
sds.dataBind();
}
public onDataLoaded(sds: IgxShapeDataSource, e: any) {
const shapeRecords = sds.getPointData();
const geoPolylines: any[] = [];
// parsing shapefile data and creating geo-polygons
for (const record of shapeRecords) {
// using field/column names from .DBF file
const route = {
capacity: record.fieldValues["CapacityG"],
distance: record.fieldValues["DistanceKM"],
isActive: record.fieldValues["NotLive"] !== 0,
isOverLand: record.fieldValues["OverLand"] === 0,
name: record.fieldValues["Name"],
points: record.points,
service: record.fieldValues["InService"]
};
geoPolylines.push(route);
}
const geoSeries = new IgxGeographicPolylineSeriesComponent();
geoSeries.dataSource = geoPolylines;
geoSeries.shapeMemberPath = "points";
geoSeries.shapeFilterResolution = 0.0;
geoSeries.shapeStrokeThickness = 3;
geoSeries.shapeStroke = "rgb(82, 82, 82, 0.4)";
geoSeries.tooltipTemplate = this.tooltipTemplate;
this.map.series.add(geoSeries);
}
}
API References
FieldsIgxGeographicPolylineSeriesComponentImportCompletedItemsSourcePointsIgxShapeDataSource