限制在 agm-map 中的特定国家
Restrict to a specific country in agm-map
下面是我的代码,我可以用它在地图上绘制点。但我希望我的地图仅限于一个国家。如何在 agm-map 中实现?
例如,我希望它仅限于西澳大利亚。
maps.html
<agm-map
[latitude]="lat"
[longitude]="lng"
[zoom]="zoom"
[disableDefaultUI]="false"
[zoomControl]="false"
(mapClick)="mapClicked($event)">
<agm-marker
*ngFor="let m of markers; let i = index"
(markerClick)="clickedMarker(m.label, i)"
[latitude]="m.lat"
[longitude]="m.lng"
[label]="m.label"
[markerDraggable]="m.draggable"
(dragEnd)="markerDragEnd(m, $event)">
<agm-info-window>
<strong>InfoWindow content</strong>
</agm-info-window>
</agm-marker>
<agm-circle [latitude]="lat + 0.3" [longitude]="lng"
[radius]="5000"
[fillColor]="'red'"
[circleDraggable]="true"
[editable]="true">
</agm-circle>
</agm-map>
maps.ts
import { Component } from '@angular/core';
import { MouseEvent } from '@agm/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
// google maps zoom level
zoom: number = 8;
// initial center position for the map
lat: number = 51.673858;
lng: number = 7.815982;
clickedMarker(label: string, index: number) {
console.log(`clicked the marker: ${label || index}`)
}
mapClicked($event: MouseEvent) {
this.markers.push({
lat: $event.coords.lat,
lng: $event.coords.lng,
draggable: true
});
}
markerDragEnd(m: marker, $event: MouseEvent) {
console.log('dragEnd', m, $event);
}
markers: marker[] = [
{
lat: 51.673858,
lng: 7.815982,
label: 'A',
draggable: true
},
{
lat: 51.373858,
lng: 7.215982,
label: 'B',
draggable: false
},
{
lat: 51.723858,
lng: 7.895982,
label: 'C',
draggable: true
}
]
}
// just an interface for type safety.
interface marker {
lat: number;
lng: number;
label?: string;
draggable: boolean;
}
export class MapComponent {
title = 'angular-maps';
@ViewChild('placesRef') placesRef: GooglePlaceDirective;
options = {
types: [],
componentRestrictions: {country: 'CO'}
};
}
为了在 AGM 地图上只显示一个国家或一个地区,您必须应用视口限制。官方文档提供了以下页面来解释这些东西:
https://developers.google.com/maps/documentation/javascript/examples/control-bounds-restriction
AGM地图支持限制属性,所以你只需要在你的组件class中添加限制,并在你的html模板中添加restriction
属性。
例如要将地图限制为瑞士,我执行以下操作(注意 countryRestriction 字段)
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
// google maps zoom level
zoom: number = 5;
// initial center position for the map
lat: number = 46.7985624;
lng: number = 8.2319736;
//view port restrictions
countryRestriction = {
latLngBounds: {
east: 10.49234,
north: 47.808455,
south: 45.81792,
west: 5.95608
},
strictBounds: true
};
clickedMarker(label: string, index: number) {
console.log(`clicked the marker: ${label || index}`)
}
mapClicked($event: MouseEvent) {
this.markers.push({
lat: $event.coords.lat,
lng: $event.coords.lng,
draggable: true
});
}
markerDragEnd(m: marker, $event: MouseEvent) {
console.log('dragEnd', m, $event);
}
markers: marker[] = [
{
lat: 47.4052961,
lng: 8.6011908,
label: 'A',
draggable: true
},
{
lat: 46.9728419,
lng: 7.4304635,
label: 'B',
draggable: false
},
{
lat: 46.2585634,
lng: 6.2226607,
label: 'C',
draggable: true
}
]
}
并在 html
中添加我的限制
<agm-map
[latitude]="lat"
[longitude]="lng"
[zoom]="zoom"
[restriction]="countryRestriction"
[disableDefaultUI]="false"
[zoomControl]="false"
(mapClick)="mapClicked($event)">
<agm-marker
*ngFor="let m of markers; let i = index"
(markerClick)="clickedMarker(m.label, i)"
[latitude]="m.lat"
[longitude]="m.lng"
[label]="m.label"
[markerDraggable]="m.draggable"
(dragEnd)="markerDragEnd(m, $event)">
<agm-info-window>
<strong>InfoWindow content</strong>
</agm-info-window>
</agm-marker>
</agm-map>
您可以在 stackblitz 上看到仅限瑞士的 AGM 地图的完整示例:
下面是我的代码,我可以用它在地图上绘制点。但我希望我的地图仅限于一个国家。如何在 agm-map 中实现?
例如,我希望它仅限于西澳大利亚。
maps.html
<agm-map
[latitude]="lat"
[longitude]="lng"
[zoom]="zoom"
[disableDefaultUI]="false"
[zoomControl]="false"
(mapClick)="mapClicked($event)">
<agm-marker
*ngFor="let m of markers; let i = index"
(markerClick)="clickedMarker(m.label, i)"
[latitude]="m.lat"
[longitude]="m.lng"
[label]="m.label"
[markerDraggable]="m.draggable"
(dragEnd)="markerDragEnd(m, $event)">
<agm-info-window>
<strong>InfoWindow content</strong>
</agm-info-window>
</agm-marker>
<agm-circle [latitude]="lat + 0.3" [longitude]="lng"
[radius]="5000"
[fillColor]="'red'"
[circleDraggable]="true"
[editable]="true">
</agm-circle>
</agm-map>
maps.ts
import { Component } from '@angular/core';
import { MouseEvent } from '@agm/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
// google maps zoom level
zoom: number = 8;
// initial center position for the map
lat: number = 51.673858;
lng: number = 7.815982;
clickedMarker(label: string, index: number) {
console.log(`clicked the marker: ${label || index}`)
}
mapClicked($event: MouseEvent) {
this.markers.push({
lat: $event.coords.lat,
lng: $event.coords.lng,
draggable: true
});
}
markerDragEnd(m: marker, $event: MouseEvent) {
console.log('dragEnd', m, $event);
}
markers: marker[] = [
{
lat: 51.673858,
lng: 7.815982,
label: 'A',
draggable: true
},
{
lat: 51.373858,
lng: 7.215982,
label: 'B',
draggable: false
},
{
lat: 51.723858,
lng: 7.895982,
label: 'C',
draggable: true
}
]
}
// just an interface for type safety.
interface marker {
lat: number;
lng: number;
label?: string;
draggable: boolean;
}
export class MapComponent {
title = 'angular-maps';
@ViewChild('placesRef') placesRef: GooglePlaceDirective;
options = {
types: [],
componentRestrictions: {country: 'CO'}
};
}
为了在 AGM 地图上只显示一个国家或一个地区,您必须应用视口限制。官方文档提供了以下页面来解释这些东西:
https://developers.google.com/maps/documentation/javascript/examples/control-bounds-restriction
AGM地图支持限制属性,所以你只需要在你的组件class中添加限制,并在你的html模板中添加restriction
属性。
例如要将地图限制为瑞士,我执行以下操作(注意 countryRestriction 字段)
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
// google maps zoom level
zoom: number = 5;
// initial center position for the map
lat: number = 46.7985624;
lng: number = 8.2319736;
//view port restrictions
countryRestriction = {
latLngBounds: {
east: 10.49234,
north: 47.808455,
south: 45.81792,
west: 5.95608
},
strictBounds: true
};
clickedMarker(label: string, index: number) {
console.log(`clicked the marker: ${label || index}`)
}
mapClicked($event: MouseEvent) {
this.markers.push({
lat: $event.coords.lat,
lng: $event.coords.lng,
draggable: true
});
}
markerDragEnd(m: marker, $event: MouseEvent) {
console.log('dragEnd', m, $event);
}
markers: marker[] = [
{
lat: 47.4052961,
lng: 8.6011908,
label: 'A',
draggable: true
},
{
lat: 46.9728419,
lng: 7.4304635,
label: 'B',
draggable: false
},
{
lat: 46.2585634,
lng: 6.2226607,
label: 'C',
draggable: true
}
]
}
并在 html
中添加我的限制<agm-map
[latitude]="lat"
[longitude]="lng"
[zoom]="zoom"
[restriction]="countryRestriction"
[disableDefaultUI]="false"
[zoomControl]="false"
(mapClick)="mapClicked($event)">
<agm-marker
*ngFor="let m of markers; let i = index"
(markerClick)="clickedMarker(m.label, i)"
[latitude]="m.lat"
[longitude]="m.lng"
[label]="m.label"
[markerDraggable]="m.draggable"
(dragEnd)="markerDragEnd(m, $event)">
<agm-info-window>
<strong>InfoWindow content</strong>
</agm-info-window>
</agm-marker>
</agm-map>
您可以在 stackblitz 上看到仅限瑞士的 AGM 地图的完整示例: