Я не могу центрировать свою карту Google на маркере после геокодирования.
У меня есть два маркера: исходный маркер (тот, на котором отцентрировано, не изменяется), другой меняется в зависимости от геокодирования, и после геокодирования он будет центрироваться каждый раз.
Мой код: TS
zoom = 10;
addressData: FormGroup;
submitted = false;
success = false;
lat: number;
lng: number;
userLat: number;
userLng: number;
currentCenter = { lat: null, lng: null };
private geoCoder: google.maps.Geocoder;
@ViewChild('googleMap') googleMap: AgmMap;
constructor(private maps: MapsAPILoader, private bulider: FormBuilder) { }
ngOnInit() {
this.addressData = this.bulider.group({
address: ["", Validators.required],
});
this.maps.load().then(() => {
this.geoCoder = new google.maps.Geocoder();
});
}
getAddress() {
this.submitted = true;
if (this.addressData.invalid) {
return;
}
this.success = true;
this.googleMap.mapReady.subscribe(map => {
// Need to use two parameters in order to use Geocoder
this.geoCoder.geocode(this.addressData.controls['address'].value, (results, status) => {
if (status === google.maps.GeocoderStatus.OK) {
this.userLat = results[0].geometry.location.lat();
this.userLng = results[0].geometry.location.lng();
} else {
alert('Geocode was not successful for the following reason: ' + status);
}
}).then(place => {
this.currentCenter = { lat: place.geometry.location.lat(), lng: place.geometry.location.lng() };
}).catch(err => {
console.log("Error: " + err);
});
});
this.submitted = false;
}
HTML
<!-- Google maps, the starting latitude & longitude -->
<agm-map [latitude]="currentCenter.lat" [longitude]="currentCenter.lng" [zoom]="zoom" [mapTypeControl]='true'
#googleMap>
<!-- Static marker -->
<agm-marker [latitude]="defaultCenter.lat" [longitude]="defaultCenter.lng"></agm-marker>
<!-- User geolocation marker, changes -->
<agm-marker [latitude]="currentCenter.userLat" [longitude]="currentCenter.userLng"></agm-marker>
</agm-map>
Ожидаемое
После геокодирования карта должна центрироваться на маркере с данного адреса каждый раз.
Фактический :
Геокодер находит адрес, но не центрирует карту на размещенном маркере на основе адреса.
Обновление
Я не могу использовать код Вадима, потому что компилятор говорит мне, что мне нужно два аргумента для Geocode
, но код Вадима имеет только один. Я не могу использовать этот код. Также, если я добавлю второй аргумент, он скажет, что then
не существует.
this.googleMap.mapReady.subscribe(map => {
// This line needs two parameters not one
this.geoCoder.geocode(this.addressData.controls['address'].value).then(place => {
this.currentCenter = { lat: place.geometry.location.lat(), lng: place.geometry.location.lng() };
}).catch(err => {
console.log("Error: " + err);
});
});