angular - Angular 9 MapboxGeocoder 添加标记不起作用
问题描述
我用 angular 9 和 mapbox gl 创建了一个项目。我的地理编码器有问题,当我搜索地点时一切正常,但我尝试在地理编码器结果之后设置一个点,如下所示:https ://docs.mapbox.com/mapbox-gl-js/example/point-from- geocoder-result/ 我也这样做,但没有出现标记。
这是我初始化地图并添加地理编码器的代码:
import {Component, OnInit} from '@angular/core';
import {FormBuilder, FormGroup} from '@angular/forms';
import {UserService} from '../../../user/service/user.service';
import * as MapboxGeocoder from '@mapbox/mapbox-gl-geocoder';
import * as mapboxgl from 'mapbox-gl/dist/mapbox-gl';
import {environment} from '../../../../../environments/environment';
@Component({
selector: 'app-add-sport-ad',
templateUrl: './add-sport-ad.component.html',
styleUrls: ['./add-sport-ad.component.scss']
})
export class AddSportAdComponent implements OnInit {
form: FormGroup;
map: mapboxgl.Map;
style = 'mapbox://styles/mapbox/streets-v11';
lat = 37.75;
lng = -122.41;
constructor(private fb: FormBuilder, public userService: UserService) {
}
ngOnInit() {
this.initForm();
mapboxgl.accessToken = environment.mapbox.accessToken;
this.map = new mapboxgl.Map({
container: 'map',
style: this.style,
zoom: 13,
center: [this.lng, this.lat]
});
const geocoder = new MapboxGeocoder({
accessToken: mapboxgl.accessToken,
marker: {
color: 'orange'
},
mapboxgl
});
this.map.addControl(geocoder);
this.map.addControl(new mapboxgl.NavigationControl());
}
}
如果有人可以帮助我,非常感谢:)
解决方案
我有同样的问题,它没有自动添加标记,所以,为了解决这个问题,我手动添加了标记。
例如:
new Marker().setLngLat([lng, lat]).addTo(this.map);
但是您需要保存标记位置,因为当您进行另一次搜索时,您需要删除前一个标记。
我这样做了:
导入
import { Marker } from "mapbox-gl/dist/mapbox-gl.js";
创建一个变量来存储标记
private lasMarker: Marker;
然后如果有一个较旧的标记,我将其删除并放置新的(如果您不删除旧的,当您放置另一个标记时,此标记不会自动删除)
if (this.lastMarker) this.lastMarker.remove();
this.lastMarker = new Marker().setLngLat([lng, lat]).addTo(this.getMapBox());
推荐阅读
- android - 菜单模板在 Android Studio 中显示不正确
- sqlalchemy - SQLAlchemy 哈希函数
- linux - 告诉我们是否在 WSL 中运行 linux?
- php - 如何使用三元运算符检查资产存储是否为空
- cygwin - Cygwin - 找不到标题
- xcode - 无法分发 Mac Catalyst 扩展
- javascript - 如何在从父窗口调用的子窗口中设置输入文本值?
- json - 使用来自 rest.response 的值
- ruby-on-rails - rails ancestry 从根上获取所有最后的孩子
- node.js - 在用于身份验证系统的 Node JS 中同时使用 JWT 和 Sessions