gpt4 book ai didi

angular - 将 OpenLayers 4 与 Angular 5 结合使用

转载 作者:太空狗 更新时间:2023-10-29 17:00:28 26 4
gpt4 key购买 nike

我正在尝试在 Angular 5 中使用 OpenLayers 4。

基本上我只想实现 QuickStart来自官方 OpenLayers 网站的示例。

到目前为止我做了什么:

  1. npm install ol --save 下载ol包
  2. angular-cli.json将这些行添加到 angular-cli.json。看到这必须在 Stackoverflow 上的另一个示例上完成。 ol.css 文件存在。 ol.js 文件没有。所以我不知道这是对还是错的方法,但显然行不通。

我的 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,
})
});
}
}

谁能告诉我如何让它正常工作?

最佳答案

更新到 Angular 8.x 和 OpenLayers 6.x:

安装 ol 并进行以下更改:

1.) 在 html.index 中添加相应的 CSS(确保 CSS 的版本与安装的 ol 版本匹配):

<link rel="stylesheet" href="https://openlayers.org/en/v6.1.1/css/ol.css" type="text/css">

另一种方法是在 angular.json 中的 styles 对象中引用 CSS:

"styles": [
"./node_modules/ol/ol.css",
"src/styles.scss"
],

2.) 在 app.component.ts 中创建 map :

import { AfterViewInit, Component } from '@angular/core';
import { defaults as defaultControls } from 'ol/control';

import Map from 'ol/Map';
import View from 'ol/View';
import TileLayer from 'ol/layer/Tile';
import XYZ from 'ol/source/XYZ';
import ZoomToExtent from 'ol/control/ZoomToExtent';

@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})

export class AppComponent implements AfterViewInit {

map: Map;

ngAfterViewInit() {
this.map = new Map({
target: 'map',
layers: [
new TileLayer({
source: new XYZ({
url: 'https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png'
})
})
],
view: new View({
center: [813079.7791264898, 5929220.284081122],
zoom: 7
}),
controls: defaultControls().extend([
new ZoomToExtent({
extent: [
813079.7791264898, 5929220.284081122,
848966.9639063801, 5936863.986909639
]
})
])
});
}
}

3.) app.component.css 中的一些样式:

.map {
width: 100%;
height: 100vh;
}

4.) 最后是 app.component.html 中的标记:

<div id="map" class="map"></div>

也可以看看我的 GitHub repo .

编辑:

Bhalchandra Bhosale 所述在 ngAfterViewInit 中设置 map 的目标可能会更好:

export class MapComponent implements OnInit, AfterViewInit {

...

ngAfterViewInit() {
this.map.setTarget('map');
}
}

ol 5.2 版的旧答案:

ol是 OpenLayers 的正确包。但是,您不需要在 angular-cli.json 中添加任何内容。

随着最近的更新 ("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.htmlheader 标签中添加 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>

如果此解决方案适合您,请告诉我。

关于angular - 将 OpenLayers 4 与 Angular 5 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48283679/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com