Angular-google-maps: ์งˆ๋ฌธ: MarkerManager.getNativeMarker()

์— ๋งŒ๋“  2016๋…„ 09์›” 29์ผ  ยท  4์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: SebastianM/angular-google-maps

์•ˆ๋…•ํ•˜์„ธ์š” @SebastianM์ž…๋‹ˆ๋‹ค. ๋„ค์ดํ‹ฐ๋ธŒ ๋งˆ์ปค๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด SebmGoogleMapMarker์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์–ป๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์˜ˆ๋ฅผ ๋“ค์–ด:

this.markerManager.getNativeMarker(INSTANCE_OF_SebmGoogleMapMarker).then((nativeMarker) => {
  console.log('YEAH marker is here: ' + nativeMarker);
})

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์†”๋ฃจ์…˜์— ๊ด€์‹ฌ์ด ์žˆ๋Š” ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ ์ƒˆ ์ง€์‹œ๋ฌธ์„ ์ƒ์„ฑํ•˜๊ณ  sebm-google-map ๊ตฌ์„ฑ์š”์†Œ ๋‚ด๋ถ€์— ์ค‘์ฒฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. MarkerManager ๊ฐœ์ฒด๋ฅผ ์ด ๊ตฌ์„ฑ ์š”์†Œ์— ์‚ฝ์ž…ํ•œ ๋‹ค์Œ Output ์†์„ฑ๊ณผ ํ•จ๊ป˜ ๋‚ด๋ณด๋‚ด์–ด ๋ถ€๋ชจ ๊ตฌ์„ฑ ์š”์†Œ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

<my-parent-component>
    <sebm-google-map>
        <get-map-objects (markerManager)="setMarkerManager($event)">
            <sebm-google-map-marker ... ></sebm-google-map-marker>
        </get-map-objects>
    </sebm-google-map>
</my-parent-component>

๊ทธ๋Ÿฐ ๋‹ค์Œ์ง€์‹œ๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

import { Directive, Output, EventEmitter, AfterViewInit, ContentChildren, QueryList } from '@angular/core';
import { GoogleMapsAPIWrapper, MarkerManager, SebmGoogleMapMarker } from 'angular2-google-maps/core';

@Directive({
  selector: 'get-map-objects',
})
export class GetMapObjectsDirective implements AfterViewInit {

  /**
   * Get native map object
   */
  private _map: any = null;
  @Output('map') mapChanged: EventEmitter<any> = new EventEmitter<any>();
  set map(val){
    this._map = val;
    this.mapChanged.emit(val);
  }
  get map(){
    return this._map;
  }

  /**
   * Get marker manager
   */
  private _markerManager: any = null;
  @Output('markerManager') markerManagerChanged: EventEmitter<MarkerManager> = new EventEmitter<MarkerManager>();
  set markerManager(val){
    this._markerManager = val;
    this.markerManagerChanged.emit(val);
  }
  get markerManager(){
    return this._markerManager;
  }

  /**
   * Get sebm markers
   */
  private _markers: any = null;
  @Output('markers') markersChanged: EventEmitter<SebmGoogleMapMarker[]> = new EventEmitter<SebmGoogleMapMarker[]>();
  set markers(val){
    this._markers = val;
    this.markersChanged.emit(val);
  }
  get markers(){
    return this._markers;
  }
  @ContentChildren(SebmGoogleMapMarker) markerChildren: QueryList<SebmGoogleMapMarker>;

  constructor(
    private googleMapsWrapper: GoogleMapsAPIWrapper,
    private googleMarkerManager: MarkerManager
  ) { }

  ngAfterViewInit() {
    // get native map
    this.googleMapsWrapper.getNativeMap().then(map => {
      this.map = map;
    }, error => {
      throw error;
    })

    // get marker manager
    this.markerManager = this.googleMarkerManager;

    // get markers
    this.markerChildren.changes.subscribe(markers => {
      this.markers = markers._results;
    })
  }
}

๋งˆ์ง€๋ง‰์œผ๋กœ ์ƒ์œ„ ๊ตฌ์„ฑ ์š”์†Œ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งˆ์ปค ๊ด€๋ฆฌ์ž(๋ฐ ๋งˆ์ปค)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

setMarkerManager(markerManager: MarkerManager){
    this.markerManager = markerManager;
  }

  /**
   * Sets the markers, used by spidifier
   */
  setMarkers(markers: SebmGoogleMapMarker[]){
    this.markers = markers;
    for(let marker of markers){
      this.markerManager.getNativeMarker(marker).then(marker => {
        this.overlappingMarkerSpidifier.addMarker(marker);
      });
    }
  }

๋ชจ๋“  4 ๋Œ“๊ธ€

ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค

์†”๋ฃจ์…˜์— ๊ด€์‹ฌ์ด ์žˆ๋Š” ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ ์ƒˆ ์ง€์‹œ๋ฌธ์„ ์ƒ์„ฑํ•˜๊ณ  sebm-google-map ๊ตฌ์„ฑ์š”์†Œ ๋‚ด๋ถ€์— ์ค‘์ฒฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. MarkerManager ๊ฐœ์ฒด๋ฅผ ์ด ๊ตฌ์„ฑ ์š”์†Œ์— ์‚ฝ์ž…ํ•œ ๋‹ค์Œ Output ์†์„ฑ๊ณผ ํ•จ๊ป˜ ๋‚ด๋ณด๋‚ด์–ด ๋ถ€๋ชจ ๊ตฌ์„ฑ ์š”์†Œ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

<my-parent-component>
    <sebm-google-map>
        <get-map-objects (markerManager)="setMarkerManager($event)">
            <sebm-google-map-marker ... ></sebm-google-map-marker>
        </get-map-objects>
    </sebm-google-map>
</my-parent-component>

๊ทธ๋Ÿฐ ๋‹ค์Œ์ง€์‹œ๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

import { Directive, Output, EventEmitter, AfterViewInit, ContentChildren, QueryList } from '@angular/core';
import { GoogleMapsAPIWrapper, MarkerManager, SebmGoogleMapMarker } from 'angular2-google-maps/core';

@Directive({
  selector: 'get-map-objects',
})
export class GetMapObjectsDirective implements AfterViewInit {

  /**
   * Get native map object
   */
  private _map: any = null;
  @Output('map') mapChanged: EventEmitter<any> = new EventEmitter<any>();
  set map(val){
    this._map = val;
    this.mapChanged.emit(val);
  }
  get map(){
    return this._map;
  }

  /**
   * Get marker manager
   */
  private _markerManager: any = null;
  @Output('markerManager') markerManagerChanged: EventEmitter<MarkerManager> = new EventEmitter<MarkerManager>();
  set markerManager(val){
    this._markerManager = val;
    this.markerManagerChanged.emit(val);
  }
  get markerManager(){
    return this._markerManager;
  }

  /**
   * Get sebm markers
   */
  private _markers: any = null;
  @Output('markers') markersChanged: EventEmitter<SebmGoogleMapMarker[]> = new EventEmitter<SebmGoogleMapMarker[]>();
  set markers(val){
    this._markers = val;
    this.markersChanged.emit(val);
  }
  get markers(){
    return this._markers;
  }
  @ContentChildren(SebmGoogleMapMarker) markerChildren: QueryList<SebmGoogleMapMarker>;

  constructor(
    private googleMapsWrapper: GoogleMapsAPIWrapper,
    private googleMarkerManager: MarkerManager
  ) { }

  ngAfterViewInit() {
    // get native map
    this.googleMapsWrapper.getNativeMap().then(map => {
      this.map = map;
    }, error => {
      throw error;
    })

    // get marker manager
    this.markerManager = this.googleMarkerManager;

    // get markers
    this.markerChildren.changes.subscribe(markers => {
      this.markers = markers._results;
    })
  }
}

๋งˆ์ง€๋ง‰์œผ๋กœ ์ƒ์œ„ ๊ตฌ์„ฑ ์š”์†Œ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งˆ์ปค ๊ด€๋ฆฌ์ž(๋ฐ ๋งˆ์ปค)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

setMarkerManager(markerManager: MarkerManager){
    this.markerManager = markerManager;
  }

  /**
   * Sets the markers, used by spidifier
   */
  setMarkers(markers: SebmGoogleMapMarker[]){
    this.markers = markers;
    for(let marker of markers){
      this.markerManager.getNativeMarker(marker).then(marker => {
        this.overlappingMarkerSpidifier.addMarker(marker);
      });
    }
  }

์•ˆ๋…•ํ•˜์„ธ์š” @maxmumford
๋‚ด๊ฐ€ ์ •ํ™•ํžˆ ์›ํ•˜๋Š” ๊ฒƒ,
์ •๋ง ๊ณ ๋ง™์Šต๋‹ˆ๋‹ค.

@maxmumford
๋ฌธ์ œ๊ฐ€ ํ•˜๋‚˜ ๋” ์žˆ์Šต๋‹ˆ๋‹ค.
๋งˆ์ปค๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ๋•Œ ์ˆ˜๋™์œผ๋กœ ์ •๋ณด ์ฐฝ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
๊ทธ์— ๋Œ€ํ•œ ์˜ˆ์‹œ๋ฅผ ๋ณด๋‚ด์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰