рдореИрдВрдиреЗ рдЕрдВрдХ # 139 рдореЗрдВ рджреЗрдЦрд╛ рдХрд┐ рдЖрдк getMap() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ google.maps рдСрдмреНрдЬреЗрдХреНрдЯ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдм GoogleMapsAPIWrapper рдореЗрдВ getNativeMap() рдлрд╝рдВрдХреНрд╢рди рд╣реИред рдореИрдВрдиреЗ рдпрд╣ рднреА рдкрдврд╝рд╛ рд╣реИ рдХрд┐ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдиреЗ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ GoogleMapsAPIWrapper рдФрд░ Geocoder рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рджрд╕реНрддрд╛рд╡реЗрдЬ рдпрд╛ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред
import { Component, OnInit } from '@angular/core';
import { LocationService } from '../../core/location.service';
import { GoogleMapsAPIWrapper } from 'angular2-google-maps/core';
declare var google: any;
@Component({
selector: 'app-test',
templateUrl: './test.component.html',
styleUrls: ['./test.component.css']
})
export class TestComponent implements OnInit {
constructor(private wrapper: GoogleMapsAPIWrapper) {
this.wrapper.getNativeMap().then((m) => {
console.log("test");
});
}
ngOnInit() {
// var address = "1045 mission street san francisco";
// var geocoder = new google.maps.Geocoder();
// var result = "";
// geocoder.geocode({ 'address': address }, (results, status) => {
// var latitude = results[0].geometry.location.lat();
// var longitude = results[0].geometry.location.lng();
// console.log("lat: " + latitude + ", long: " + longitude);
// });
}
}
рдЕрднреА рдореБрдЭреЗ "рдЯреЗрд╕реНрдЯ" рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рднреА рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВред рдХреНрдпрд╛ m рд╡реЗрд░рд┐рдПрдмрд▓ google.maps рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛? рддрд╛рдХрд┐ рдореИрдВ рдлрд┐рд░ m.Geocoder() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреВрдВ?
рдореБрдЭреЗ рдпрд╣ рднреА рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ GoogleMapsAPIWrapper рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЖрдпрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдпрд╛ рдирд╣реАрдВред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореИрдВ рдЗрд╕реЗ core.module рдореЗрдВ рдЖрдпрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдгреАрдп 2 рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╕реЗрд╡рд╛рдПрдВ core.module рдореЗрдВ рд╣реИрдВред "sebm-google-map" рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ AgmCoreModule рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореИрдВ GoogleMapsAPIWrapper рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВред
import {
ModuleWithProviders, NgModule,
Optional, SkipSelf
} from '@angular/core';
import { AgmCoreModule, GoogleMapsAPIWrapper } from 'angular2-google-maps/core';
import { FirebaseService, FirebaseServiceConfig } from './firebase.service';
import { LocationService } from './location.service';
@NgModule({
imports: [AgmCoreModule.forRoot({apiKey: "blahblahapikey"}),],
declarations: [],
exports: [AgmCoreModule],
providers: [FirebaseService, LocationService, GoogleMapsAPIWrapper]
})
export class CoreModule {
constructor( @Optional() @SkipSelf() parentModule: CoreModule) {
if (parentModule) {
throw new Error(
'CoreModule is already loaded. Import it in the AppModule only');
}
}
static forRoot(config: FirebaseServiceConfig): ModuleWithProviders {
return {
ngModule: CoreModule,
providers: [
{ provide: FirebaseServiceConfig, useValue: config }
]
};
}
}
рдореИрдВ рдкреНрд░рд╛рдЗрдордПрдирдЬреА рд╕реЗ рдЬреАрдПрдордПрдкреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП google.maps.Geocoder() рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдореБрдЭреЗ Google рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддреЛ рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╕реЗрдмрд╕реНрдЯрд┐рдпрди рдХреЗ Google рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдпрджрд┐ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЬрд┐рдпреЛрдХреЛрдбрд░ () рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ getNativeMap () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдореИрдВ MapsAPILoader
рдЖрдпрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:
this.mapsAPILoader.load().then(() => {
console.log('google script loaded');
var geocoder = new google.maps.Geocoder();
});
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдореВрд▓ рдирдХреНрд╢рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЯреЗрд╕реНрдЯрдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЛ Google рдорд╛рдирдЪрд┐рддреНрд░ рдШрдЯрдХ рдХреЗ рдЕрдВрджрд░ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
<sebm-google-map [latitude]="lat" [longitude]="lng">
<app-test></app-test>
</sebm-google-map>
рдФрд░ рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ TestComponent
рдХреЗ рдЕрдВрджрд░ GoogleMapsAPIWrapper рдХрд╛ рдЖрдкрдХрд╛ рдЙрджрд╛рд╣рд░рдг SebmGoogleMap
рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рд╣реА рдЙрджрд╛рд╣рд░рдг рд╣реИ
MapsAPILoader рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд┐рдк рдХреЗ рд▓рд┐рдП @gnujeremie thxред рдореИрдВ рдЗрд╕реЗ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ рдЬрд╛рдЙрдВрдЧрд╛? рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕реЗ AgmCoreModule рдХреЗ рд╕рд╛рде рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдерд╛?
рдирд╣реАрдВ, AgmCoreModule рдХреЗрд╡рд▓ рдореЗрд░реЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ Google рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдореИрдВ рд╕реАрдзреЗ рдЕрдкрдиреА рд╕реЗрд╡рд╛ рдореЗрдВ import { MapsAPILoader } from 'angular2-google-maps/core';
рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реВрдВред
рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕рд╛ рд╣реИ -
import { Injectable, NgZone } from '@angular/core';
import { GoogleMapsAPIWrapper } from 'angular2-google-maps/core';
import { MapsAPILoader } from 'angular2-google-maps/core';
import { Observable, Observer } from 'rxjs';
declare var google: any;
@Injectable()
export class GMapsService extends GoogleMapsAPIWrapper{
constructor(private __loader: MapsAPILoader, private __zone: NgZone) {
super(__loader, __zone);
}
getLatLan(address: string) {
console.log('Getting Address - ', address);
let geocoder = new google.maps.Geocoder();
return Observable.create(observer => {
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
observer.next(results[0].geometry.location);
observer.complete();
} else {
console.log('Error - ', results, ' & Status - ', status);
observer.next({});
observer.complete();
}
});
})
}
}
@vintesh рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддреБрдд рд╕рдорд╛рдзрд╛рди рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореБрдЭреЗ рдореИрдк рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП NgZone рдХреЗ рдЕрдВрджрд░ lat рдФрд░ lng рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдерд╛ред
clickSearchAddress() {
this._mapsService.getLatLan(this.model.address)
.subscribe(
result => {
// needs to run inside zone to update the map
this._zone.run(() => {
this.model.lat = result.lat();
this.model.lng = result.lng();
});
},
error => console.log(error),
() => console.log('Geocoding completed!')
);
}
рдЬрд┐рдпреЛрдХреЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рднреА рдореИрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рднрд╛рдЧ рд▓реЗрддрд╛ рд╣реВрдВред рдпрд╣рд╛рдБ рдореЗрд░рд╛ рдХреЛрдб рд╣реИред
import { MapsAPILoader } from 'angular2-google-maps/core';
constructor(public mapsApiLoader: MapsAPILoader) {
this.mapsApiLoader.load().then(() => {
console.log('google script loaded');
this.geocoder = new google.maps.Geocoder();
console.log(this.geocoder);
});
рдореБрдЭреЗ рджреЛ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓рддреА рд╣реИрдВ:
Cannot find name 'google'.
рддрдерд╛
rollup failed: 'MapsAPILoader' is not exported by node_modules/angular2-google-maps/core/index.js (imported
by src/services/location.ts). For help fixing this error see
https://github.com/rollup/rollup/wiki/Troubleshooting#name-is-not-exported-by-module
@slooker рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреА рдШреЛрд╖рдгрд╛ рд╕реЗ рдкрд╣рд▓реЗ declare var google: any;
рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред
@gnujeremie рдЬреЛ Google рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдореБрдЭреЗ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ MapsAPILoader angular2-google-maps рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
@slooker рдореБрдЭреЗ рднреА рдЗрд╕реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдФрд░ MapsAPILoader рддреНрд░реБрдЯрд┐ рдЖ рд░рд╣реА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ "node_modules/angular2-google-maps/core/index.js" MapsAPILoader рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред "рдиреЛрдб_рдореЙрдбреНрдпреВрд▓реНрд╕/angular2-google-maps/core/index.js" рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрди рдХреЛрдб рдбрд╛рд▓реЗрдВ:
var core_module_2 = require('./core.umd');
exports.MapsAPILoader = core_module_2.MapsAPILoader;
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рдХреНрдпрд╛ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рд╡рд░реНрдХрд┐рдВрдЧ рд╡рд░реНрдЬрди рд╣реИ? рдореБрдЭреЗ рдЕрдкрдиреЗ рдкрддреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдорд┐рд▓рддреЗ рд╣реИрдВ рдФрд░ рдорд╛рд░реНрдХрд░ рдХреНрд▓рд╕реНрдЯрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЙрдирдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред GeoCoder рдХреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди nginit рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣реБрдБрдЪрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╡рд┐рдирдЯреЗрд╢, рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕реВрдЪреАрдмрджреНрдз рд╕реЗрд╡рд╛ рдпрд╣ рдХреНрдпреЛрдВ рдХрд╣рддреА рд╣реИ рдХрд┐ Google рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ? рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ? рдзрдиреНрдпрд╡рд╛рдж
рдореБрдЭреЗ рд╡рд╣реА Google рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИред рдХреЛрдИ рд╕реБрдЭрд╛рд╡?
рдореИрдВ "@ рдПрдЬреАрдПрдо/рдХреЛрд░" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ: "^ 1.0.0-рдмреАрдЯрд╛.0"
рдзрдиреНрдпрд╡рд╛рдж
getCurrentPositionSuccessCallBack(position: Position) {
const latitude = position.coords.latitude;
const longitude = position.coords.longitude;
const latLng: LatLngLiteral = {
lat: latitude,
lng: longitude
};
const geoCoder = new google.maps.Geocoder();
geoCoder.geocode({ "location": latLng }, (results, status) => {
рдореЗрд░рд╛ рдХреЛрдб рд╣реИ рдФрд░ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ
fit('onGeoLocate should set the right location', () => {
spyOn(navigator.geolocation, 'getCurrentPosition').and.callFake(function () {
const position = { coords: { latitude: 32, longitude: -96 } };
arguments[0](position);
});
component.onGeoLocate();
рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ
Failed: google is not defined
рдХреГрдкрдпрд╛ рдорджрдж рдХрд░реЗрдВ?
рдирдорд╕реНрдХрд╛рд░ "рдЧреВрдЧрд▓ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд" рджреЛрд╕реНрддреЛрдВред рдХреНрдпрд╛ рдЖрдкрдиреЗ рд╣рдорд╛рд░реЗ рд╕рд╣рдпреЛрдЧреА @gnujeremie рдХреА рд╕рд▓рд╛рд╣ рдХреЛ рдЖрдЬрдорд╛рдпрд╛?
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ (рдХреЛрдгреАрдп 2.2.3):
import { Injectable } from '@angular/core';
import { MapsAPILoader } from 'angular2-google-maps/core';
import { Observable } from 'rxjs/Observable';
declare var google: any;
@Injectable()
export class MapsService {
constructor(private __loader: MapsAPILoader) {
}
getGeocoding(address: string) {
return Observable.create(observer => {
try {
//at this point the variable google may be still undefined (google maps scripts still loading)
//so load all the scripts, then...
this.__loader.load().then(() => {
let geocoder = new google.maps.Geocoder();
geocoder.geocode({ address }, (results, status) => {
if (status === google.maps.GeocoderStatus.OK) {
const place = results[0].geometry.location;
observer.next(place);
observer.complete();
} else {
console.error('Error - ', results, ' & Status - ', status);
if (status === google.maps.GeocoderStatus.ZERO_RESULTS) {
observer.error('Address not found!');
}else {
observer.error(status);
}
observer.complete();
}
});
});
} catch (error) {
observer.error('error getGeocoding' + error);
observer.complete();
}
});
}
}
рдлреИрдмрд┐рдпреЛ, рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХрд╛ рдирдореВрдирд╛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
@DoubleExposure рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реИ
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ (рдирд┐рдЬреА рдПрдордПрд╕: рдореИрдкреНрд╕ рд╕рд░реНрд╡рд┐рд╕) {
}
рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
this.ms.getGeocoding ('10 10 рд╡реАрдВ рд╕реНрдЯреНрд░реАрдЯ рдПрдирдИ, рдЕрдЯрд▓рд╛рдВрдЯрд╛, рдЬреАрдП 30309')ред рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ (рдлрд╝рдВрдХреНрд╢рди (рдПрдХреНрд╕) {
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ (x.toString ());
});
@FabioBentoLuiz @gnujeremie Hi 'рдиреЗ рдЖрдкрдХреЗ рдХреЛрдб рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдкрд╣рд▓реА рдХреЙрд▓ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЬреЛ рд╣рдореЗрд╢рд╛ рд╡рд┐рдлрд▓ рд░рд╣рддреА рд╣реИред рдореИрдВрдиреЗ ngOnInit рдореЗрдВ рдкрд╣рд▓реА рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдпрд╣рд╛рдБ рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рдпрд╛рд╕
import { Component, OnInit } from '@angular/core';
import { Location } from '@angular/common';
import { Router, ActivatedRoute, ParamMap} from '@angular/router';
import 'rxjs/add/operator/switchMap';
import { Observable } from 'rxjs/Observable';
import { Place } from './../place';
import { PlaceService } from './../place.service';
import { MapsService } from './map.service';
import { AlertService } from './../AlertComponent/alert.service';
@Component({
selector: 'app-detailview',
templateUrl: './detail.component.html',
styleUrls: ['./detail.component.css'],
})
export class DetailComponent implements OnInit {
place: Place;
lat: number = 51.678418;
lng: number = 7.809007;
ngOnInit() {
let selectedId = this.route.paramMap.subscribe(
(params: ParamMap) => this.place = this.placeService.getPlaceById(+params.get('id'))
);
this.maps.getGeocoding('')
.subscribe(
result => console.log(result),
error => console.log(error),
() => console.log('Geocoding completed!')
);
}
constructor(private placeService: PlaceService,
private route : ActivatedRoute,
private location : Location,
private alert : AlertService,
private maps : MapsService) {
}
clickSearchAddress() {
let address = this.place.name + " " + this.place.address + " " + this.place.city + " " + this.place.postalCode;
this.maps.getGeocoding(address)
.subscribe(
result => {
this.lat = result.lat();
this.lng = result.lng();
},
error => console.log(error),
() => console.log('Geocoding completed!')
);
}
back(){
this.location.back();
}
рд╣рд╛рдп @Canadadry ,
рдкрд╣рд▓реА рдХреЙрд▓ рдХреИрд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛрддреА рд╣реИ? рдХреНрдпрд╛ рдЖрдк рдореИрдкреНрд╕рдПрдкрд┐рд▓реЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
рдореЗрд░рд╛ рдирдХреНрд╢рд╛ рдкрддреЗ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рдмрдЯрди рдкрд░ clickSearchAddress()
рдореИрдк рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рджреВрд╕рд░реЗ рдХреНрд▓рд┐рдХ рдкрд░ рдореИрдк рдХреЛ рдореВрд╡ рдХрд░рддрд╛ рд╣реИред рдкрд╣рд▓реЗ рдХреНрд▓рд┐рдХ рдкрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рд▓реЙрдЧ рд╣реИ: рдЬрд┐рдпреЛрдХреЛрдбрд┐рдВрдЧ рдкреВрд░реНрдг!
рдЕрдЬреАрдм рдмрд╛рдд рд╣реИ, рдореИрдВрдиреЗ ngOnInit рдореЗрдВ route.paramMap
рдХреА рд╕рджрд╕реНрдпрддрд╛ рдкрд░ clickSearchAddress()
рдХреЙрд▓ рд▓рдЧрд╛рдИ рд╣реИ рдФрд░ рд╡рд╣рд╛рдВ рдлрд╝рдВрдХреНрд╢рди рдкрд╣рд▓реА рдХреЙрд▓ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ Google рдорд╛рдирдЪрд┐рддреНрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдб рд╣реЛ рдЧрдИ рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рджреЛ рдХреНрд▓рд┐рдХреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА MapsService рд╡рд╣ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рдмрддрд╛рдП рдЕрдиреБрд╕рд╛рд░ NgZone рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдВ
import { NgZone } from '@angular/core';
рдЕрдкрдиреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
constructor(private _zone: NgZone){
}
рдлрд┐рд░ рдЗрд╕ рддрд░рд╣ рд▓реЗрдЯ рдФрд░ рд▓реИрдВрдЧ рд╕реЗрдЯ рдХрд░реЗрдВ:
this.maps.getGeocoding(address)
.subscribe(
result => {
this._zone.run(() => {
this.lat = result.lat();
this.lng = result.lng();
});
},
error => console.log(error),
() => console.log('Geocoding completed!')
);
рдпрд╣рд╛рдБ рдПрдХ рдФрд░ рд╕реВрддреНрд░ рд╣реИ рдЬреЛ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдмрддрд╛рддрд╛ рд╣реИред
рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпреЛрдВред
рдзрдиреНрдпрд╡рд╛рдж
рдореИрдВрдиреЗ рдЗрд╕реЗ @vintesh , @FabioBentoLuiz рдФрд░ @neilpennell рдХреЗ рдЙрддреНрддрд░реЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП рдкрд╛рдпрд╛ред
google-maps.service.ts:
import { Injectable, NgZone } from '@angular/core';
import { GoogleMapsAPIWrapper } from '@agm/core';
import { MapsAPILoader } from '@agm/core';
import { Observable, Observer } from 'rxjs';
declare var google: any;
@Injectable()
export class GMapsService extends GoogleMapsAPIWrapper{
constructor(private __loader: MapsAPILoader, private __zone: NgZone) {
super(__loader, __zone);
}
getLatLan(address: string) {
console.log('Getting Address - ', address);
let geocoder = new google.maps.Geocoder();
return Observable.create(observer => {
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
observer.next(results[0].geometry.location);
observer.complete();
} else {
console.log('Error - ', results, ' & Status - ', status);
observer.next({});
observer.complete();
}
});
})
}
}
shop.component.ts:
import { Component, NgZone } from '@angular/core';
import { GMapsService } from '../services/google-maps.service'
@Component({
templateUrl: 'shops.component.html',
styleUrls: ['shops.component.css']
})
export class ShopsComponent {
constructor(private gMapsService: GMapsService, private __zone: NgZone ){}
lat:number
lng:number
getAddress() {
this.gMapsService.getLatLan('Andorra')
.subscribe(
result => {
this.__zone.run(() => {
this.lat = result.lat();
this.lng = result.lng();
})
},
error => console.log(error),
() => console.log('Geocoding completed!')
);
}
}
shop.component.html:
<agm-map [latitude]="lat" [longitude]="lng"></agm-map>
shop.component.css:
agm-map {
height: 300px;
}
рдзрдиреНрдпрд╡рд╛рдж рджреЛрд╕реНрддреЛрдВ!
@taneljoeaar рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдореБрдЭреЗ Google рдХреНрдпреЛрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ
MappingService.getLatLan рдкрд░
рдореИрдВ рдЬреНрдпрд╛рджрд╛рддрд░ рдЖрдкрдХрд╛ рдХреЛрдб рдХреЙрдкреА рдФрд░ рдкреЗрд╕реНрдЯ рдХрд░рддрд╛ рд╣реВрдВред
рдмрд╣реБрдд - рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред
@beachjf рдЗрд╕рдХреЗ рдмрдЬрд╛рдп @FabioBentoLuiz рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЕрдХреНрд╖рд╛рдВрд╢ рдФрд░ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдЪрд░ "google" рдЕрднреА рднреА рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ Google рдорд╛рдирдЪрд┐рддреНрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрднреА рднреА рд▓реЛрдб рд╣реЛ рд░рд╣реА рд╣реИред рдЗрд╕рд╕реЗ рдореЗрд░рд╛ рдХрд╛рдо рдмрдирддрд╛ рд╣реИред
рдХреЛрд╢рд┐рд╢
'@agm/core' рд╕реЗ { GoogleMapsAPIWrapper } рдЖрдпрд╛рдд рдХрд░реЗрдВ;
рдХреЗ рдмрдЬрд╛рдП
рдЖрдпрд╛рдд { GoogleMapsAPIWrapper } 'angular2-google-maps/core' рд╕реЗ;
рдирд╡реАрдирддрдо рдХреЛрдгреАрдп рдХреЗ рд▓рд┐рдП
@taneljoeaar рдпрд╛ рдЬрд┐рд╕ рднреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдкрдХреЛ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ рдЙрд╕рдореЗрдВ import { } from 'googlemaps';
рдЖрдЬрд╝рдорд╛рдПрдВред
рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ googlemaps рдХреЗ рдкреНрд░рдХрд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реИрдВред ( npm install --save @types/googlemaps
)
рд╡реИрд╕реЗ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдкреБрд░рд╛рдирд╛ рд╕рд╡рд╛рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╕реНрдерд╛рди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╢рд╣рд░, рд░рд╛рдЬреНрдп рдФрд░ рджреЗрд╢ рдХреЗ рдирд╛рдо рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рд▓реЗрдХрд┐рди, рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рдЗрди рдирд╛рдореЛрдВ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рддреЛ, рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд▓рд┐рдЦрд╛ рдерд╛:
import {MapsAPILoader} from '@agm/core';
...
constructor(private mapsAPILoader: MapsAPILoader) {
// Get this 'res' from some source, like ionic native geolocation
// Or, for test, create some object like:
let res = {
coords: {
latitude: 40.826514,
longitude: -73.914628
}
}
this.codeLatLng(res.coords);
}
...
codeLatLng(coords) {
this.mapsAPILoader.load().then(() => {
console.log('google script loaded');
let latlng = new google.maps.LatLng({lat: coords.latitude, lng: coords.longitude});
let geocoder = new google.maps.Geocoder();
let location = {
country: null,
state: null,
city: null
};
geocoder.geocode({
'latLng': latlng
}, (results, status) => {
if (status == google.maps.GeocoderStatus.OK) {
if (results[1]) {
for (let i = 0; i < results[0].address_components.length; i++) {
for (let b = 0; b < results[0].address_components[i].types.length; b++) {
if (results[0].address_components[i].types[b] == "country") {
location.country = !location.country ? results[0].address_components[i] : location.country;
} else if (results[0].address_components[i].types[b] == "administrative_area_level_1") {
location.state = !location.state ? results[0].address_components[i] : location.state;
} else if (results[0].address_components[i].types[b] == "administrative_area_level_2") {
location.city = !location.city ? results[0].address_components[i] : location.city;
}
if (location.city && location.state && location.country) {
break;
}
}
}
console.log(location);
} else {
console.log("Results not available");
}
}
else {
console.log("Geocoder failed due to: ", status);
}
});
}
);
}
рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЖрдпрдирд┐рдХ рджреЗрд╢реА рднреМрдЧреЛрд▓рд┐рдХ рд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
рдХреЛрдб рдПрдХ рдХреЛрдгреАрдп 2+ рдФрд░ рдЖрдпреЛрдирд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЖрдпрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЗрд╕реЗ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдореИрдВрдиреЗ рдХреЛрдб рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ:
рддреНрд░реБрдЯрд┐ рддреНрд░реБрдЯрд┐: StaticInjectorError [MapsAPILoader]:
StaticInjectorError [MapsAPILloader]:
NullInjectorError: рдореИрдкреНрд╕APILloader рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдкреНрд░рджрд╛рддрд╛ рдирд╣реАрдВ!
_NullInjector.get рдкрд░ (core.js: 923)
рд╕рдВрдХрд▓реНрдк рдЯреЛрдХрди рдкрд░ (core.js: 1211)
tryResolveToken рдкрд░ (core.js: 1153)
StaticInjector.get рдкрд░ (core.js: 1024)
рд╕рдВрдХрд▓реНрдк рдкрд░ рдЯреЛрдХрди (core.js: 1211)
tryResolveToken рдкрд░ (core.js: 1153)
StaticInjector.get рдкрд░ (core.js: 1024)
рд╕рдВрдХрд▓реНрдк рдкрд░ NgModuleDep (core.js: 10586)
_createClass рдкрд░ (core.js: 10625)
_createProviderInstance $ 1 (core.js: 10597) рдкрд░
рдиреЛрдЯ: рдореИрдВ рдХреЛрдгреАрдп 5 . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ
рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдПрдХ рд╣рд╛рде рджреЗ рд╕рдХрддреЗ рд╣реИрдВред
рд╢реБрдХреНрд░рд┐рдпрд╛ред
@ronaldrenteria рдХреНрдпрд╛ рдЖрдкрдиреЗ рд░рдЦрд╛ рд╣реИ
AgmCoreModule.forRoot({
apiKey: '<YOUR-GOOGLE-API-KEY>'
})
app.modules.ts рдореЗрдВ рдЖрдкрдХреЗ "рдЖрдпрд╛рдд" рдкрд░?
рдХреНрдпрд╛ рдЖрдк рдЖрд▓рд╕реА рд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
рд╡рд╣ рддреНрд░реБрдЯрд┐ рдХрднреА-рдХрднреА рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдЖрдк рдХреБрдЫ рдЖрдпрд╛рдд рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ рдпрд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП lib рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВред
рдЖрдк рдЙрд╕ рдкреГрд╖реНрда рдкрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдХреЛрдгреАрдп рдорд╛рдирдЪрд┐рддреНрд░ - рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛ ред
рдареАрдХ рд╣реИ, рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирдХреНрд╢рд╛ рдФрд░ рдПрдХ рдорд╛рд░реНрдХрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЬреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рд╡рд╣ рдХреБрдЫ рджрд┐рд╢рд╛рдУрдВ рдХреЛ рдЕрдХреНрд╖рд╛рдВрд╢ рдФрд░ рджреЗрд╢рд╛рдВрддрд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред
рдореЗрд░реЗ рдкрд╛рд╕ app.modules.ts рдореЗрдВ рдЖрдпрд╛рдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдореИрдВ LazyLoading рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ home.component.ts рдирд╛рдордХ рдПрдХ рдШрдЯрдХ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдмрджрд▓реЗ рдореЗрдВ рдЗрд╕рдХрд╛ рдЕрдкрдирд╛ рдореЙрдбреНрдпреВрд▓ рд╣реИ рдЬрд┐рд╕реЗ home.module.ts рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
MapsAPILoader рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирдХреНрд╢рд╛ рдФрд░ рдорд╛рд░реНрдХрд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рджреЗрд╢рд╛рдВрддрд░ рдФрд░ рдЕрдХреНрд╖рд╛рдВрд╢ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд░рдЦрдХрд░) рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рдореИрдВ рдбреАрдмреА рд╕реЗ рдкрддреЗ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рджреЗрд╢рд╛рдВрддрд░ рдЕрдХреНрд╖рд╛рдВрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рд╢реБрдХреНрд░рд┐рдпрд╛ред
map.service.ts
import { Injectable, NgZone } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';
// Manejo de Mapas
import { GoogleMapsAPIWrapper, MapsAPILoader } from '@agm/core';
import { HttpClientModule } from '@angular/common/http';
import { HttpModule } from '@angular/http';
declare var google: any;
@Injectable()
export class MapsService extends GoogleMapsAPIWrapper {
constructor(private __loader: MapsAPILoader, private __zone: NgZone) {
super(__loader, __zone);
}
getLatLan(address: string) {
console.log('Getting Address - ', address);
let geocoder = new google.maps.Geocoder();
return Observable.create(observer => {
geocoder.geocode({ address: address }, function(results, status) {
if (status === google.maps.GeocoderStatus.OK) {
observer.next(results[0].geometry.location);
observer.complete();
} else {
console.log('Error - ', results, ' & Status - ', status);
observer.next({});
observer.complete();
}
});
});
}
}
рдШрд░.рдореЙрдбреНрдпреВрд▓.ts
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { homeRouting } from './home.routing';
import { SmartadminModule} from '../shared/smartadmin.module';
import { HomeComponent} from './home.component';
// 614iT
import { config_church } from './../shared/churchpro.config';
// Indispensable para manejar los mapas.
import { AgmCoreModule, MapsAPILoader } from '@agm/core';
@NgModule({
imports: [
CommonModule,
homeRouting,
SmartadminModule,
AgmCoreModule.forRoot({
apiKey: config_church.GOOGLE_API_KEY
})
],
declarations: [HomeComponent]
})
export class HomeModule {}
Home.component.ts
import { Component, OnInit, NgZone } from '@angular/core';
import { HttpClientModule } from '@angular/common/http';
import { HttpModule } from '@angular/http';
// Mapas
import { MapsService } from '../shared/services/maps.service';
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: []
})
export class HomeComponent implements OnInit {
title: string = 'My first AGM project';
lat: number = 4.6517056;
lng: number = -74.1028404;
zoom: number = 13;
Glat: number;
Glng: number;
constructor(private _mapsService: MapsService, private __zone: NgZone) {}
ngOnInit() {}
getAddress() {
this._mapsService.getLatLan('Andorra').subscribe(result => {
this.__zone.run(() => {
this.Glat = result.lat();
this.Glng = result.lng();
});
}, error => console.log(error), () => console.log('Geocoding completed!'));
}
}
рд╕рдмрдХреЛ рдирдорд╕реНрддреЗ
рд╢рд╛рдпрдж рдХрд┐рд╕реА рдХреЛ рднреА рдЗрд╕реА рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИред
рдореБрдЭреЗ рдПрдЬреАрдПрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рдореИрдВрдиреЗ рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕ рдХреЛрдб рдХреЛ рдореЗрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдХреА рддрд░рд╣ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдРрдк рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рд╕реНрд░реЛрдд рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ agmCoreModule рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВред рдореЙрдбреНрдпреВрд▓, рдЗрд╕ рддрд░рд╣ред
import { AgmCoreModule } from '../agmLocalModule/core.module';
AgmCoreModule.forRoot({
apiKey: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
}),
рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреГрд╖реНрда рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдирдЬреАрдлрд╝реЛрд░ рд▓реВрдк рдореЗрдВ рдЙрддреНрдкрдиреНрди рдорд╛рд░реНрдХрд░ рд╣реИрдВред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрдЧрд▓реА рддреНрд░реБрдЯрд┐ рд╣реЛ рд░рд╣реА рд╣реИред
```
[рджреЗрд╢рд╛рдВрддрд░] = "ubicacion.posicion.longitud"
[рдорд╛рд░реНрдХрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп] = "рд╕рдЪ"
>
```
рддреНрд░реБрдЯрд┐ рддреНрд░реБрдЯрд┐: рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ (рд╡рд╛рджреЗ рдореЗрдВ): рд╕рдВрджрд░реНрдн рддреНрд░реБрдЯрд┐: Google рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ
рд╕рдВрджрд░реНрдн рддреНрд░реБрдЯрд┐: рдЧреВрдЧрд▓ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ
MarkerManager.webpackJsonp.102.MarkerManager.addMarker рдкрд░ (marker-manager.ts:82)
AgmMarker.webpackJsonp.291.AgmMarker.ngOnChanges рдкрд░ (marker.ts:169)
рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ
рдЙрди рд╕рднреА рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ 'google is undefined' рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ:
рдПрдЬреАрдПрдо-рдореИрдк рддрддреНрд╡ рдХреЗ рдЗрд╕ рдИрд╡реЗрдВрдЯ 'рдореИрдкрд░реЗрдбреА' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
" https://angular-maps.com/api-docs/agm-core/components/AgmMap.html#mapрд░реЗрдбреА "
рдХреНрдпрд╛ рдХреЛрдИ рдХрд╛рдордХрд╛рдЬреА рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдЖ рд╕рдХрддрд╛ рд╣реИ?
рдпрд╣рд╛рдВ рд╕реВрдЪреАрдмрджреНрдз рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЬрд┐рдпреЛрдХреЛрдбрд┐рдВрдЧ рд╕реЗрд╡рд╛ https://stackblitz.com/edit/angular-google-maps-demo-geocoding рдХрд╛ рдХрд╛рд░реНрдпрд╢реАрд▓ рдЙрджрд╛рд╣рд░рдгред
рдХреНрдпрд╛ рдореИрдВ mapAPILoader.load() рдХреЛ рдХрдИ рдмрд╛рд░ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?
рд╣рд╛рдп рд╣рд░ рд╢рд░реАрд░ рдореБрдЭреЗ рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕рдорд╕реНрдпрд╛ рдереА, рдореИрдВ рдПрдЬреАрдПрдо рдФрд░ рдХреЛрдгреАрдп рдХреЗ рд▓рд┐рдП рднреА рдирдпрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЬрдЧрд╣_рдЖрдИрдбреА рдорд┐рд▓ рдЧрдИ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рд▓реИрдЯрд▓рд┐рдВрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдпрд╣ рдерд╛, рдХрд┐рд╕реА рднреА рдорджрдж рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ
@henoktsegaye рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрдд рдпрд╣рд╛рдБ https://developers.google.com/maps/documentation/javascript/examples/geocoding-place-id
рддреЛ рдЖрдк рдКрдкрд░ рдкреЛрд╕реНрдЯ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреБрдЫ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдЖрдкрдХреЛ this.geocoder = new google.maps.Geocoder()
рдФрд░ geocoder.geocode({'placeId': placeId}, callbackFunction(results, status))
рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣реЛрдЧрд╛
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╣рд╛рд▓ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдЖрдЧреЗ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
@supruniuk thz рднрдЧрд╡рд╛рди
рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рд░рд┐рдЬрд▓реНрдЯ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?
@xanscale рдХреНрдпреЛрдВ рдирд╣реАрдВ, рдмрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдФрд░ рдЯрд╛рдЗрдк рдЪреЗрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ
рдирд┐рд░реНрдпрд╛рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реНрдерд╛рди {
рдЕрдХреНрд╖рд╛рдВрд╢: рд╕рдВрдЦреНрдпрд╛;
рдПрд▓рдПрдирдЬреА: рд╕рдВрдЦреНрдпрд╛;
}
@supruniuk рдореЗрд░рд╛ рдорддрд▓рдм Google рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреИрд╕реЗ рдкрд░рд┐рдгрд╛рдо рдФрд░ рд╕реНрдерд┐рддрд┐ рдЯрд╛рдЗрдк рдХрд░рдирд╛ рд╣реИ
@SainiSK рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд░реВрдк рдореЗрдВ
рдЙрди рд╕рднреА рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ 'google is undefined' рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ:
рдПрдЬреАрдПрдо-рдореИрдк рддрддреНрд╡ рдХреЗ рдЗрд╕ рдИрд╡реЗрдВрдЯ 'рдореИрдкрд░реЗрдбреА' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
" https://angular-maps.com/api-docs/agm-core/components/AgmMap.html#mapрд░реЗрдбреА "
рдирдореВрдирд╛:
(mapReady)="initializedGoogleMapGeocoder($event)"
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕рд╛ рд╣реИ -