Angular 5.でOpenLayers 4を使用しようとしています。
基本的に、公式のOpenLayersサイトから QuickStart の例を実装したいだけです。
これまでにやったこと:
npm install ol --save
olパッケージをダウンロードするにはMy angularプロジェクトは3つのコンポーネントで構成されています。
-app
--console
--map
--sidebar
app.component.css
app.compinent.html
app.component.spec.ts
app.component.ts
app.module.ts
map.component.html
import { Component, OnInit } from '@angular/core';
import * as ol from '../../../node_modules/ol';
@Component({
selector: 'app-map',
templateUrl: './map.component.html',
styleUrls: ['./map.component.css']
})
export class MapComponent implements OnInit {
mapId: string;
map: ol.Map = undefined;
constructor() { }
ngOnInit() {
this.map = new ol.Map({
target: this.mapId,
layers: [
new ol.layer.Tile({
source: new ol.source.OSM(),
}),
],
view: new ol.View({
center: ol.proj.fromLonLat([6.661594, 50.433237]),
zoom: 3,
})
});
}
}
誰もこれを正しく機能させる方法を教えてもらえますか?
ol
は、OpenLayersに適したパッケージです。ただし、angular-cli.jsonに何も追加する必要はありません。
編集:
Bhalchandra Bhosale で述べたように、マップのターゲットをngAfterViewInit
内に設定するのがさらに良いかもしれません:
export class MapComponent implements OnInit, AfterViewInit {
...
ngAfterViewInit() {
this.map.setTarget('map');
}
}
バージョン5.2のol
:の編集
最近の更新("ol": "^5.2.0"
)OpenLayersのクラスと関数のインポート方法が少し変更されました。
map.component.ts:
import { Component, OnInit } from '@angular/core';
import OlMap from 'ol/Map';
import OlXYZ from 'ol/source/XYZ';
import OlTileLayer from 'ol/layer/Tile';
import OlView from 'ol/View';
import { fromLonLat } from 'ol/proj';
@Component({
selector: 'app-map',
templateUrl: './map.component.html',
styleUrls: ['./map.component.css']
})
export class MapComponent implements OnInit {
map: OlMap;
source: OlXYZ;
layer: OlTileLayer;
view: OlView;
ngOnInit() {
this.source = new OlXYZ({
url: 'http://tile.osm.org/{z}/{x}/{y}.png'
});
this.layer = new OlTileLayer({
source: this.source
});
this.view = new OlView({
center: fromLonLat([6.661594, 50.433237]),
zoom: 3
});
this.map = new OlMap({
target: 'map',
layers: [this.layer],
view: this.view
});
}
}
map.component.html:
<div id="map" class="map"></div>
map.component.css:
.map {
width: 100%;
height: 100vh;
}
index.htmlのheader
- tag内にOpenLayersのCSSを追加します。
<link rel="stylesheet" href="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v5.1.3/css/ol.css" type="text/css">
<style>html, body { margin: 0; }</style>
古い答え:
コンポーネントは次のようになります。
import {Component, OnInit} from '@angular/core';
import OlMap from 'ol/map';
import OlXYZ from 'ol/source/xyz';
import OlTileLayer from 'ol/layer/tile';
import OlView from 'ol/view';
import OlProj from 'ol/proj';
@Component({
selector: 'app-map',
templateUrl: './map.component.html',
styleUrls: ['./map.component.css']
})
export class MapComponent implements OnInit {
map: OlMap;
source: OlXYZ;
layer: OlTileLayer;
view: OlView;
constructor() {
}
ngOnInit() {
this.source = new OlXYZ({
url: 'http://tile.osm.org/{z}/{x}/{y}.png'
});
this.layer = new OlTileLayer({
source: this.source
});
this.view = new OlView({
center: OlProj.fromLonLat([6.661594, 50.433237]),
zoom: 3
});
this.map = new OlMap({
target: 'map',
layers: [this.layer],
view: this.view
});
}
}
CSS:
.map {
width: 100%;
height: 100vh;
}
HTML:
<div id="map" class="map"></div>
このソリューションがあなたのために働くかどうか私に知らせてください。
Angular5とOpenLayers4でゼロから始めたくない場合は、 IGO2-lib と呼ばれる成熟したプロジェクトがあります。これは_Angular 5.x
_、NodeJS
、_OpenLayers 4.x
_および_Material Design
_。 IGO2 も完全なフレームワークです。
git clone https://github.com/infra-geo-ouverte/igo2-lib.git
_npm install
_npm start
_IGO2 のライブデモです: https://geoegl.msp.gouv.qc.ca/igo2/apercu-qc/
このコードをngOnInit()の代わりにngAfterViewInit()に使用します