Je ne peux pas centrer ma carte Google sur un marqueur après avoir géocodé.
J'ai deux marqueurs: le marqueur initial (celui qui est centré sur, ne change pas), l'autre change en fonction du géocodage, et après le géocodage, il sera centré à chaque fois.
Mon code: 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>
Attend:
Après le géocodage, la carte doit être centrée sur le marqueur à partir de l'adresse donnée à chaque fois.
Réel:
Le géocodeur trouve l'adresse mais ne centre pas la carte sur le marqueur placé en fonction de l'adresse.
Mise à jour
Je ne peux pas utiliser le code de Vadim car le compilateur me dit que j'ai besoin de deux arguments pour le Geocode
, mais le code de Vadim n'en a qu'un. Je ne peux pas utiliser ce code. De plus, si j'ajoute le deuxième argument, il dira alors que then
n'existe pas.
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);
});
});
Selon les documents, la méthode triggerResize()
est appelé avec les valeurs lat/lng ou fitBounds actuelles pour recentrer la carte
https://angular-maps.com/api-docs/agm-core/components/agmmap#triggerResize
Cependant, vous ne mettez pas à jour la longitude/latitude de la carte, car vous avez lié la propriété à initLat
et initLng
. <agm-map [latitude]="initLat" [longitude]="initLng" [zoom]="zoom">
Vous devez mettre à jour les coordonnées de la carte afin de recentrer sur triggerResize()
. Veillez à lier votre modèle au bon attribut de votre classe. Dans l'extrait ts que vous avez montré que userLat
et userLng
ne sont pas présents, votre marqueur géolocalisé sera également problématique.
Modèle mis à jour:
<agm-map [latitude]="lat" [longitude]="lng" [zoom]="zoom" [mapTypeControl]='true'>
<!-- Static marker -->
<agm-marker [latitude]="initLat" [longitude]="initLng"></agm-marker>
<!-- User geolocation marker, changes -->
<agm-marker [latitude]="lat" [longitude]="lng"></agm-marker>
</agm-map>
Vous devrez peut-être initialiser lat
et lng
à une certaine valeur dans votre fichier ts.