Angular JSON ファイルを地理的な場所にバインド

    Ignite UI for Angular Map マップは、さまざまな種類のファイルからロードされた地理データをプロットできます。たとえば、JavaScript Object Notation (JSON) ファイルから地理的位置をロードできます。

    Angular JSON ファイルを地理的な場所にバインドの例

    データ例

    JSON ファイルからのデータの例:

    [
       { "name": "Sydney Island", "lat": -16.68972, "lon": 139.45917 },
       { "name": "Sydney Creek",  "lat": -16.3,     "lon": 128.95 },
       { "name": "Mount Sydney",  "lat": -21.39864, "lon": 121.193 },
     // ...
    ]
    

    コード スニペット

    以下のコードは、マップコンポーネント内の IgxGeographicHighDensityScatterSeriesComponent を、ロードされた JSON ファイルから作成された地理的位置を含むオブジェクトの配列にバインドします。

    <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>{{item.city}}</span>
            </div>
    </ng-template>
    
    import { AfterViewInit, Component, TemplateRef, ViewChild } from "@angular/core";
    import { MarkerType } from 'igniteui-angular-charts';
    import { IgxGeographicMapComponent } from 'igniteui-angular-maps';
    import { IgxGeographicSymbolSeriesComponent } from 'igniteui-angular-maps';
    
    @Component({
      selector: "app-map-binding-geographic-json-files",
      styleUrls: ["./map-binding-geographic-json-files.component.scss"],
      templateUrl: "./map-binding-geographic-json-files.component.html"
    })
    
    export class MapBindingDataJsonPointsComponent implements AfterViewInit {
    
        @ViewChild ("map")
        public map: IgxGeographicMapComponent;
        @ViewChild("template")
        public tooltip: TemplateRef<object>;
        constructor() {
        }
    
        public ngAfterViewInit(): void {
            this.componentDidMount();
        }
    
        public componentDidMount() {
            // fetching JSON data with geographic locations from public folder
            fetch("assets/Data/WorldCities.json")
                .then((response) => response.json())
                .then((data) => this.onDataLoaded(data));
        }
    
        public onDataLoaded(jsonData: any[]) {
            const geoLocations: any[] = [];
            // parsing JSON data and using only cities that are capitals
            for (const jsonItem of jsonData) {
                if (jsonItem.cap) {
                    const location = {
                        city: jsonItem.name,
                        country: jsonItem.country,
                        latitude: jsonItem.lat,
                        longitude: jsonItem.lon,
                        population: jsonItem.pop
                    };
                    geoLocations.push(location);
                }
            }
    
            // creating symbol series with loaded data
            const geoSeries = new IgxGeographicSymbolSeriesComponent();
            geoSeries.dataSource = geoLocations;
            geoSeries.markerType = MarkerType.Circle;
            geoSeries.latitudeMemberPath  = "latitude";
            geoSeries.longitudeMemberPath = "longitude";
            geoSeries.markerBrush = "LightGray";
            geoSeries.markerOutline = "Black";
            geoSeries.tooltipTemplate = this.tooltip;
    
            // adding symbol series to the geographic amp
            this.map.series.add(geoSeries);
        }
    }
    

    API リファレンス