Angular-google-maps: GoogleMapsAPIWrapper рдХреЗ рд╕рд╛рде рдЬрд┐рдпреЛрдХреЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 1 рдЕрдХреНрддреВре░ 2016  ┬╖  42рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: SebastianM/angular-google-maps

рдореИрдВрдиреЗ рдЕрдВрдХ # 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 рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕рд╛ рд╣реИ -

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();
                }
            });
        })
    }
}

рд╕рднреА 42 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдпрджрд┐ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЬрд┐рдпреЛрдХреЛрдбрд░ () рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ 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.latitud"
[рджреЗрд╢рд╛рдВрддрд░] = "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() рдХреЛ рдХрдИ рдмрд╛рд░ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рд╣рд╛рдп рд╣рд░ рд╢рд░реАрд░ рдореБрдЭреЗ рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕рдорд╕реНрдпрд╛ рдереА, рдореИрдВ рдПрдЬреАрдПрдо рдФрд░ рдХреЛрдгреАрдп рдХреЗ рд▓рд┐рдП рднреА рдирдпрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЬрдЧрд╣_рдЖрдИрдбреА рдорд┐рд▓ рдЧрдИ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рд▓реИрдЯрд▓рд┐рдВрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдпрд╣ рдерд╛, рдХрд┐рд╕реА рднреА рдорджрдж рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╣рд╛рд▓ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдЖрдЧреЗ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

@supruniuk thz рднрдЧрд╡рд╛рди

рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рд░рд┐рдЬрд▓реНрдЯ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?

@xanscale рдХреНрдпреЛрдВ рдирд╣реАрдВ, рдмрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдФрд░ рдЯрд╛рдЗрдк рдЪреЗрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ
рдирд┐рд░реНрдпрд╛рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реНрдерд╛рди {
рдЕрдХреНрд╖рд╛рдВрд╢: рд╕рдВрдЦреНрдпрд╛;
рдПрд▓рдПрдирдЬреА: рд╕рдВрдЦреНрдпрд╛;
}

@supruniuk рдореЗрд░рд╛ рдорддрд▓рдм Google рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреИрд╕реЗ рдкрд░рд┐рдгрд╛рдо рдФрд░ рд╕реНрдерд┐рддрд┐ рдЯрд╛рдЗрдк рдХрд░рдирд╛ рд╣реИ

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

vamsibassetty08 picture vamsibassetty08  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

PeterSisovsky picture PeterSisovsky  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Subhojit1992 picture Subhojit1992  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

stot3 picture stot3  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ChrisDevinePimss picture ChrisDevinePimss  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ