Angular-google-maps: рджрд┐рд╢рд╛ рд╕реЗрд╡рд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 8 рдЬреБрд▓ре░ 2016  ┬╖  54рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: SebastianM/angular-google-maps

рдирдорд╕реНрддреЗ,

рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рджрд┐рд╢рд╛-рдирд┐рд░реНрджреЗрд╢ рд╕реЗрд╡рд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛ рд╣реИ?

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

рдпрд╣ рдирд┐рд░реНрджреЗрд╢ рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ

import {GoogleMapsAPIWrapper} from 'angular2-google-maps/core/services/google-maps-api-wrapper';
import { Directive,  Input} from '@angular/core';
declare var google: any;



@Directive({
  selector: 'sebm-google-map-directions'
})
export class DirectionsMapDirective {
  @Input() origin;
  @Input() destination;
  constructor (private gmapsApi: GoogleMapsAPIWrapper) {}
  ngOnInit(){
    this.gmapsApi.getNativeMap().then(map => {
              var directionsService = new google.maps.DirectionsService;
              var directionsDisplay = new google.maps.DirectionsRenderer;
              directionsDisplay.setMap(map);
              directionsService.route({
                      origin: {lat: this.origin.latitude, lng: this.origin.longitude},
                      destination: {lat: this.destination.latitude, lng: this.destination.longitude},
                      waypoints: [],
                      optimizeWaypoints: true,
                      travelMode: 'DRIVING'
                    }, function(response, status) {
                                if (status === 'OK') {
                                  directionsDisplay.setDirections(response);
                                } else {
                                  window.alert('Directions request failed due to ' + status);
                                }
              });

    });
  }
}

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

рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рд╣реА рд╕рд╡рд╛рд▓ ..

рдХреНрдпрд╛ рд╣рдо angular2-google-maps рдХреЗ рд╕рд╛рде рджрд┐рд╢рд╛-рдирд┐рд░реНрджреЗрд╢ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

-> рджрд┐рд╢рд╛ рд╕реЗрд╡рд╛
-> рдЙрджрд╛рд╣рд░рдг

рдЖрдкрдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж
-- рдХреНрд░рд┐рд╕

рдореИрдВ рднреА рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдРрд╕реА рдЪреАрдЬ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдореИрдВ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рднрд╛рд░реА рдорд╛рдирдЪрд┐рддреНрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рджреЛ рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рдмреАрдЪ Google рдХреЗ рд╕реБрдЭрд╛рдП рдЧрдП рджрд┐рд╢рд╛-рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдореИрдВрдиреЗ рдкреНрд░рд▓реЗрдЦрди рдХреЛ рджреЗрдЦрд╛ рд╣реИ рдФрд░ рдЕрднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ, рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢рд╛рдирджрд╛рд░ рд╣реИ! рдЖрдкрдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж @SebastianM

рдпрд╣ рдирд┐рд░реНрджреЗрд╢ рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ

import {GoogleMapsAPIWrapper} from 'angular2-google-maps/core/services/google-maps-api-wrapper';
import { Directive,  Input} from '@angular/core';
declare var google: any;



@Directive({
  selector: 'sebm-google-map-directions'
})
export class DirectionsMapDirective {
  @Input() origin;
  @Input() destination;
  constructor (private gmapsApi: GoogleMapsAPIWrapper) {}
  ngOnInit(){
    this.gmapsApi.getNativeMap().then(map => {
              var directionsService = new google.maps.DirectionsService;
              var directionsDisplay = new google.maps.DirectionsRenderer;
              directionsDisplay.setMap(map);
              directionsService.route({
                      origin: {lat: this.origin.latitude, lng: this.origin.longitude},
                      destination: {lat: this.destination.latitude, lng: this.destination.longitude},
                      waypoints: [],
                      optimizeWaypoints: true,
                      travelMode: 'DRIVING'
                    }, function(response, status) {
                                if (status === 'OK') {
                                  directionsDisplay.setDirections(response);
                                } else {
                                  window.alert('Directions request failed due to ' + status);
                                }
              });

    });
  }
}

рд╣реЗ рдбреЗрд╡рд┐рдб, рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдЗрд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рд╣реЛ рд░рд╣реА рд╣реИред рдХреНрдпрд╛ рдореБрдЭреЗ рдЗрд╕реЗ рд╕реАрдзреЗ рдЧреВрдЧрд▓ рдореИрдк рдбреЛрдо рдореЗрдВ рдбрд╛рд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
<sebm-google-map sebm-google-map-directions [origin=x] [destination=y][zoomControl]="false" [latitude]="lat" [longitude]="lng" (mapClick)="mapClicked($event)"> </sebm-google-map>

рдореБрдЭреЗ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдХрдард┐рди рд╕рдордп рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдгреАрдп 2 рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╣реВрдВ ... рдЖрдкрдХреА рдорджрдж рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж

рд╣рд╛рдп @рд╣рд╛рд░реНрдбрд╡рд░реНрдХрд░ , рдпрд╣ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИ:

<sebm-google-map>
  <sebm-google-map-directions [origin]="origin" [destination]="destination"></sebm-google-map-directions>
</sebm-google-map>

рдЖрдкрдХреЗ рдШрдЯрдХ рдирд┐рдпрдВрддреНрд░рдХ рд╡рд░реНрдЧ рдореЗрдВ рдЖрдкрдХреЛ рдЗрд╕ рдЧреБрдг рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

origin = { longitude: 4.333, lattitude: -1.2222 };  // its a example aleatory position
destination = { longitude: 22.311, lattitude: -0.123 };  // its a example aleatory position

рдзрдиреНрдпрд╡рд╛рдж! рдпрд╣ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╡реЗрдкреЙрдЗрдВрдЯ рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдлрд┐рд░ рдкреГрд╖реНрда рдХреЛ рд░реАрдлреНрд░реЗрд╢ рдХрд┐рдП рдмрд┐рдирд╛ рджрд┐рд╢рд╛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ?

рдЕрд╕рд▓ рдореЗрдВ рдореБрдЭреЗ рдпрд╣реА рдорд┐рд▓рд╛ рд╣реИ:
рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдШрдЯрдХ рдореЗрдВ рдЬреЛрдбрд╝рд╛:

@ViewChild(DirectionsMapDirective) vc:DirectionsMapDirective;
рдФрд░ рдлрд┐рд░ рдЬрдм рднреА рдХреЛрдИ рдирдпрд╛ рддрд░реАрдХрд╛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдореИрдВ рдШрдЯрдХ рд╕реЗ vc.updateDirections() рдХреЛ рдмрд╕ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВред рдЬреЛ рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдХреЛрдб рдХреЛ рд╡рд╛рдкрд╕ рдмреБрд▓рд╛рдПрдЧрд╛ред рдХреНрдпрд╛ рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИ?

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ @ahardworker , рд╡реЗрдкреЙрдЗрдВрдЯ рдкрджреЛрдВ рдХреА рд╕рд░рдгреА рд╣реИ, рдЖрдк рдирд┐рд░реНрджреЗрд╢ рдкрд░ рддрд░реНрдХ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╕рд░рдгреА рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП...

<sebm-google-map>
  <sebm-google-map-directions [origin]="origin" [destination]="destination" [waypoints]="waypoints"></sebm-google-map-directions>
</sebm-google-map>

рдирд┐рд░реНрджреЗрд╢:

@Directive({
  selector: 'sebm-google-map-directions'
})
export class DirectionsMapDirective {
  @Input() origin;
  @Input() destination;
  @Input() waypoits;
  constructor (private gmapsApi: GoogleMapsAPIWrapper) {}
  ngOnInit(){
    this.gmapsApi.getNativeMap().then(map => {
              var directionsService = new google.maps.DirectionsService;
              var directionsDisplay = new google.maps.DirectionsRenderer;
              directionsDisplay.setMap(map);
              directionsService.route({
                      origin: {lat: this.origin.latitude, lng: this.origin.longitude},
                      destination: {lat: this.destination.latitude, lng: this.destination.longitude},
                      waypoints: waypoints,
                      optimizeWaypoints: true,
                      travelMode: 'DRIVING'
                    }, function(response, status) {
                                if (status === 'OK') {
                                  directionsDisplay.setDirections(response);
                                } else {
                                  window.alert('Directions request failed due to ' + status);
                                }
              });

    });
  }
}

рдирдорд╕реНрддреЗ @davidpestana
рдореИрдВрдиреЗ рдирд┐рд░реНрджреЗрд╢-рдирд┐рд░реНрджреЗрд╢ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ:
Can't bind to 'origin' since it isn't a known property of 'sebm-google-map-directions'.

(рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛, рд╕реНрд╡рд░реВрдкрдг рдЗрддрдирд╛ рдЦрд░рд╛рдм рдХреНрдпреЛрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рд╡реИрд╕реЗ рднреА рдкрдврд╝ рд▓реЗрдВрдЧреЗ)

рдПрдЪрдЯреАрдПрдордПрд▓
<sebm-google-map [latitude]="lat" [longitude]="lng" [zoom]="zoom"> <sebm-google-map-marker [latitude]="latHome" [longitude]="lngHome" [title]="'titleHome'"</sebm-google-map-marker> <sebm-google-map-marker [latitude]="latComp" [longitude]="lngComp" [title]="titleComp"</sebm-google-map-marker> <sebm-google-map-directions [origin]="origin" [destination]="destination"></sebm-google-map-directions> </sebm-google-map>

рдЕрд╡рдпрд╡
`@рдШрдЯрдХ({
рдЪрдпрдирдХрд░реНрддрд╛: 'рдЧреВрдЧрд▓-рдореИрдкреНрд╕',
рд╢реИрд▓рд┐рдпрд╛рдБ: [рдЖрд╡рд╢реНрдпрдХрддрд╛ ('./googleMaps.scss')],
рдЯреЗрдореНрдкреНрд▓реЗрдЯ: рдЖрд╡рд╢реНрдпрдХрддрд╛ ('./googleMaps.html'),
})
рдПрдХреНрд╕рдкреЛрд░реНрдЯ рдХреНрд▓рд╛рд╕ рдЧреВрдЧрд▓рдореИрдкреНрд╕ {
рд▓реИрдЯрд╣реЛрдо: рд╕рдВрдЦреНрдпрд╛ = рекрео.резрелрезреорейреп;
lngрд╣реЛрдо: рд╕рдВрдЦреНрдпрд╛ = резрей.реорейрезренреирем;
latComp: рд╕рдВрдЦреНрдпрд╛ = рекрео.рейреирепрелрежреж;
lngComp: рд╕рдВрдЦреНрдпрд╛ = резрек.рейрезрепренремрел;
рд╢реАрд░реНрд╖рдХ рдХреЙрдореНрдк: рд╕реНрдЯреНрд░рд┐рдВрдЧ = "рдбрд╛рдпрдиреЗрдЯреНрд░реЗрд╕";
рдЬрд╝реВрдо: рд╕рдВрдЦреНрдпрд╛ = 10;

lat: рд╕рдВрдЦреНрдпрд╛ = (this.latComp + this.latHome) / 2;
рдПрд▓рдПрдирдЬреА: рд╕рдВрдЦреНрдпрд╛ = (this.lngComp + this.lngHome) / 2;

рдореВрд▓ = {рджреЗрд╢рд╛рдВрддрд░: 4.333, рдЕрдХреНрд╖рд╛рдВрд╢: -1.2222};
рдЧрдВрддрд╡реНрдп = {рджреЗрд╢рд╛рдВрддрд░: реиреи.рейрезрез, рдЕрдХреНрд╖рд╛рдВрд╢: -реж.резреирей};
}`

рдХреНрдпрд╛ рдореБрдЭреЗ рдХрд╣реАрдВ рдирд┐рд░реНрджреЗрд╢ рджрд░реНрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛?

@ProkerBen рд╣рд╛рдВ, рдЖрдкрдХреЛ рдЙрд╕ рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдЙрд╕ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдШреЛрд╖рдгрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдареАрдХ рд╡реИрд╕реЗ рд╣реА рдЬреИрд╕реЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓рд┐рдПред

рд╣рд╛рдБ @ProkerBen , рдХреИрд╕реЗ @lazarljubenovic рдиреЗ рдХрд╣рд╛, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

import { CustomMapDirective } from '[your route to directive folder]/google-map.directive';
...
@NgModule({
  imports: [...],
  exports: [..],
  declarations:[...,CustomMapDirective]
})

@davidpestana DirectionsMapDirective рдорд╛рд░реНрдЧ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд╝реВрдо-рдЗрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдЬрд╝реВрдо = 17 рд╕реЗрдЯ рдХрд┐рдпрд╛ рдерд╛

рдпрд╣ рдПрдХ Google рдПрдкреАрдЖрдИ рд╕рдВрдкрддреНрддрд┐ рд╣реИ, рдЬрдм рджрд┐рд╢рд╛-рдирд┐рд░реНрджреЗрд╢ рдбрд┐рд╕реНрдкреНрд▓реЗ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рднреА рддрд░рд╣ рдХреЗ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдЪрд┐рддреНрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЬрд╝реВрдо рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЬрд╝реВрдо рдорд╛рди рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

@davidpestana рд╣рд╛рдВ! рдореИрдВрдиреЗ GMapSDK рдХреЗ рд╢реБрджреНрдз func рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

}, function(response, status) {
  if (status === 'OK') {
    directionsDisplay.setOptions({ preserveViewport: true });
    directionsDisplay.setDirections(response);
  } else {
    window.alert('Directions request failed due to ' + status);
  }

DirectionsDisplay.setOptions({PreserveViewport: true}) рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рдмрд▓рдкреВрд░реНрд╡рдХ рдЬрд╝реВрдо рдорд╛рди рд░рдЦрддрд╛ рд╣реИ

@davidpestana рд╣рд╛рдп,

рдореБрдЭреЗ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!
рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХрдорд╛рддреНрд░ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдореБрдЭреЗ рдЙрд╕реА рдорд╛рдирдЪрд┐рддреНрд░ рдкрд░ рдПрдХ рдирдпрд╛ рдорд╛рд░реНрдЧ рджрд┐рдЦрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдореИрдВ рдЙрд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдореВрд▓ рдШрдЯрдХ рд╕реЗ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдкреБрд░рд╛рдиреЗ рдорд╛рд░реНрдЧ рдкрд░ рдирдпрд╛ рдорд╛рд░реНрдЧ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ рдХреЛрдб рд╣реИ:
`
рдирд┐рд░реНрдпрд╛рдд рд╡рд░реНрдЧ
@Input() рдбреЗ рд╕реНрдЯреЗрд╢рди: рд╕реНрдЯреНрд░рд┐рдВрдЧ;
@ рдЗрдирдкреБрдЯ () рдореВрд▓: рд╕реНрдЯреНрд░рд┐рдВрдЧ;

constructor (private gmapsApi: GoogleMapsAPIWrapper) {

}

ngOnInit(){
    this.setMap();
}

setMap():void{
    this.gmapsApi.getNativeMap().then(map => {
        var directionsService = new google.maps.DirectionsService;
        var directionsDisplay = new google.maps.DirectionsRenderer({draggable: true});
        directionsDisplay.setMap(map);
        directionsService.route({
            origin: this.origin,
            destination: this.destination,
            waypoints: [],
            optimizeWaypoints: true,
            travelMode: 'DRIVING'
        }, function(response, status) {
            if (status === 'OK') {
                directionsDisplay.setDirections(response);
            } else {
                window.alert('Directions request failed due to ' + status);
            }
        });

    });
}

}
`
рдЬрдм рдореБрдЭреЗ рдирдпрд╛ рдорд╛рд░реНрдЧ рджрд┐рдЦрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рддреЛ рдореВрд▓ рдШрдЯрдХ рд╕реЗрдЯрдореИрдк рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореВрд▓ рдФрд░ рдЧрдВрддрд╡реНрдп рдЪрд░ рдмрджрд▓ рдЬрд╛рддреЗ рд╣реИрдВред
рдХреНрдпрд╛ рдореВрд▓ рдШрдЯрдХ рд╕реЗ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?

@davidpestana рдореИрдВ рднреА рдУрдХреЗрдиреЛрдХ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рд╕рдорд╕реНрдпрд╛ рдХрд╛
@okanok рдХреНрдпрд╛ рдЖрдкрдиреЗ рдХрднреА рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рд╣реИ

рд╣рд╛рдп @davidpestana рдФрд░ @ahardworker , рдореИрдВрдиреЗ рдирд┐рд░реНрджреЗрд╢ рдФрд░ HTML рдбреЗрд╡рд┐рдб рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ "рдЕрд╡реИрдз рд╡реИрд▓реНрдпреВ рддреНрд░реБрдЯрд┐: рд╕рдВрдкрддреНрддрд┐ рдореВрд▓ рдореЗрдВ: рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╣реАрдВ; рдФрд░ рд▓реИрдЯрд▓рд┐рдВрдЧ рдпрд╛ рд▓реИрдЯрд▓рд┐рдВрдЧрд▓рд┐рдЯрд░рд▓ рдирд╣реАрдВ: рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рд▓реИрдЯ: рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ; рдФрд░ рдЕрдЬреНрдЮрд╛рдд рд╕рдВрдкрддреНрддрд┐ lat"ред

рдШрдЯрдХ.ts
рдореВрд▓ = {рджреЗрд╢рд╛рдВрддрд░: 4.333, рдЕрдХреНрд╖рд╛рдВрд╢: -1.2222}; // рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд╛рдБрд╕реЗ рдХреА рд╕реНрдерд┐рддрд┐
рдЧрдВрддрд╡реНрдп = {рджреЗрд╢рд╛рдВрддрд░: реиреи.рейрезрез, рдЕрдХреНрд╖рд╛рдВрд╢: -реж.резреирей}; // рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд╛рдБрд╕реЗ рдХреА рд╕реНрдерд┐рддрд┐

Component.html

<sebm-google-map-directions [origin]="origin" [destination]="destination"></sebm-google-map-directions>

рддреНрд░реБрдЯрд┐: InvalidValueError: рд╕рдВрдкрддреНрддрд┐ рдореВрд▓ рдореЗрдВ: рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╣реАрдВ; рдФрд░ LatLng рдпрд╛ LatLngLiteral рдирд╣реАрдВ: рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ lat: рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ; рдФрд░ рдЕрдЬреНрдЮрд╛рдд рд╕рдВрдкрддреНрддрд┐ lat

рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреГрдкрдпрд╛ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ?

рдзрдиреНрдпрд╡рд╛рдж

@developernm рдЖрдкрдиреЗ рдЕрдХреНрд╖рд╛рдВрд╢ рдЧрд▓рдд рд▓рд┐рдЦрд╛ рд╣реИ;)

@ bene-starzengruber рдереЛрдбрд╝реА рдЬрд▓реНрджреА рдореЗрдВ рдерд╛ lol

рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдХрд╛ рдмрдбрд╝реЗ рдЪрд╛рд╡ рд╕реЗ рдЕрдиреБрд╕рд░рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдФрд░ рдореИрдВ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ (рдХреЛрд░) рдореЗрдВ рдПрдХреАрдХреГрдд рд╣реЛрдиреЗ рдХреА рдЖрд╢рд╛ рдХрд░рддрд╛ рд╣реВрдВред

рдореБрдЭреЗ рдпрд╣ рднреА рдкрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдорд╛рд░реНрдЧ рдирд┐рдпреЛрдЬрди рдФрд░ рджрд┐рд╢рд╛-рдирд┐рд░реНрджреЗрд╢ рдПрдкреАрдЖрдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

@davidpestana @ahardworker рдиреЗ рджрд┐рд╢рд╛-рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХрдИ рджрд┐рд╢рд╛рдПрдВ рдорд┐рд▓ рд░рд╣реА рд╣реИрдВред рдореЗрд░рд╛ рдирдХреНрд╢рд╛ рдорд╛рд░реНрдЧ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рд╕реБрдЭрд╛рд╡ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рд░ рдмрд╛рд░ рдПрдХрд▓ рдорд╛рд░реНрдЧ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ?

рд╣рд░ рдмрд╛рд░ рдбреЗрд╕реНрдЯрд┐рдиреЗрд╢рди рд╡реИрд▓реНрдпреВ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реЛрдиреЗ рдкрд░ рдореИрдВ My DirectionsMapDirective Directive рдХреЛ рдХреЙрд▓ рдХрд░реВрдВрдЧрд╛ред

рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдзрдиреНрдпрд╡рд╛рджред

screen shot 2017-01-18 at 6 29 22 pm

@okanok @ marimuthum17 ,
рдШрдВрдЯреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ... рдпрд╣рд╛рдВ рдЖрдк рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рджрд┐рд╢рд╛-рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрддрд░ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред рдбрд╛рдпрд░реЗрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдбрд╛рдпрд░реЗрдХреНрд╢рдирдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ, рд╣рд░ рдмрд╛рд░ рдбрд╛рдпрд░реЗрдХреНрд╢рдирд░реЗрдВрдбрд░рд░ рдХрд╛ рдПрдХ рдирдпрд╛ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрдирд╛рдПрдЧрд╛ рдФрд░ рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкрд┐рдЫрд▓реЗ рд░реВрдЯ рдХреЛ рдирд╣реАрдВ рд╣рдЯрд╛ рд╕рдХрддрд╛ рд╣реИред

рддреЛ рдореИрдВ рдЕрдкрдиреЗ рдШрдЯрдХ рдореЗрдВ рджрд┐рд╢рд╛-рдирд┐рд░реНрджреЗрд╢рдХ рдмрдирд╛ рджреЗрддрд╛ рд╣реВрдВред
if(this.directionsDisplay === undefined){ this.mapsAPILoader.load().then(() => { this.directionsDisplay = new google.maps.DirectionsRenderer; this.showDirective = true; }); }

рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ @Input() directionsDisplay; рд╕рд╛рде рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░реЗрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдареАрдХ рдирд╣реАрдВ рд╣реИ .. рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ..

@zuschy рдЖрдкрдиреЗ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╕рдореНрдореЛрд╣рди рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!!ред рдорджрдж рдХреЗ рд▓рд┐рдпреЗ рд╢реБрдХреНрд░рд┐рдпрд╛ред

рдореИрдВрдиреЗ рдЬреЛ рдХрд┐рдпрд╛ рд╡рд╣ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ: @Input() рджрд┐рд╢рд╛-рдирд┐рд░реНрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рди: рдХреЛрдИ рднреА; // рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдЬреЛрдбрд╝рд╛ рд╣реИред

рдЖрдкрдиреЗ рдореЗрд░рд╛ рджрд┐рди рдмрдЪрд╛ рд▓рд┐рдпрд╛ред

рдХреНрдпрд╛ рдХреЛрдИ рдЗрддрдирд╛ рджрдпрд╛рд▓реБ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦ рд╕рдХреЗ?

@zuschy , @marimuthum17
рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЗрдирдкреБрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдирд┐рд░реНрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд▓реЗрдХрд┐рди рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢ рд╣рдореЗрд╢рд╛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ

<sebm-google-map-directions *ngIf="marker_count > 1" [directionsDisplay]="directionsDisplay" [waypointCnt]="waypointCnt" [origin]="origin" [destination]="destination" [waypoints]="waypoints"></sebm-google-map-directions>

рдШрдЯрдХ рдореЗрдВ рдореИрдВ рдпрд╣ рдХрд░рддрд╛ рд╣реВрдБ

 ngOnInit() {
        this.searchControl = new FormControl();
        this.setCurrentPosition();
        if(this.directionsDisplay === undefined){
            this.gmapsApi.getNativeMap().then(map => {               
                this.directionsDisplay = new google.maps.DirectionsRenderer({
                    draggable: true,
                    map: map,
                });
            });
        }

рдФрд░ рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ

@Input() directionsDisplay;

ngOnChanges(changes: SimpleChanges) {
        console.log('onChange fired');
        console.log('changing', changes);
        this.gmapsApi.getNativeMap().then(map => {
            var directionsService = new google.maps.DirectionsService;
            this.directionsDisplay.addListener('directions_changed', function() {
                computeTotalDistance(this.directionsDisplay.getDirections());
            });

            this.directionsDisplay.setMap(map);
            directionsService.route({
                origin: {lat: this.origin.latitude, lng: this.origin.longitude},
                destination: {lat: this.destination.latitude, lng: this.destination.longitude},
                waypoints: this.waypoints,
                optimizeWaypoints: true,
                travelMode: 'DRIVING'
            }, function(response, status) {
                if (status === 'OK') {
                    //directionsDisplay.setDirections({routes: []});
                    this.directionsDisplay.setDirections(response);
                } else {
                    window.alert('Directions request failed due to ' + status);
                }
            });

@zuschy @marimuthum17 @Giusti
рдореБрдЭреЗ рднреА рдЗрд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИред рджрд┐рд╢рд╛ рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИред

@manohar-nyros @Giusti
рдпрд╣рд╛рдВ рдореИрдВрдиреЗ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдореЗрд░рд╛ рдирд┐рд░реНрджреЗрд╢ рдХреИрд╕реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ
@ViewChild(DirectionsMapDirective) vc: DirectionsMapDirective;
........ рдФрд░ рдмреАрдУ рдХреА рддрд░рд╣ рдкрд╣реБрдБрдЪрд╛ред
if(this.vc.directionsDisplay === рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд){ this.mapsAPILoader.load().then(() => {
this.vc.directionsDisplay = new google.maps.DirectionsRenderer;
});

@bonzysalesman @Giusti @manohar-nyros
google-map-directions-display-in-angular-2

рдореИрдВрдиреЗ рдЕрдкрдиреА рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдгреАрдп 2 рдореЗрдВ Google рдорд╛рдирдЪрд┐рддреНрд░ рджрд┐рд╢рд╛-рдирд┐рд░реНрджреЗрд╢ рд╕реЗрд╡рд╛ рдмрдирд╛рдИ рд╣реИред
рдпрд╣рд╛рдБ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрд╛ рд╣реИ, рдЖрдк рдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ
рдпрд╣рд╛рдВ рд╕рдВрд▓рдЧреНрди рдбреЗрдореЛ рд╣реИ, рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рднреА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдФрд░ рдХреА рднреА рдорджрдж рдХрд░реЗрдЧрд╛ред

@ рдорд╛рд░реАрдореБрдереБрдо17
рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж, рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдПрдирдЬреА рдореЗрдВ рд╕реНрд╡рдд: рдкреВрд░реНрдг рдлрд╝реАрд▓реНрдб рдХреИрд╕реЗ рдЬреЛрдбрд╝реВрдВ-рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХрд╣реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ + рдмрдЯрди рд╣реЛрдЧрд╛ рдФрд░ рджреВрд╕рд░рд╛ рд╕рд░реНрдЪрдлреАрд▓реНрдб рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдЪреВрдВрдХрд┐ рд╕рд░реНрдЪрдлреАрд▓реНрдб рдХреЛ #pickupInput / #pickupoutput рд╕реЗ рдмрдВрдзрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдПрдХ @Viewchild рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ?

@ рдорд╛рд░реАрдореБрдереБрдо17
рд╕рд╣рд╛рдпрддрд╛ рдХрд╛ рд╢реБрдХреНрд░рд┐рдпрд╛ред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдкреБрдирдГ рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

@marimuthum17 , @zuschy
рдЕрд░реЗ рдирд┐рд░реНрджреЗрд╢ рдЕрдм рддрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛:

рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рд░реВрдЯ рд╕реЗ рдорд╛рд░реНрдХрд░ рдХреЛ рдбреНрд░реИрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд░реВрдЯ рдореЗрдВ рдорд╛рд░реНрдХрд░ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рддреЛ рдбреНрд░реИрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдорд╛рд░реНрдХрд░ рд╡рд╛рдкрд╕ рдЕрдкрдиреЗ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдкрд░ рдХреВрдж рдЬрд╛рддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ this.vc.updateDirections()) рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдШрдЯрдХ рдореЗрдВ рдореВрд▓ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдореИрдВрдиреЗ рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ "directions_changed" рдХреЛ рд╕реБрдирд╛ред

рдореИрдВрдиреЗ рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ @Output рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдореВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ @Input рдФрд░ @Output
рдореИрдВрдиреЗ рд╢реНрд░реЛрддрд╛ рдХреЛ рдЙрд╕ рдШрдЯрдХ рдореЗрдВ ngOnInit рдореЗрдВ рд░рдЦрдиреЗ рдХреА рднреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╣рд╛рдВ directionsDisplay рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ .addListener рдореЗрдВ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ

рдФрд░ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдорд╛рд░реНрдХрд░ рдШрд╕реАрдЯрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЗрд░рд╛ рд╡рд┐рдЪрд╛рд░ рдерд╛ рдХрд┐ рджрд┐рд╢рд╛-рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рдПрдХ рд╕реНрд╡рд┐рдЪ рдХреЗрд╕ рдмрдирд╛рдпрд╛ рдЬрд╛рдП рдФрд░ рдпрд╣ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ requestOrigin рдореВрд▓/рдЧрдВрддрд╡реНрдп рд╕реЗ рдореЗрд▓ рдЦрд╛ рд░рд╣рд╛ рд╣реИ рдпрд╛ рд╡реЗрдкреНрд╡рд╛рдЗрдВрдЯ рдореЗрдВ рд╕реЗ 1

рдпреЗ рд░рд╣рд╛ рдореЗрд░рд╛ рдХреЛрдб

рдЖрджреЗрд╢

export class DirectionsMapDirective {
    // get variables from map.component
    @Input() origin;
    @Input() destination;
    @Input() waypoints;
    @Input() waypointCnt;
    @Input() directionsDisplay;

    constructor (private gmapsApi: GoogleMapsAPIWrapper) {}

    // updateDirections has 2 optional parameters. gets called in map.component
    updateDirections(directionsDisplay, o?, d?){
        this.gmapsApi.getNativeMap().then(map => {
            var directionsService = new google.maps.DirectionsService;
            directionsDisplay.addListener('directions_changed', function() {
                //this.vc.computeTotalDistance(this.directionsDisplay.getDirections());

                if(directionsDisplay && directionsDisplay.dragResult){
                    let requestOrigin = directionsDisplay.dragResult.request.origin;
                    let requestDestination = directionsDisplay.dragResult.request.destination;
                    console.log(this.origin)
                    if(this.origin && (requestOrigin.lat.toString() == this.origin.latitude && requestOrigin.lng.toString() == this.origin.longitude)){
                        console.log('if?');
                        let temp_lat = requestDestination.lat.toString();
                        let temp_lng = requestDestination.lng.toString();
                        this.origin.latitude = temp_lat;
                        this.origin.longitude = temp_lng;
                        this.vc.updateDirections(directionsDisplay);
                    }
                }
                console.log(directionsDisplay);
            });


            //if origin / destination are undefined use value from optional parameters.
            directionsDisplay.setMap(map);
            if(!this.destination && d) {
                this.destination = d;
            }
            if(!this.origin && o) {
                this.origin = o;
            }

            // give the route the data, travel mode is driving bc users should plan a camping/ roadtrip.
            directionsService.route({
                origin: {lat: this.origin.latitude, lng: this.origin.longitude},
                destination: {lat: this.destination.latitude, lng: this.destination.longitude},
                waypoints: this.waypoints,
                optimizeWaypoints: true,
                travelMode: 'DRIVING'
            }, function(response, status) {
                console.log(status);
                if(status == 'OK'){
                    console.log('new route created')
                    var legs = response.routes[0].legs;
                    for (var i = 0; i < legs.length; i++) {
                        let inputFieldStart = document.getElementById('start') as HTMLInputElement;
                        let inputFieldDestination = document.getElementById('destination') as HTMLInputElement;
                        if(inputFieldStart.value == ''){
                            inputFieldStart.value = legs[i].start_address;
                        }
                        if(inputFieldDestination.value == ''){
                            inputFieldDestination.value = legs[i].end_address;
                        }
                    }
                    if (status === 'OK') {
                        directionsDisplay.setDirections(response);
                    } else {
                        window.alert('Directions request failed due to ' + status);
                    }
                }else{
                    console.log('keine Route m├╢glich!')
                }
            });

            //function for displaying the travel distance
            function computeTotalDistance(result) {
                var total = 0;
                var myroute = result.routes[0];
                for (var i = 0; i < myroute.legs.length; i++) {
                    total += myroute.legs[i].distance.value;
                }
                total = total / 1000;
                document.getElementById('trip_length').innerHTML = 'The trip is <span id="trip_length_nr">' +total + '</span>km long.';
            }
        });
    }
}

рдЕрд╡рдпрд╡:

рдпрд╣рд╛рдБ рдореИрдВ рдореВрд▓ рд░реВрдк рд╕реЗ this.vc.updateDirections(this.directionsDisplay); рдХреЛ Mapclicked / Autocomplete рдкрд░ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдБ

рдЬрдм рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рд╢реНрд░реЛрддрд╛ рдХреЛ рдЗрд╕ рддрд░рд╣ рдЖрдЬрдорд╛рдпрд╛: (рдкрд╣рд▓рд╛ рдЕрдЧрд░ рдПрдбрд▓рд┐рд╕реНрдЯрд░ рджрд┐рд╢рд╛-рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдмрд╛рдж рдкреНрд░рджрд░реНрд╢рд┐рдд = рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд)

ngOnInit() {


        this.searchControl = new FormControl();

        this.setCurrentPosition();

        this.mapsAPILoader.load().then(() => {
            this.geocoder = new google.maps.Geocoder;
            this.directionsDisplay = new google.maps.DirectionsRenderer({draggable: true});
            this.directionsDisplay.addListener('directions_changed', function() {
                //directionsDisplay = undefined?????
                if(this.directionsDisplay && this.directionsDisplay.dragResult){
                    let requestOrigin = this.directionsDisplay.dragResult.request.origin;
                    let requestDestination = this.directionsDisplay.dragResult.request.destination;
                    console.log(this.origin)
                    if(this.origin && (requestOrigin.lat.toString() == this.origin.latitude && requestOrigin.lng.toString() == this.origin.longitude)){
                        console.log('if?');
                        let temp_lat = requestDestination.lat.toString();
                        let temp_lng = requestDestination.lng.toString();
                        this.origin.latitude = temp_lat;
                        this.origin.longitude = temp_lng;
                        this.vc.updateDirections(this.directionsDisplay);
                    }
                }
                console.log(this.directionsDisplay);
            });
            let autocomplete = new google.maps.places.Autocomplete(this.OriginSearchElementRef.nativeElement, {
                types: ["address"]
            });
            let autocomplete2 = new google.maps.places.Autocomplete(this.DestinationSearchElementRef.nativeElement, {
                types: ["address"]
            });
            let autocomplete3 = new google.maps.places.Autocomplete(this.WaypointSearchElementRef.nativeElement, {
                types: ["address"]
            });

            autocomplete.addListener("place_changed", () => {
                this.addAutocomplete(autocomplete, 'origin');
            });
            autocomplete2.addListener("place_changed", () => {
                this.addAutocomplete(autocomplete2, 'destination');
                this.vc.updateDirections(this.directionsDisplay);
            });
            autocomplete3.addListener("place_changed", () => {
                this.addAutocomplete(autocomplete3, 'waypoint');
                this.vc.updateDirections(this.directionsDisplay);
            });

        });

    }

рдкреНрд░рд╢реНрди:

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕реВрдЪреА рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд░рд╣рд╛ рд╣реИред рдореИрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЬреЛрдбрд╝реЗ рдпрд╛ рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рдкрд░ рдорд╛рд░реНрдХрд░ рдмрдирд╛рдиреЗ рдФрд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП ngFor рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдХреНрдпрд╛ рдХреЛрдИ рдРрд╕рд╛ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдореИрдВ рджрд┐рд╢рд╛рдУрдВ рдХреЛ рд╡рд┐рд╢реЗрд╖ рдорд╛рд░реНрдХрд░реЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рдЬрдм рдорд╛рд░реНрдХрд░ рдХреЛ рдорд╛рдирдЪрд┐рддреНрд░ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рджрд┐рд╢рд╛рдУрдВ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддрд╛ рд╣реВрдВ?

рдореВрд▓ рд░реВрдк рд╕реЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рд╡реЗ рдРрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдорд╛рд░реНрдХрд░ рд╕реНрдерд╛рди рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдорд╛рдирдЪрд┐рддреНрд░ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдЬрдм рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕рд╕реЗ рдЬреБрдбрд╝реЗ рдорд╛рд░реНрдХрд░ рдФрд░ рдирд┐рд░реНрджреЗрд╢ рдорд╛рдирдЪрд┐рддреНрд░ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рдПрдВред

рдореИрдВ рд╡реЙрдЪрдкреЛрдЬрд┐рд╢рди рдХреЗ рд╕рд╛рде рдпреВрдЬрд░ рдХреА рд▓реЛрдХреЗрд╢рди рднреА рджреЗрдЦрддрд╛ рд╣реВрдВред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдорд╛рд░реНрдХрд░ рд╕реНрдерд┐рддрд┐ рдЕрджреНрдпрддрди рдХреЗ рд╕рд╛рде-рд╕рд╛рде рджрд┐рд╢рд╛-рдирд┐рд░реНрджреЗрд╢ рднреА рдЪрд╛рд╣рддреЗ рд╣реИрдВред

@davidpestana рдЗрд╕ рддрд░рд╣ рдХреЗ рд╢рд╛рдирджрд╛рд░ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж ... рдореИрдВрдиреЗ рдмреБрдирд┐рдпрд╛рджреА рдирд┐рд░реНрджреЗрд╢ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ рддреНрд░реБрдЯрд┐ рджреЗ рд░рд╣рд╛ рд╣реИ "ZERO_RESULTS рдХреЗ рдХрд╛рд░рдг рджрд┐рд╢рд╛ рдЕрдиреБрд░реЛрдз рд╡рд┐рдлрд▓" рдХреГрдкрдпрд╛ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдореЗрд░реА рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдореБрдЭреЗ рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдЬрд╛рдВрдЪреЗрдВ:

https://github.com/SebastianM/angular-google-maps/issues/985

рдХреЛрдб рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдЧрд▓рдд рдирд╣реАрдВ рд╣реИред
рдХреГрдкрдпрд╛ рдЬрд╛рдВрдЪреЗрдВ, рдЖрдкрдиреЗ рдПрдкреАрдЖрдИ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдЕрдкрдиреА Google рдорд╛рдирдЪрд┐рддреНрд░ рдХреБрдВрдЬреА рдЬреЛрдбрд╝ рджреА рд╣реИред рдпрд╛ рдЧреВрдЧрд▓ рдбреЙрдХреНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣рд░ рджрд┐рди рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реАрдорд╛ рдЕрдиреБрд░реЛрдз рд╣реИред

@ marimuthum17 рдЖрдк рд╕рд╣реА рд╣реИрдВ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рдХреБрдЫ рднреА рдЧрд▓рдд рдирд╣реАрдВ рдерд╛ ... рдЕрд╕рд▓ рдореЗрдВ рдореБрдЭреЗ рдЬрдЧрд╣ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдпрд╛рдж рдЖрдпрд╛ ... рдореИрдВ рдЬрдЧрд╣ рдЖрдИрдбреА рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛, рд╡рд╣ рдореБрджреНрджрд╛ рдерд╛ ...

@MartiniHenry1988 рдЖрдкрдХреЛ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк Google рдХреА рджрд┐рд╢рд╛ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ .... рдХреГрдкрдпрд╛ рдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП @ marimuthum17 рдХреА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреЗрдВред

рдХреНрдпрд╛ рдХреЛрдИ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдЖ ?, рдореБрдЭреЗ рд▓рд╛рдЗрди directionsDisplay.setMap(map); рдкрд░ рдиреАрдЪреЗ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ

Argument of type 'GoogleMap' is not assignable to parameter of type 'Map'

@kildareflare @amitdahan рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рднреА рдЗрд╕реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рд╣реЛрдЧрд╛, рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХрднреА рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛?

рдореИрдВ рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред @chaoranxie рдХреНрдпрд╛ рдЖрдкрдХреЛ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ рд╣реИ?

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╖рдп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдереЛрдбрд╝рд╛ рдкреБрд░рд╛рдирд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ рдФрд░ рдпрд╣ рддреНрд░реБрдЯрд┐ рд╣реИ:
'рдореВрд▓' рд╕реЗ рдмрдВрдзреЗ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ 'sebm-google-map-directions' рдХреА рдЬреНрдЮрд╛рдд рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИред
рд▓реЗрдХрд┐рди рдКрдкрд░ рдПрдХ рд╕рдорд╛рдзрд╛рди рджрд┐рдпрд╛ рдФрд░ рдореБрдЭреЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдХреНрдпрд╛ рдХреЛрдИ рдореБрдЭреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗ рд╕рдХрддрд╛ рд╣реИ?

рдореЗрд░реА рдЦрд░рд╛рдм рдЗрдВрдЧреНрд▓рд┐рд╢ рдХреЗ рд▓рд┐рдП рдорд╛рдлрд╝ рдХреАрдЬрд┐рдпреЗ

@ рдлреИрдмрд┐рдпрди-рдардЧ рдЖрдк рдХреЛрдгреАрдп рдХреЗ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдореИрдВ 4* рдкрд░ рд╣реВрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдЪрдпрдирдХрд░реНрддрд╛ рд╕реЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдмрджрд▓реЗрдВ: 'sebm-google-map-directions' рд╕реЗ рдЪрдпрдирдХрд░реНрддрд╛ ['sebm-google-map-directions'] рдлрд┐рд░ HTML рдореЗрдВ рдЗрд╕реЗ рдПрдХ рддрддреНрд╡ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рддрддреНрд╡ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ (рдЙрджрд╛рд╣рд░рдг

рдореБрдЭреЗ рд╕реНрд╡рдд: рдкреВрд░реНрдг рдИрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рдЖ рд░рд╣реА рд╣реИрдВ рдФрд░ рд╕рдВрднрд╡рддрдГ рдЗрд╕реЗ рдПрдХ рдмрдЯрди рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗрдВрдЧреЗред ( @ marimuthum17 рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ - рдЬреЛ рдЙрдирдХреА рд╕рд╛рдЗрдЯ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрджреНрджрд╛ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╣реИред

[рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ]
рдЗрд╕реЗ рдмрджрд▓реЗрдВ:
рдЬрдЧрд╣ рджреЗрдВ: google.maps.places.PlaceResult = autocomplete.getPlace ();
рдЗрд╕рдХреЗ рд▓рд┐рдП:
рдХреЙрдиреНрд╕реНрдЯ рдкреНрд▓реЗрд╕ = рдСрдЯреЛрдХрдВрдкреНрд▓реАрдЯред рдЧреЗрдЯрдкреНрд▓реЗрд╕ ();

@davidpestana @marimuthum17 рдореИрдВрдиреЗ рдЙрдкрд░реЛрдХреНрдд рдПрдХ рдХрд┐рдпрд╛ рд╣реИред рдЕрдм рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд╛рди рдФрд░ рдЪрдпрдирд┐рдд рдЧрдВрддрд╡реНрдп рдХреЗ рдмреАрдЪ рдХреА рджрд┐рд╢рд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдорд╛рд░реНрдХрд░ рдЖрдЗрдХрди рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ! рдЙрд╕рдХреЛ рдХреИрд╕реЗ рдХрд░реЗ?
рджрд┐рд╢рд╛ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдХрд╕реНрдЯрдо рдорд╛рд░реНрдХрд░ рдХреИрд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ?

@davidpestana
рдЖрдк рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЖрдпрд╛рдд { CustomMapDirective } рдХреЛ '[рдЖрдкрдХрд╛ рдорд╛рд░реНрдЧ рдирд┐рд░реНрджреЗрд╢ рдлрд╝реЛрд▓реНрдбрд░]/google-map.directive' рд╕реЗ рджреЗрддреЗ рд╣реИрдВ; рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдореБрдЭреЗ рдХреБрдЫ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ??

рдПрдХ рддреНрд░реБрдЯрд┐ рд▓реЗрдЦрди рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛: рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рд╕рдВрдкрддреНрддрд┐ 'рдореВрд▓' рд╕реЗрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

@ViewChild(DirectionsMapDirective) vc: DirectionsMapDirective;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдореВрд▓: рдХреЛрдИ рднреА;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЧрдВрддрд╡реНрдп: рдХреЛрдИ рднреА;
рдирд┐рд░реНрдорд╛рддрд╛ (
рдирд┐рдЬреА рдореЛрдбрд▓ рд╕реЗрд╡рд╛: NgbModal,

private mapsAPILoader: MapsAPILoader,
private ngZone: NgZone,
private gmapsApi: GoogleMapsAPIWrapper,
private _elementRef : ElementRef

) {}

рдкрд╛рд╕рд┐рдВрдЧ рдорд╛рди
this.vc.origin = {рджреЗрд╢рд╛рдВрддрд░: ренрен.рейрейрей, рдЕрдХреНрд╖рд╛рдВрд╢: резреи.реиреиреиреи};
this.vc.destination = { рджреЗрд╢рд╛рдВрддрд░: репреж.рейрезрез, рдЕрдХреНрд╖рд╛рдВрд╢: реирео.резреирей};
this.vc.updateDirections ();

рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдзрдиреНрдпрд╡рд╛рджред

рдореЗрд░реЗ рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ рджреЛ рдмрд┐рдВрджреБ рд╣реИрдВ, рдореИрдВ рдЙрдирдХреЗ рдмреАрдЪ рджрд┐рд╢рд╛ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рдШрдЯрдХ.ts

'@angular/core' рд╕реЗ {рдШрдЯрдХ} рдЖрдпрд╛рдд рдХрд░реЗрдВ;
'@agm/core' рд╕реЗ {MouseEvent} рдЖрдпрд╛рдд рдХрд░реЗрдВ;

@рдЕрд╡рдпрд╡({
рдЪрдпрдирдХрд░реНрддрд╛: 'рдРрдк-рд░реВрдЯ',
templateUrl: './app.component.html',
рд╕реНрдЯрд╛рдЗрд▓ рдпреВрдЖрд░рдПрд▓: [ './app.component.css' ]
})
рдирд┐рд░реНрдпрд╛рдд рд╡рд░реНрдЧ рдРрдкрдХрдВрдкреЛрдиреЗрдВрдЯ {
рдЬрд╝реВрдо: рд╕рдВрдЦреНрдпрд╛ = 8;

рдЕрдХреНрд╖рд╛рдВрд╢: рд╕рдВрдЦреНрдпрд╛ = релрез.ремренрейреорелрео;
рдПрд▓рдПрдирдЬреА: рд╕рдВрдЦреНрдпрд╛ = 7.815982;

рдорд╛рд░реНрдХрд░: рдорд╛рд░реНрдХрд░ [] = [
{
рдЕрдХреНрд╖рд╛рдВрд╢: 51.673858,
рдПрд▓рдПрдирдЬреА: 7.815982,
рд▓реЗрдмрд▓: 'рдП',
рдЦреАрдВрдЪрдиреЗ рдпреЛрдЧреНрдп: рд╕рдЪ
},
{
рдЕрдХреНрд╖рд╛рдВрд╢: 51.373858,
рдПрд▓рдПрдирдЬреА: 7.215982,
рд▓реЗрдмрд▓: 'рдмреА',
рдЦреАрдВрдЪрдиреЗ рдпреЛрдЧреНрдп: рдЭреВрдард╛
}
]

}

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

@davidpestana рдЬрдм рдореИрдВ рдЖрдкрдХреЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛
"'рдореВрд▓' рд╕реЗ рдмрдВрдзреЗ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ 'sebm-google-map-directions' рдХреА рдЬреНрдЮрд╛рдд рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ"

  1. рдпрджрд┐ 'sebm-google-map-directions' рдПрдХ рдХреЛрдгреАрдп рдШрдЯрдХ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ 'рдореВрд▓' рдЗрдирдкреБрдЯ рд╣реИ, рддреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред
  2. рдпрджрд┐ 'sebm-google-map-directions' рдПрдХ рд╡реЗрдм рдШрдЯрдХ рд╣реИ рддреЛ рдЗрд╕ рд╕рдВрджреЗрд╢ рдХреЛ рджрдмрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдШрдЯрдХ рдХреЗ '@NgModule.schemas' рдореЗрдВ 'CUSTOM_ELEMENTS_SCHEMA' рдЬреЛрдбрд╝реЗрдВред
  3. рдХрд┐рд╕реА рднреА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдШрдЯрдХ рдХреЗ '@NgModule.schemas' рдореЗрдВ 'NO_ERRORS_SCHEMA' рдЬреЛрдбрд╝реЗрдВред ("

@davidpestana рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рд╡реЗрдкреЙрдЗрдВрдЯ рдХреЛ API, LatLng, рдпрд╛ рдЬреИрд╕реЗ рд╕реНрдерд╛рдиреЛрдВ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

let waypoints = [
    {location: {placeId: place_id}}
];

https://developers.google.com/maps/documentation/javascript/directions#DirectionsRequests

рдпрд╣ рд╕рдм рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛, рдзрдиреНрдпрд╡рд╛рдж! рдХреНрдпрд╛ рдпрд╣ рдПрдЬреАрдПрдо/рдХреЛрд░ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рд▓рд╛рдпрдХ рд╣реЛрдЧрд╛ рдпрджрд┐ рдпрд╣ рдЕрдиреНрдп рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рдорд╛рди рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдерд╛?

рдХреНрдпрд╛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рд╣реИ?

рдХреНрдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ origin рдФрд░ destination рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?

рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЕрдиреБрдорд╛рди _рд╕рдордп рдФрд░ рджреВрд░реА_ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЛрдб рдиреАрдЪреЗ рдмреНрд▓реЙрдХ рд╣реИред рдпрд╣ рдПрдХ рдЕрдирд╛рдо рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЬрд╣рд╛рдВ рдЗрд╕рдХреА рдкрд╣реБрдВрдЪ рдХрдХреНрд╖рд╛ рдХреЗ this.xyz рдЪрд░ рдХреЛ рдкрдврд╝рдиреЗ/рд▓рд┐рдЦрдиреЗ рддрдХ рдирд╣реАрдВ рд╣реИред
}, function(response: any, status: any) {

рдореИрдВ рдиреАрдЪреЗ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдФрд░ рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рдпрд╣ es6 рддреАрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдореВрд▓ рдирд┐рд╡рд╛рд╕реА рд╣реИрдВред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдпрд╣рд╛рдБ: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
}, (response: any, status: any) => {

рдирдорд╕реНрддреЗ,
рдХреНрдпрд╛ рдХреЛрдИ рдореБрдЭреЗ рджрд┐рдЦрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рджрд┐рд╢рд╛-рдкрде рдХреЗ рдорд╛рд░реНрдЧ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрд▓рд┐рдХ рдкреНрд░рд╛рд░рдВрдн рд╕реНрдерд╛рди рдЬреИрд╕реЗ рдИрд╡реЗрдВрдЯ рдХреИрд╕реЗ рдмрдирд╛рдПрдВред

рдзрдиреНрдпрд╡рд╛рдж

рд╣рд╛рдп @ рдбреЗрд╡рд┐рдбрдкреЗрд╕реНрдЯрд╛рдирд╛ , @ рдорд╛рд░реАрдореБрдереБрдо 17 , @ рдУрдХрд╛рдиреЛрдХ

рдореБрдЭреЗ рдПрдХ рдирдИ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ рдЬреИрд╕реЗ, рдЬрдм рдореИрдВ рдкрд╣рд▓реА рдмрд╛рд░ рдорд╛рд░реНрдЧ рдЦреАрдВрдЪрддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЕрдЧрд░ рдореИрдВ рджреВрд╕рд░рд╛ рдорд╛рд░реНрдЧ рдЦреАрдВрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдкрд╣рд▓рд╛ рд░рд╛рд╕реНрддрд╛ рд╕рд╛рдл рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдирдП рдорд╛рд░реНрдЧ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрди рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рд╣реЛ рд░рд╣реА рд╣реИред

рдпрд╣рд╛рдБ рдореЗрд░рд╛ рдХреЛрдб рд╣реИ,

рдШрдЯрдХ.рдЯреАрдПрд╕,

showDirections( ) { if ('geolocation' in navigator) { navigator.geolocation.getCurrentPosition((position) => { this.org = { latitude: position.coords.latitude, longitude: position.coords.longitude}; this.dst = {longitude: this.cycle.longitude, latitude: this.cycle.latitude}; console.log('Src ' + this.org.latitude ); console.log('Dst' + this.dst.latitude ); }); } }

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдШрдЯрдХ рдХрд╛ рдПрдЪрдЯреАрдПрдордПрд▓,
<agm-map [latitude]="lat" [longitude]="lng" [zoom]="zoom"> <appCycleDirection *ngIf="dst !== undefined" [org]="org" [dst]="dst"></appCycleDirection> <agm-marker [style.height.px]="map.offsetHeight" [latitude]="lat" [longitude]="lng"></agm-marker> </agm-map>

рдирд┐рд░реНрджреЗрд╢ рдХреЛрдб рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ,

````
'@angular/core' рд╕реЗ {Directive, Input, OnInit} рдЖрдпрд╛рдд рдХрд░реЗрдВ;
'@agm/core' рд╕реЗ {GoogleMapsAPIWrapper} рдЖрдпрд╛рдд рдХрд░реЗрдВ;

Google рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ: рдХреЛрдИ рднреА;
@рдирд┐рд░реНрджреЗрд╢ ({
// tslint: рдЕрдХреНрд╖рдо-рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐: рдирд┐рд░реНрджреЗрд╢-рдЪрдпрдирдХрд░реНрддрд╛
рдЪрдпрдирдХрд░реНрддрд╛: 'рдРрдкрд╕рд╛рдЗрдХрд▓ рдбрд╛рдпрд░реЗрдХреНрд╢рди'
})
рдирд┐рд░реНрдпрд╛рдд рд╡рд░реНрдЧ CycleDirective OnInit рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ {

@ рдЗрдирдкреБрдЯ () рд╕рдВрдЧрдарди;
@ рдЗрдирдкреБрдЯ () рдбреАрдПрд╕рдЯреА;
@Input () рдореВрд▓ рд╕реНрдерд╛рди: рдХреЛрдИ рднреА;
@Input () рдбреЗрд╕реНрдЯрд┐рдиреЗрд╢рди рдкреНрд▓реЗрд╕ рдЖрдИрдбреА: рдХреЛрдИ рднреА;
@Input() рд╡реЗрдкреЙрдЗрдВрдЯреНрд╕: рдХреЛрдИ рднреА;
@Input () рджрд┐рд╢рд╛рдПрдБ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ: рдХреЛрдИ рднреА;
@ рдЗрдирдкреБрдЯ () рдЕрдиреБрдорд╛рдирд┐рдд рд╕рдордп: рдХреЛрдИ рднреА;
@ рдЗрдирдкреБрдЯ () рдЕрдиреБрдорд╛рдирд┐рдд рджреВрд░реА: рдХреЛрдИ рднреА;
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ (рдирд┐рдЬреА gmapsApi: GoogleMapsAPIWrapper) { }

рдПрдирдЬреАрдСрдирдЗрдирд┐рдЯ () {
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ ('рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ');
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ (this.org);
this.gmapsApi.getNativeMap ()ред рддрдм (рдорд╛рдирдЪрд┐рддреНрд░ => {
рдХрд╛рд╕реНрдЯ рджрд┐рд╢рд╛-рдирд┐рд░реНрджреЗрд╢ рд╕реЗрд╡рд╛ = рдирдпрд╛ google.maps.DirectionsService;
рдХрд╛рд╕реНрдЯ рджрд┐рд╢рд╛-рдирд┐рд░реНрджреЗрд╢ рдбрд┐рд╕реНрдкреНрд▓реЗ = рдирдпрд╛ google.maps.DirectionsRenderer;
рджрд┐рд╢рд╛-рдирд┐рд░реНрджреЗрд╢ рдбрд┐рд╕реНрдкреНрд▓реЗ.рд╕реЗрдЯрдореИрдк (рдорд╛рдирдЪрд┐рддреНрд░);
рджрд┐рд╢рд╛-рдирд┐рд░реНрджреЗрд╢ рд╕реЗрд╡рд╛.рдорд╛рд░реНрдЧ({
рдореВрд▓: {lat: this.org.latitude, lng: this.org.longitude},
рдЧрдВрддрд╡реНрдп: {lat: this.dst.latitude, lng: this.dst.longitude},
рдорд╛рд░реНрдЧ рдмрд┐рдВрджреБ: [],
рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рд╡реЗрдкреЙрдЗрдВрдЯреНрд╕: рд╕рдЪ,
рдпрд╛рддреНрд░рд╛ рдореЛрдб: 'рдЯреНрд░рд╛рдВрдЬрд┐рдЯ'
}, рдлрд╝рдВрдХреНрд╢рди (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛, рд╕реНрдерд┐рддрд┐) {
рдЕрдЧрд░ (рд╕реНрдерд┐рддрд┐ === 'рдареАрдХ рд╣реИ') {
рджрд┐рд╢рд╛-рдирд┐рд░реНрджреЗрд╢ рдбрд┐рд╕реНрдкреНрд▓реЗ.рд╕реЗрдЯрджрд┐рд╢рд╛-рдирд┐рд░реНрджреЗрд╢ (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛);
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛);
} рдЕрдиреНрдпрдерд╛ {
window.alert ('рджрд┐рд╢рд╛ рдЕрдиреБрд░реЛрдз рд╡рд┐рдлрд▓' + рд╕реНрдерд┐рддрд┐ рдХреЗ рдХрд╛рд░рдг);
}
});

});

}

}

```

рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ, рдирдпрд╛ рдорд╛рд░реНрдЧ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдореИрдВ рдкрд╣рд▓реЗ рдорд╛рд░реНрдЧ рдХреЛ рдЧрд╛рдпрдм рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдирдорд╕реНрддреЗ, рдХреНрдпрд╛ рд╣рдо рд╕рдбрд╝рдХ рдкрд░ рдПрдХ рдХреНрд▓рд┐рдХ рдЗрд╡реЗрдВрдЯ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ?
рдзрдиреНрдпрд╡рд╛рдж

рдореИрдВрдиреЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрд╕реА рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдмрд╕ рдПрдХ рддреНрд╡рд░рд┐рдд рдкреНрд░рд╢реНрди, рдХреНрдпрд╛ рд╡реЗрдЬрд╝, рдЙрдмреЗрд░ рдпрд╛ рд▓рд┐рдлрд╝реНрдЯ рдбреНрд░рд╛рдЗрд╡рд┐рдВрдЧ рдореИрдкреНрд╕ рдХреА рддрд░рд╣ рд╕рдбрд╝рдХ рдкрд░ рдЯреНрд░реИрдлрд╝рд┐рдХ (рд▓рд╛рдЗрди рдкрд░ рд▓рд╛рд▓, рдкреАрд▓реЗ рдпрд╛ рдиреАрд▓реЗ рдЦрдВрдб) рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?
рдЖрдкрдХреА рдорджрдж рдЕрддреНрдпрдзрд┐рдХ рд╕рд░рд╛рд╣рдиреАрдп рд╣реИ

рдЗрд╕ рд╡реНрдпрдХреНрддрд┐ рдиреЗ рдЗрд╕ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдЖрдЬрдорд╛рдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреГрдкрдпрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕реЗ рдПрдЬреАрдПрдо рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

https://github.com/explooosion/Agm-Direction

routewithagm

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

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

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

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

shedar picture shedar  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

alexweber picture alexweber  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

nthonymiller picture nthonymiller  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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