如何以角度方式在页面上创建多个传单地图

问题描述 投票:0回答:2

我已经创建了下面给出的传单开放街道地图。

.component.ts

 map = L.map('map').setView([12.876, 80.599], 12);  

    L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
      attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
    }).addTo(map);

我已将地图放置在 html 页面中,如下所示

.component.html

<div class ="row">
<div class="col-xs-12 col-sm-8 col-lg-7">
    <div id="map"></div>
  </div>
</div>

并提到CSS中的高度为

.component.css

#map{
  height: 650px;
  border: 1px solid gray;
   position: relative;
  border: none;
}

现在我想在页面中创建两个地图,我已经尝试过但无法创建地图,因为我使用了名称地图的id。

那么如何将 id 值(地图)更改为类,而不是我将使用该类在 页

angular leaflet openstreetmap react-leaflet angular-leaflet-directive
2个回答
1
投票

我可能会使用相同的 L.map 实例,并对其进行必要的更改。 另一种方法是创建另一个具有不同 ID 的 DOM 并使用 [hide] 显示第一个或第二个地图。


0
投票

为了渲染多个地图,您需要确保包含地图的 DIV 具有唯一的 ID。

例如。假设您创建了一个名为 leafmap 的组件。 (ng g c 叶图)

leafmap.component.html 中的 DIV 如下所示:

<div class="map" [attr.id]="mapID"></div>

在你的 leafmap.component.scss 中你会有这样的东西:

.map {
  height: 500px;
}

在你的 leafmap.component.ts 中你会有这样的东西:

import {Component, Input} from '@angular/core';
import * as L from 'leaflet';

@Component({
  selector: 'app-leafmap',
  templateUrl: './leafmap.component.html',
  styleUrls: ['./leafmap.component.scss']
})
export class LeafmapComponent {
  map: L.Map | undefined;

  //Get the lng/lat values from the component instance
  //<app-leafmap [longitude]="longitude" [latitude]="latitude"></app-leafmap>
  @Input() longitude: number = -98.5795; //I defaulted the map to the center of the US.
  @Input() latitude: number = 39.8282;

  //Initialize the map ID
  mapID: string = 'map'; //I defaulted to 'map' but this will be overwritten in ngOnInit()

  //Initialize the map
  initMap(): void {
    //Create and center the map. Set the zoom level
    this.map = L.map(this.mapID, {
      center: [ this.latitude, this.longitude ],
      zoom: 13
    });

    //Add a marker to the map
    L.marker([this.latitude,this.longitude]).addTo(this.map);

    //Add map tiles
    const tiles = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
      maxZoom: 18,
      minZoom: 8,
      attribution: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
    });

    tiles.addTo(this.map);
  }

  constructor() { }

  ngOnInit(){
    //Get a unique mapID for the DIV where the map will be rendered
    this.mapID = this.uidv4();
  }

  //Get a UUID for the mapID
  uidv4(): string {
    return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, c =>
      (+c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> +c / 4).toString(16)
    );
  }

  //The div needs to exist before the map can be created.
  ngAfterViewInit(): void {
    //Render the map
    this.initMap();
  }
}

在你的父组件中你会有这样的东西:

<app-leafmap [longitude]="data.longitude" [latitude]="data.latitude"></app-leafmap>

现在您有了一个具有唯一 ID 的对象,并且正在为其分配一张地图。您可以迭代元素并动态生成多个映射。

© www.soinside.com 2019 - 2024. All rights reserved.