Angular-google-maps: 마컀 ν΄λŸ¬μŠ€ν„° 러λ₯Ό μ‚¬μš©ν•˜λŠ” 방법?

에 λ§Œλ“  2016λ…„ 04μ›” 30일  Β·  76μ½”λ©˜νŠΈ  Β·  좜처: SebastianM/angular-google-maps

μ•ˆλ…•ν•˜μ„Έμš”, https://github.com/googlemaps/js-marker-clusterer λ˜λŠ” λ‹€λ₯Έ 마컀 ν΄λŸ¬μŠ€ν„° 러λ₯Ό μ‚¬μš©ν•˜λŠ” 것에 λŒ€ν•œ 포인터가 μžˆμŠ΅λ‹ˆκΉŒ? 감사!

discussion / question

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

@ siegerx3 μ†Œλ¦¬κ°€ 더 κ°„λ‹¨ν•©λ‹ˆλ‹€. λ¨Όμ € μ‚¬μš©μž μ •μ˜ ꡬ성 μš”μ†Œ λ˜λŠ” μ§€μ‹œλ¬Έμ„ λ§Œλ“­λ‹ˆλ‹€.

import { Directive } from '@angular/core';
import { GoogleMapsAPIWrapper } from 'angular2-google-maps/core';

@Directive({
  selector: 'custom-directive'
})
export class CustomMapDirective {
  constructor (private gmapsApi: GoogleMapsAPIWrapper) {
    this.gmapsApi.getNativeMap().then(map => {
      // map is the native google map object and the wrapper is the same instance as the one on the map
    });
  }
}

ν…œν”Œλ¦Ώμ΄ ν•„μš”ν•˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— μ§€μ‹œλ¬Έμ„ μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€. μ›ν•˜λŠ” 경우 ꡬ성 μš”μ†Œλ₯Ό μ‚¬μš©ν•˜κ³  지정할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ‚¬μš©μž μ •μ˜ ꡬ성 μš”μ†Œ / μ§€μ‹œλ¬Έμ„ μ‚¬μš©μ€‘μΈ ꡬ성 μš”μ†Œμ˜ directives μ„Ήμ…˜μ— μ§€μ •ν•΄μ•Όν•˜λŠ” 것은 λ‹Ήμ—°ν•©λ‹ˆλ‹€. 이제 ꡬ성 μš”μ†Œλ₯Ό 맡 μ•ˆμ— λ†“μœΌμ‹­μ‹œμ˜€.

<sebm-google-map>
  <!-- markers, info windows, etc -->

  <custom-directive></custom-directive>
</sebm-google-map>

Angular2 DIκ°€ μž‘λ™ν•˜λŠ” λ°©μ‹μœΌλ‘œ 인해 GoogleMapsAPIWrapper μ„œλΉ„μŠ€μ— λŒ€ν•œ κ³΅κΈ‰μžλ₯Ό μ§€μ •ν•˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— κ³΅κΈ‰μžλ₯Ό 찾을 λ•ŒκΉŒμ§€ ꡬ성 μš”μ†Œ 트리둜 μ΄λ™ν•©λ‹ˆλ‹€. 이 경우 ν•œ 단계 더 올라 κ°”μœΌλ©° sebm-google-map ꡬ성 μš”μ†Œμ— 제곡된 GoogleMapsAPIWrapperλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

λͺ¨λ“  76 λŒ“κΈ€

μ£„μ†‘ν•©λ‹ˆλ‹€, μ§€κΈˆ λ‹Ήμž₯ λ“œλ¦΄ μˆ˜μžˆλŠ” 쑰언이 μ—†μŠ΅λ‹ˆλ‹€

@SebastianM 지도 객체에 λŒ€ν•œ μ•‘μ„ΈμŠ€λ‘œ μˆ˜ν–‰ ν•  수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. μ—¬κΈ°λ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€ : https://github.com/SebastianM/angular2-google-maps/pull/311

아무도 μ‹€μ œλ‘œ 이것을 ν–ˆμŠ΅λ‹ˆκΉŒ? markerclusterer js 파일이 .getMap ()μ—μ„œ μ „λ‹¬ν•œμ§€λ„ 객체λ₯Ό μ’‹μ•„ν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

@AbdulTheProgrammer λ‚΄κ°€ μžˆμ—ˆλŠ”λ° , λ‚΄ κ°€μž₯ 큰 희망은 그것이 μž‘λ™ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆκΉŒ? 지도 μ§€μ‹œλ¬Έμ—μ„œ μ‚¬μš©ν•˜λŠ” 것과 λ™μΌν•œ GoggleMapsAPIWrapper μ„œλΉ„μŠ€ μΈμŠ€ν„΄μŠ€μ—μ„œ getMap ()을 호좜 ν•œ 것이 ν™•μ‹€ν•©λ‹ˆλ‹€. 이것이 ν˜„μž¬ κ°€μž₯ 큰 λ¬Έμ œμž…λ‹ˆλ‹€ ....

μ‚¬μš©μž 지정 ꡬ성 μš”μ†Œλ₯Ό μ‚¬μš©ν•˜μ—¬μ΄λ₯Ό sebm-google-map μ•ˆμ— 포함 μ‹œμΌ°μŠ΅λ‹ˆλ‹€. GoogleMapsAPIWrapper 및 nativeMap을 μ‚¬μš©ν•©λ‹ˆλ‹€.

Google지도 μžλ°” 슀크립트 API (window.google.maps)λ₯Ό μ‚¬μš©ν•˜μ—¬ 마컀λ₯Ό μˆ˜λ™μœΌλ‘œ μΆ”κ°€ ν•œ λ‹€μŒ MarkerClustererλ₯Ό λ§Œλ“­λ‹ˆλ‹€.

λ„μ›€μ΄λ˜κΈ°λ₯Ό λ°”λžλ‹ˆλ‹€.

@ricardojbertolin μ„Έλ°”μŠ€μ°¬μ΄ μ—¬κΈ° # 311μ—μ„œ μ§€μ ν•œ κ²ƒμ²˜λŸΌ λ„μ›€μ΄λ©λ‹ˆλ‹€.지도 λ‚΄λΆ€μ˜ μ‚¬μš©μž 지정 ꡬ성 μš”μ†ŒλŠ” μ •ν™•νžˆ λ„€μ΄ν‹°λΈŒμ§€λ„ κ°œμ²΄μ— μ•‘μ„ΈμŠ€ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€. λ¬Όλ‘  κ΄€λ¦¬μž μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•˜μ—¬ 마컀λ₯Ό μΆ”κ°€ν•˜λŠ” 더 쒋은 방법이 μžˆμ–΄μ•Όν•©λ‹ˆλ‹€. js APIλ₯Ό 톡해 μˆ˜λ™μœΌλ‘œ μˆ˜ν–‰ν•˜λŠ” 것과 λ°˜λŒ€ ...

λ˜ν•œ js-marker-clustererκ°€ μž‘λ™ν•˜λ„λ‘ κ³ κ΅°λΆ„νˆ¬ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 기본지도 μΈμŠ€ν„΄μŠ€μ— λŒ€ν•œ μ°Έμ‘°λ₯Ό 얻지 만 기본지도 λ§ˆμ»€μ— λŒ€ν•œ 참쑰도 ν•„μš”ν•©λ‹ˆλ‹€. λˆ„κ΅¬λ‚˜ λ‚΄ <sebm-google-map-marker> λŒ€ν•œ 기본지도 마컀λ₯Ό 얻을 μˆ˜μžˆλŠ” 방법에 λŒ€ν•œ 아이디어가 μžˆμŠ΅λ‹ˆκΉŒ?

ν—‰ν—‰
맞좀 ꡬ성 μš”μ†Œ 및 GoogleMapsApiWrapper에 λŒ€ν•œ μ˜ˆκ°€ μžˆμŠ΅λ‹ˆκΉŒ?
"μ»΄ν¬λ„ŒνŠΈ 내뢀에 μ‚¬μš©μž μ»΄ν¬λ„ŒνŠΈλ₯Ό λ°°μΉ˜ν•˜λŠ” 것"이 β€‹β€‹μ˜λ―Έν•˜λŠ” λ°”λ₯Ό μ΄ν•΄ν•˜μ§€ λͺ»ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

@ siegerx3 μ†Œλ¦¬κ°€ 더 κ°„λ‹¨ν•©λ‹ˆλ‹€. λ¨Όμ € μ‚¬μš©μž μ •μ˜ ꡬ성 μš”μ†Œ λ˜λŠ” μ§€μ‹œλ¬Έμ„ λ§Œλ“­λ‹ˆλ‹€.

import { Directive } from '@angular/core';
import { GoogleMapsAPIWrapper } from 'angular2-google-maps/core';

@Directive({
  selector: 'custom-directive'
})
export class CustomMapDirective {
  constructor (private gmapsApi: GoogleMapsAPIWrapper) {
    this.gmapsApi.getNativeMap().then(map => {
      // map is the native google map object and the wrapper is the same instance as the one on the map
    });
  }
}

ν…œν”Œλ¦Ώμ΄ ν•„μš”ν•˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— μ§€μ‹œλ¬Έμ„ μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€. μ›ν•˜λŠ” 경우 ꡬ성 μš”μ†Œλ₯Ό μ‚¬μš©ν•˜κ³  지정할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ‚¬μš©μž μ •μ˜ ꡬ성 μš”μ†Œ / μ§€μ‹œλ¬Έμ„ μ‚¬μš©μ€‘μΈ ꡬ성 μš”μ†Œμ˜ directives μ„Ήμ…˜μ— μ§€μ •ν•΄μ•Όν•˜λŠ” 것은 λ‹Ήμ—°ν•©λ‹ˆλ‹€. 이제 ꡬ성 μš”μ†Œλ₯Ό 맡 μ•ˆμ— λ†“μœΌμ‹­μ‹œμ˜€.

<sebm-google-map>
  <!-- markers, info windows, etc -->

  <custom-directive></custom-directive>
</sebm-google-map>

Angular2 DIκ°€ μž‘λ™ν•˜λŠ” λ°©μ‹μœΌλ‘œ 인해 GoogleMapsAPIWrapper μ„œλΉ„μŠ€μ— λŒ€ν•œ κ³΅κΈ‰μžλ₯Ό μ§€μ •ν•˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— κ³΅κΈ‰μžλ₯Ό 찾을 λ•ŒκΉŒμ§€ ꡬ성 μš”μ†Œ 트리둜 μ΄λ™ν•©λ‹ˆλ‹€. 이 경우 ν•œ 단계 더 올라 κ°”μœΌλ©° sebm-google-map ꡬ성 μš”μ†Œμ— 제곡된 GoogleMapsAPIWrapperλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

@jfmaeck MarkerManager μ„œλΉ„μŠ€μ— μ‚¬μš©ν•  μˆ˜μžˆλŠ” getNativeMarker() λ©”μ„œλ“œκ°€ 있으며 λž˜νΌμ— λŒ€ν•΄ μœ„μ—μ„œ μ„€λͺ…ν•œ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ λ™μΌν•œ 마컀 κ΄€λ¦¬μž μ„œλΉ„μŠ€ μΈμŠ€ν„΄μŠ€λ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

ν—‰ν—‰
μ½”λ“œλ₯Ό 보면 이제 μ„€λͺ…이 μ˜λ―Έκ°€ μžˆμŠ΅λ‹ˆλ‹€! 감사 :)

@alexweber λ„€μ΄ν‹°λΈŒ 마컀 μΈμŠ€ν„΄μŠ€λ₯Ό μ–»λŠ” 방법에 λŒ€ν•œ 힌트λ₯Ό μ£Όμ…”μ„œ λŒ€λ‹¨νžˆ κ°μ‚¬ν•©λ‹ˆλ‹€. κ·Έλž˜λ„ ν•œ 가지 질문이 μžˆμŠ΅λ‹ˆλ‹€. MarkerManager 의 getNativeMarker() λ©”μ„œλ“œλŠ” SebmGoogleMapMarker μΈμŠ€ν„΄μŠ€ (마컀 ꡬ성 μš”μ†Œ)λ₯Ό 맀개 λ³€μˆ˜λ‘œ μ˜ˆμƒν•©λ‹ˆλ‹€. 이 ꡬ성 μš”μ†Œλ₯Ό λ³€μˆ˜μ—μ„œ κ°€μ Έ μ™€μ„œ getNativeMarker ν•¨μˆ˜μ— μ „λ‹¬ν•˜λŠ” 방법을 μ•Œκ³  μžˆμŠ΅λ‹ˆκΉŒ?

@jfmaeck 문제 μ—†μ–΄μš”! ν˜„μž¬ 100 % ν™•μ‹  ν•  μˆ˜λŠ” μ—†μ§€λ§Œ ꡬ성 μš”μ†Œμ—μ„œ @ViewChild('myMarker'): SebmGoogleMapMarker # λ₯Ό μ‚¬μš©ν•˜κ³  마크 μ—…μ—μ„œ <sebm-google-map-marker #myMarker> just ViewChildλŠ” ngAfterViewInit μ—μ„œλ§Œ μ˜¬λ°”λ₯΄κ²Œ ν•΄κ²°λ©λ‹ˆλ‹€.

@alexweber 도와 μ£Όμ…”μ„œ λ‹€μ‹œ ν•œλ²ˆ κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€. λΆˆν–‰νžˆλ„ @ViewChildren을 μ‚¬μš©ν•˜μ—¬ λ§ˆμ»€μ— μ•‘μ„ΈμŠ€ ν•  수 μ—†μŠ΅λ‹ˆλ‹€. Plunkrμ—μ„œ 데λͺ¨λ₯Ό ν¬ν¬ν•˜κ³  ViewChildren κ²°κ³Όκ°€ μ½˜μ†”μ— κΈ°λ‘λ˜λ„λ‘ λͺ‡ 가지 λ³€κ²½ν–ˆμŠ΅λ‹ˆλ‹€ (ν˜„μž¬ 빈 λ°°μ—΄).

markers after view init []

http://plnkr.co/edit/7rdOz3QswDL0pik7SmAS?p=preview

κ½€ λ°”μ˜μ‹  것 κ°™μ§€λ§Œ λ³Ό κΈ°νšŒκ°€ μžˆλ‹€λ©΄ 정말 κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€.

@ContentChildren 을 μ‚¬μš©ν•  λ•Œ @jfmaeck (ꡬ성 μš”μ†Œ μš”μ†Œ λ‚΄λΆ€μ—μžˆλŠ” μΈμŠ€ν„΄μŠ€λ₯Ό κ°€μ Έ http://plnkr.co/edit/mukdlZ7K7CIFm6aTdDTp?p=preview

@jfmaeck 당신은 κ°€κΉŒμ› μŠ΅λ‹ˆλ‹€. @ViewChildren ν•˜λŠ” ν”Œλ ν¬ 의 μž‘μ—… 포크가 μžˆμŠ΅λ‹ˆλ‹€ : http://plnkr.co/edit/rJMCFoX9GokturcJljLh?p=preview

μ‚¬μš©μž μ •μ˜ 맡 ꡬ성 μš”μ†Œ @ContentChildren ( @ SebastianM이 μ§€μ ν•œ 것과 같은)λ₯Ό μ‚¬μš©ν•˜μ—¬ μž‘λ™ν•˜λ„λ‘ν•˜λ €λ©΄ μž‘λ™ν•˜μ§€λ§Œ λ§ˆμ»€μ— μ•‘μ„ΈμŠ€ν•˜κΈ° μœ„ν•΄ 생성 ν•œ κ²ƒμœΌλ‘œ κ°€μ •ν•˜κ³  μ‹€μ œλ‘œ μΆ”κ°€ ꡬ성 μš”μ†Œλ₯Ό 처음.

@SebastianM 및 @alexweber λŒ€λ‹¨νžˆ κ°μ‚¬ν•©λ‹ˆλ‹€!

@alexweber @SebastianM μš°μ„ , js-marker-clustererλ₯Ό μ‚¬μš©ν•˜λŠ”μ΄ 라이브러리λ₯Ό μ–΄λ–»κ²Œ ν¬ν•¨ν•©λ‹ˆκΉŒ? νŠΉμ • ν™•λŒ€ / μΆ•μ†Œ μˆ˜μ€€μ—μ„œ ν΄λŸ¬μŠ€ν„°λ₯Ό μ‚¬μš©ν•˜λŠ” 방법이 μžˆμŠ΅λ‹ˆκΉŒ? λ‹€μŒκ³Ό 같이 ν΄λŸ¬μŠ€ν„°μ— λŒ€ν•œ 이미지λ₯Ό μ–΄λ–»κ²Œ ν¬ν•¨ν•©λ‹ˆκΉŒ? http://i65.tinypic.com/10gxkcw.png

@ricardojbertolin μ½”λ“œλ₯Ό 곡유 ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? μ €λŠ” angular2λ₯Ό 처음 μ ‘ν–ˆκ³  (angularjs와 1 λ…„ 이상 μž‘μ—… ν•΄ μ™”μŠ΅λ‹ˆλ‹€) 쑰금 길을 μžƒμ—ˆμŠ΅λ‹ˆλ‹€.

@alexweber ,

@jpcode μ£„μ†‘ν•©λ‹ˆλ‹€, ν•œλ™μ•ˆμ΄ μž‘μ—…μ„ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€ ...

λ‚΄ ν”„λ‘œμ νŠΈ 쀑 ν•˜λ‚˜μ— μž‘μ—… μ†”λ£¨μ…˜μ΄ μžˆμŠ΅λ‹ˆλ‹€.
ν•„μš”ν•œ 경우 ν”Œ 런컀λ₯Ό μ˜ˆμ œμ™€ ν•¨κ»˜ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?
@jpcode
ν—‰ν—‰

@ siegerx3 쒋은, λ§Žμ€ 도움이 될 κ²ƒμž…λ‹ˆλ‹€.
λ‚˜λŠ” google maps api + markerclusterer.jsλ₯Ό μ‚¬μš©ν•˜μ—¬ λŒ€μ•ˆμœΌλ‘œ μž‘μ—…ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

@ siegerx3 , 이것은 Google지도 libλ₯Ό μ‚¬μš©ν•˜λŠ” κΈ°λ³Έ μ˜ˆμž…λ‹ˆλ‹€.
https://plnkr.co/Tr1Ykkj12HCkF9InQmuW

POC 보λ₯˜ :
angular2-google-mapsλ₯Ό μ‚¬μš©ν•˜λŠ” 방법은 "google"κ³Ό 같은 μ „μ—­ κ°œμ²΄μ™€μ˜ μΆ©λŒμ„ λ°©μ§€ν•˜κΈ° μœ„ν•΄ 내뢀에 μΆ”κ°€ν•΄μ•Όν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.
ν•΄κ²° 방법은 libμ—μ„œ Googleλ‘œλ“œλ₯Ό λ°©μ§€ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.
제곡 (MapsAPILoader, {useClass : NoOpMapsAPILoader})ν•˜κ³  μ§μ ‘λ‘œλ“œν•˜κ³  clusterer.jsλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ angular2-google-mapsκ°€ clustererλ₯Ό μ§€μ›ν•˜λŠ” μ§€μ‹œλ¬Έμ„ μΆ”κ°€ν•˜λ©΄ 더 μ’‹μŠ΅λ‹ˆλ‹€. :)

@jpcode
λ‚˜λŠ” μ„±κ³΅ν•˜μ§€ λͺ»ν•œ 채 ν”Œ λŸ°μ»€μ—μ„œ μž‘λ™ν•˜λ„λ‘ λͺ‡ μ‹œκ°„μ„ λ³΄λƒˆμŠ΅λ‹ˆλ‹€.
항상 λ¬Έμ œμ™€ κ΄€λ ¨μ΄μ—†λŠ” 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.
κ·Έλž˜μ„œ μ—¬κΈ°μ„œ μ½”λ“œλ₯Ό 보여 λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.

import { Directive, OnDestroy, OnInit } from '@angular/core';
import { GoogleMapsAPIWrapper } from 'angular2-google-maps/core';
import { GoogleMap, Marker } from 'angular2-google-maps/core/services/google-maps-types';
import { AppService } from '../../../services/index';
import { Observable } from 'rxjs';

declare const google;
declare const MarkerClusterer;

@Directive({
  selector: 'custom-map'
})
export class CustomMapDirective implements OnInit, OnDestroy {

  private map: GoogleMap;

  constructor(private gmapsApi: GoogleMapsAPIWrapper, private appService: AppService) {
  }

  ngOnInit() {

    this.gmapsApi.getNativeMap().then(map => {
      this.map = map;

      let shopMarker = {
        url: "assets/img/marker_shop.svg", // url
        scaledSize: new google.maps.Size(50, 50)
      }
      let loungeMarker = {
        url: "assets/img/marker_lounge.svg", // url
        scaledSize: new google.maps.Size(50, 50)
      }

      let markers = [];

      let style = {
        url: "/assets/img/marker.svg",
        height: 50,
        width: 50,
        anchor: [-14, 0],
        textColor: '#bd0b1d',
        textSize: 11,
        backgroundPosition: "center center"
      };

      var options = {
        imagePath: "/assets/img/marker",
        gridSize: 70,
        styles: [style, style, style]
      };

      Observable
        .interval(500)
        .skipWhile((s) => this.appService.Shops == null || this.appService.Shops.length <= 0)
        .take(1)
        .subscribe(() => {
          for (let shop of this.appService.Shops) {
            var marker = new google.maps.Marker({
              position: new google.maps.LatLng(shop.Latitude, shop.Longitude),
              icon: shop.Lounge ? loungeMarker : shopMarker
            });
            google.maps.event.addListener(marker, 'click', () => {
              this.appService.SelectedShop = shop;
            });
            markers.push(marker);

          }

          var markerCluster = new MarkerClusterer(map, markers, options);
          }
        })
    });
  }
}

이 μ§€μ‹œλ¬Έμ„ angular2-google-maps νƒœκ·Έμ— λ„£μŠ΅λ‹ˆλ‹€.

<sebm-google-map>
      <custom-map></custom-map>
</sebm-google-map>

@ siegerx3 , angular2-google-mapsλ₯Ό μ‚¬μš©ν•˜μ—¬ POCλ₯Ό λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.

μ ‘κ·Όν•˜λ‹€:

  • index.htmlμ—μ„œ Google지도 μΆ”κ°€
  • clusterer.js κ°€μ Έ 였기
  • angular2-google-mapsμ—μ„œ google maps libλ‘œλ“œ 방지 (provider μ‚¬μš©)
  • libμ—μ„œ μ›λž˜ 맡 μΈμŠ€ν„΄μŠ€λ₯Ό κ°€μ Έ μ˜€λŠ” μ§€μ‹œλ¬Έ μΆ”κ°€
  • google / markercluster λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ „μ—­μœΌλ‘œ μ‚¬μš©

angular-2-google-maps의 λ‹€λ₯Έ μ§€μ‹œλ¬Έμ„ μ‚¬μš©ν•  μˆ˜λ„ μžˆμ§€λ§Œ ν΄λŸ¬μŠ€ν„° 러λ₯Ό μ§€μ›ν•˜κΈ° μœ„ν•΄ lib에 무언가λ₯Ό μΆ”κ°€ν•˜λ©΄ 더 μ’‹μŠ΅λ‹ˆλ‹€.
->

이 libλ₯Ό μ‚¬μš©ν•˜μ—¬μ§€λ„λ₯Ό κ·Έλ¦¬λŠ” 것은 μ˜λ―Έκ°€ μ—†κΈ° λ•Œλ¬Έμ— λ‹€μŒμ—λŠ” Google지도λ₯Ό μ‚¬μš©ν•˜κΈ° λ§Œν•˜λ©΄λ©λ‹ˆλ‹€.이 경우 plunkrκ°€ 보여주기 전에 google maps libs + clusterer.jsλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 더 λ‚«λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

import { Directive } from '@angular/core';
import { GoogleMapsAPIWrapper } from 'angular2-google-maps/core';
import { GoogleMap, Marker } from 'angular2-google-maps/core/services/google-maps-types';
// npm install js-marker-clusterer --save
import 'js-marker-clusterer/src/markerclusterer.js';

declare const google;
declare const MarkerClusterer;

@Directive({
  selector: 'googlemap-directive'
})



export class GoogleMapDirective {

  googleMarkers : any;
  _map: any;

  zoom: number = 3;
  lat: number = 51.673858;
  lng: number = 7.815982;

  markers: marker[] = [
      {
          lat: 51.673858,
          lng: 7.815982
      },
      {
          lat: 51.373858,
          lng: 7.215982
      },
      {
          lat: 51.723858,
          lng: 7.895982
      }
  ]

   initMarkers(){
    let i = 0;
    let markers = this.markers;
    var result = [];
    for ( ; i < markers.length; ++i ){
       result.push( new google.maps.Marker({
            position : markers[ i ] 
        })
       );
    }
    return result;
  }



  constructor (private gmapsApi: GoogleMapsAPIWrapper) {
    var me = this;
    this.gmapsApi.getNativeMap().then(map => {
      // instance of the map.
      me._map = map;
      me.initializeMap();
    });
  }

  initializeMap(){
      var me = this;
      me.googleMarkers = me.initMarkers();
      var mc = new MarkerClusterer( me._map, me.googleMarkers, { imagePath: 'https://googlemaps.github.io/js-marker-clusterer/images/m' } );
  }

}

interface marker {
    lat: number;
    lng: number;
}

angular2-google-mapsμ—μ„œ κ³΅κΈ‰μžλ₯Ό μ‚¬μš©ν•˜μ—¬ Google지도λ₯Ό 두 λ²ˆλ‘œλ“œν•˜λŠ” 것을 λ°©μ§€ν•˜λŠ” 방법
ꡬ성 μš”μ†Œ μ •μ˜μ—μ„œ κ³΅κΈ‰μž μΆ”κ°€

import {OnInit, Component  } from '@angular/core';

import { SebmGoogleMap, MapsAPILoader, NoOpMapsAPILoader  } from 'angular2-google-maps/core';

@Component({
    selector: 'site-map',
    templateUrl: './site-map.component.html',
    styleUrls: ['./site-map.component.css'],
  providers: [
    {
      provide: MapsAPILoader, useClass: NoOpMapsAPILoader
    }
  ],
})

ν…œν”Œλ¦Ώ μ •μ˜μ—μ„œ μ§€μ‹œλ¬Έμ„ μΆ”κ°€ν•΄μ•Όν•©λ‹ˆλ‹€.

<sebm-google-map #sitemap
  [disableDefaultUI]="false"
  [zoom] = "zoom"
  [zoomControl]="true" 
  [latitude]="lat" [longitude]="lng">
  <!--
  <sebm-google-map-marker 
      *ngFor="let m of markers; let i = index"
      (markerClick)="openDetail(m)"
      [latitude]="m.lat"
      [longitude]="m.lng"
      [label]="m.label"

      [markerDraggable]="m.draggable"
      [iconUrl]="'assets/img/marker.png'"
      (dragEnd)="markerDragEnd(m, $event)">

    <sebm-google-map-info-window [disableAutoPan]="true" (infoWindowClose)="onCloseDetail.emit()">
      <h5>{{m.address}}</h5>
      <div>{{m.city}}, {{m.state}}, {{m.country}}</div>
    </sebm-google-map-info-window>    
  </sebm-google-map-marker>
  -->
  <googlemap-directive></googlemap-directive>
</sebm-google-map>

image

@jpcode
λ‚˜λŠ” 이것이 angular2-google-maps λΌμ΄λΈŒλŸ¬λ¦¬μ— μΆ”κ°€λ˜μ–΄μ•Όν•œλ‹€λŠ” 데 λ™μ˜ν•˜μ§€λ§Œ λ‚΄ μ†”λ£¨μ…˜μ—μ„œλŠ” μ–ΈκΈ‰ ν•œ κ²ƒμ²˜λŸΌ maps sdkκ°€ 두 λ²ˆλ‘œλ“œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” 단지 agm libκ°€ ν•  μˆ˜μžˆλŠ” ν•œ λ§Žμ΄ν•˜κ³  ν•„μš”ν•œ 뢀뢄을 직접 μˆ˜ν–‰ν•˜λ„λ‘ν•©λ‹ˆλ‹€.

λΏ‘ 빡뀨
zip 파일둜 μž‘μ—… 예제λ₯Ό κ³΅μœ ν•΄ μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ?

λΏ‘λΏ‘
그게 μΆ©λΆ„ν•˜λ‹€λ©΄ 내일 λ§Œλ“€ κ²Œμš” :)
angular-cli에 λŒ€ν•΄ 잘 μ•Œκ³  μžˆμŠ΅λ‹ˆκΉŒ? 그렇지 μ•ŠμœΌλ©΄ 기본적인 것을 ν•  κ²ƒμž…λ‹ˆλ‹€.

λΏ‘ 빡뀨
λ„€, 쑰금 ... Google지도 API + 마컀 ν΄λŸ¬μŠ€ν„° 러λ₯Ό μ‚¬μš©ν•˜μ—¬ ν΄λŸ¬μŠ€ν„° ν™”λ₯Ό μ‹€ν–‰ν•  μˆ˜μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λŒ€μ‹  angular2-google-maps ...λ₯Ό μ‚¬μš©ν•˜μ—¬ μ†”λ£¨μ…˜μ„ μ™„λ²½ν•˜κ²Œ νŒŒμ•…ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.
λ‹Ήμ‹ μ˜ 도움을 많이 tnx

λΏ‘λΏ‘
https://drive.google.com/open?id=0B4y4KJY7l3rPNTdqR0hyNTRqVHc

npm install 및 ng serve . angular-cliκ°€ μ„€μΉ˜λ˜μ§€ μ•Šμ€ 경우 λ¨Όμ € npm install angular-cli -g μ„€μΉ˜ν•˜μ‹­μ‹œμ˜€.

이것은 졜적의 μ†”λ£¨μ…˜μ΄ μ•„λ‹™λ‹ˆλ‹€. 아직 ν΄λŸ¬μŠ€ν„° μ§€μ‹œλ¬Έμ΄ μ—†κΈ° λ•Œλ¬Έμ— λ‚΄κ°€ λ§Œλ“  ν•΄κ²° λ°©λ²•μž…λ‹ˆλ‹€.

νŽΈμ§‘ν•˜λ‹€:
아톰이 μž‘λ™ν•˜μ§€ μ•Šμ•„μ„œ ν¬λ§·νŒ…μ΄ 이상 ν•  수 μžˆμœΌλ‹ˆ 였래된 에디터λ₯Ό μ‚¬μš©ν•˜κ³  μžˆμ—ˆμ–΄μš” ^^

λΏ‘ 빡뀨
κ°μ‚¬ν•©λ‹ˆλ‹€. 이 μ†”λ£¨μ…˜μ„ ν™•μΈν•˜κ² μŠ΅λ‹ˆλ‹€ :)

μ•΅κ·€λŸ¬ 2 ꡬ글 맡에 포함 된 μ—…λ°μ΄νŠΈκ°€ μžˆμŠ΅λ‹ˆκΉŒ? μž‘μ—…μ€‘μΈ ν”„λ‘œμ νŠΈμ— 정말 μ‚¬μš©ν•΄μ•Όν•©λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš”.
μ €λ₯Ό ν¬ν•¨ν•œ μ‚¬λžŒλ“€μ΄ 제곡 ν•œ 예제 쀑 ν•˜λ‚˜λ₯Ό 계속 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. :)
λ‹Ήμ—°νžˆ μΆ©λΆ„ν•˜λ‹€λ©΄

λΏ‘λΏ‘
Btw λͺ¨λ“  것이 μž‘λ™ ν–ˆμŠ΅λ‹ˆκΉŒ? 도움이 λ˜μ—ˆλ‚˜μš”?

λΏ‘ 빡뀨
λ„€, λ§Žμ€ λ„μ›€μ΄λ˜μ—ˆμŠ΅λ‹ˆλ‹€. Tnx!

ν—‰ν—‰

λ‚˜λŠ” λ‹Ήμ‹ μ˜ 예λ₯Ό 직접 μ‚¬μš©ν–ˆκ³  그것이 ν›Œλ₯­ν•˜κ²Œ μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ 이제 λ‚΄ λ¬Έμ œλŠ” 마컀λ₯Ό μ—…λ°μ΄νŠΈ ν•  수 μ—†λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. ngOnChangesλ₯Ό μ‚¬μš©ν•˜μ—¬ μ—…λ°μ΄νŠΈ 된 포인트 배열을 μ „λ‹¬ν–ˆλŠ”λ° 배열이 λ³€κ²½λ˜λŠ” 것을 λ³Ό 수 μžˆμ§€λ§Œ 배열이 λΉ„μ›Œμ§€λ©΄ λ§ˆμ»€κ°€ μ œκ±°λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

팁이 μžˆμŠ΅λ‹ˆκΉŒ?

λΏ‘λΏ‘
그것이 λ„μ›€μ΄λ˜μ—ˆλ‹€λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€!

μ‹€μ œλ‘œ λ©°μΉ  전에 λ™μΌν•œ / μœ μ‚¬ν•œ λ¬Έμ œκ°€ λ°œμƒν–ˆμ§€λ§Œ 아직 해결책을 찾을 μ‹œκ°„μ΄ μ—†μ—ˆμŠ΅λ‹ˆλ‹€.

λ‚΄κ°€ λ­”κ°€λ₯Ό λ°œκ²¬ν•˜λ©΄ 여기에 κ²Œμ‹œ ν•  κ²ƒμž…λ‹ˆλ‹€.

영ꡬ ν΄λŸ¬μŠ€ν„° λ¬Έμ œμ— λŒ€ν•œ 해결책을 μ°Ύμ•˜μŠ΅λ‹ˆλ‹€.

        .interval(100)
        .take(1)
        .subscribe(() => {
        if(this.markerCluster) {
          this.markerCluster.clearMarkers();
        }
          if (this.points.length > 0) {
            for (let point of this.points) {
              let marker = new google.maps.Marker({
                position: new google.maps.LatLng(point.Latitude, point.Longitude),
                icon : markerIcon
              });
              this.markers.push(marker);
            }
          } else {
            this.markers = [];
          }
          this.markerCluster = new MarkerClusterer(map, this.markers, options);

        });

Observable μ™ΈλΆ€μ—μ„œ markerClusterλ₯Ό μ„ μ–Έ ν•œ λ‹€μŒ μ‹œμž‘μ‹œ μ‘΄μž¬ν•˜λŠ” 경우 clearMarkers ()λΌλŠ” ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜μ—¬μ§€λ„μ—μ„œ κΈ°μ‘΄ 마컀λ₯Ό μ œκ±°ν•˜μ§€λ§Œ λ°°μ—΄μ—λŠ” 남겨 λ‘‘λ‹ˆλ‹€ (λ”°λΌμ„œ λ‹€λ₯Έ λ…Όλ¦¬λŠ” 배열을 λΉ„ μ›λ‹ˆλ‹€. ).

λ‚΄ 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 것이, μ–΄μ©Œλ©΄ siegerx3 @ 당신도 λ„μ›€μ΄λ©λ‹ˆλ‹€

λΏ‘λΏ‘

κ·Έ 뢀뢄을 λ‹€μ‹œ μž‘μ—… ν•  λ•Œ ν™•μΈν•˜κ² μŠ΅λ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€. :)

μ•ˆλ…•ν•˜μ„Έμš” μ—¬λŸ¬λΆ„,이 νžŒνŠΈμ— κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€
ν•˜μœ„ ꡬ성 μš”μ†Œλ₯Ό μ‚¬μš©ν•˜μ—¬ getNativeMap을 μ–»μ—ˆμŠ΅λ‹ˆλ‹€.
지도 μ»¨ν…μŠ€νŠΈ 메뉴λ₯Ό κ΅¬ν˜„ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
<sebm-google-map> <mapmenu-component></mapmenu-component>
제 경우의 λ¬Έμ œλŠ” ν•˜μœ„ ꡬ성 μš”μ†Œ ν…œν”Œλ¦Ώμ΄ 보이지 μ•ŠλŠ”λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.
그것은 HTML둜 λ Œλ”λ§λ©λ‹ˆλ‹€
<div class="sebm-google-map-content" _ngcontent-rgy-8="">
보이지 μ•ŠλŠ” ꡬ성 μš”μ†Œμž…λ‹ˆλ‹€

μ›μΉ™μ μœΌλ‘œ sebm-google-map μ•ˆμ— html을 넣을 수 μžˆμŠ΅λ‹ˆκΉŒ?
OverlayViewλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  HTML둜 κ°–κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

κΈ°λŠ₯을 2 개의 ꡬ성 μš”μ†Œ (μ§€μ‹œλ¬Έ + ꡬ성 μš”μ†Œ)둜 λΆ„λ¦¬ν•˜μ—¬ 처리 ν•  μˆ˜μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
1.) sebm-google-map 내뢀에 μžˆμ–΄μ•Όν•˜λ©° api μ ‘κ·Ό 자 μ—­ν• μ„ν•˜λŠ” 것
2.) sebm-google-map 외뢀에 μžˆμ–΄μ•Όν•˜λŠ” 것 (그렇지 μ•ŠμœΌλ©΄ 생성 된 html이 ν‘œμ‹œλ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έ)

μ•ˆλ…•ν•˜μ„Έμš” νŒ€,
@ siegerx3 https://drive.google.com/open?id=0B4y4KJY7l3rPNTdqR0hyNTRqVHc 의 μ½”λ“œλ₯Ό μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€.
잘 μž‘λ™ν•˜μ§€λ§Œ 톡합 ν•  수 μ—†μŠ΅λ‹ˆλ‹€.κ³Ό. λ‚΄κ°€ λ‹¬μ„±ν•˜λ €λŠ” 것은 ν΄λŸ¬μŠ€ν„° + 마컀 λ ˆμ΄λΈ” + 정보 창을 ν†΅ν•©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. λ”°λΌμ„œ ν΄λŸ¬μŠ€ν„°λ₯Ό ν΄λ¦­ν•˜λ©΄ κ°œμΈμ—κ²Œ 마컀 λ ˆμ΄λΈ”μ΄ μžˆμ–΄μ•Όν•˜λ©° ν΄λ¦­ν•˜λ©΄ 정보 창이 λ‚˜νƒ€λ‚©λ‹ˆλ‹€. @SebastianM 이 μ–΄λ–»κ²Œ μž‘λ™ν•˜λŠ”μ§€

λΏ‘ 빡뀨
ν΄λŸ¬μŠ€ν„°κ°€ 아직 λͺ¨λ“ˆμ—μ„œ κ΅¬ν˜„λ˜μ§€ μ•Šμ•˜κ³  λͺ¨λ“ˆμ˜ 마컀λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— ν΄λŸ¬μŠ€ν„°λ§μ— μ‚¬μš©λ˜λŠ” λ™μΌν•œ μ‚¬μš©μž μ •μ˜ ꡬ성 μš”μ†Œμ—μ„œ λ„€μ΄ν‹°λΈŒ 맡 APIλ₯Ό μ‚¬μš©ν•΄μ•Όν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.
바닐라 μžλ°” β€‹β€‹μŠ€ν¬λ¦½νŠΈμ—μ„œν•˜λŠ” κ²ƒμ²˜λŸΌ 라벨과 정보 창을 μˆ˜λ™μœΌλ‘œ μΆ”κ°€ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

λΏ‘λΏ‘

λ‚˜λŠ” μ‹€μ œλ‘œ 이것에 λŒ€ν•΄ 직접 μž‘μ—…ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 라이브러리 용 MarkerClustererPlus둜 μ „ν™˜ν•΄μ•Όν–ˆκ³  λ‹€μŒ μ½”λ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ ν΄λŸ¬μŠ€ν„° 자체뿐만 μ•„λ‹ˆλΌ κ°œλ³„ λ§ˆμ»€μ— λŒ€ν•œ 정보 창을 ν™œμ„±ν™”ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

        .interval(100)
        .take(1)
        .subscribe(() => {
        if (this.markerCluster) {
          this.markerCluster.clearMarkers();
          this.markers = [];
        }
          if (this.points.length > 0) {
            for (let point of this.points) {
              let marker = new google.maps.Marker({
                position: new google.maps.LatLng(point.Latitude, point.Longitude),
                icon : markerIcon,
                title: 'this is a title'
              });
              marker.addListener('mouseover', function() {
                infowindow.open(map, marker);
              });
              marker.addListener('mouseout', function() {
                infowindow.close(map, marker);
              });
              this.markers.push(marker);
            }
          } else {
            this.markers = [];
            if (this.markerCluster) {
              this.markerCluster.clearMarkers();
            }
          }
          this.markerCluster = new MarkerClusterer(map, this.markers, options);
          google.maps.event.addListener(this.markerCluster, 'mouseover', function(cluster) {
            let content = 'Cluster Window';
            let info = new google.maps.MVCObject;
            let clusterInfowindow = new google.maps.InfoWindow();

            clusterInfowindow.setContent(content);
            clusterInfowindow.open(map, info);
            clusterInfowindow.setPosition(cluster.getCenter());
            google.maps.event.addListener(map, 'zoom_changed', function() { clusterInfowindow.close(); });
          });

        });

μœ μΌν•œ λ¬Έμ œλŠ” ν΄λŸ¬μŠ€ν„° 창을 λ‹«λŠ” 방법을 μ•Œμ•„λ‚΄λŠ” κ²ƒμž…λ‹ˆλ‹€. ν΄λŸ¬μŠ€ν„° 창은 맡을 λ– λ‚  λ•Œ λ‹«νžˆμ§€ 만 ν΄λŸ¬μŠ€ν„°λ₯Ό λ– λ‚  λ•ŒλŠ” λ‹«νžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λˆ„κ΅¬λ“ μ§€ 각도 2μ—μ„œ κ²½μœ μ§€λ₯Ό μ‚¬μš©ν•  수 μžˆμ§€λ§Œ μ—¬κΈ° " https://developers.google.com/maps/documentation/javascript/reference#DirectionsWaypoint "에 μ–ΈκΈ‰ λœλŒ€λ‘œ lat 및 lngλ₯Ό μ‚¬μš©ν•  수 μžˆλŠ”μ§€ μ•Œκ³  μžˆμŠ΅λ‹ˆκΉŒ?

@naranmistry 당신이 μ›ν•˜λŠ” 것을 쑰금 지정할 수 μžˆμŠ΅λ‹ˆκΉŒ?

λ‹Ήμ‹ μ˜ κ³„νšμ΄ μ •ν™•νžˆ 뭔지 λͺ¨λ₯΄κ² μ–΄μš”. λ‹€λ₯Έ μ‚¬λžŒμ΄ 이해할 수 μžˆμŠ΅λ‹ˆκΉŒ?

기본적으둜 lng 및 lat 값을 λ¬Έμžμ—΄ λŒ€μ‹  웨이 ν¬μΈνŠΈμ— 넣을 수 있기λ₯Ό μ›ν•©λ‹ˆλ‹€. angular2-google-mapsλ₯Ό μ‚¬μš©ν•˜μ—¬ κ°€λŠ₯ν•©λ‹ˆκΉŒ? 경도 및 lattidute 값을 μ‚¬μš©ν•˜μ—¬ μ—¬λŸ¬ νŠΉμ • κ²½μœ μ§€κ°€μžˆλŠ” 경둜λ₯Ό ν‘œμ‹œν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

λ‚΄κ°€ μ˜¬λ°”λ₯΄κ²Œ μ΄ν•΄ν•˜λ©΄μ΄ λͺ¨λ“ˆμ— λŒ€ν•œ 연결을 λ³Ό 수 μ—†μ§€λ§Œ 일반적으둜 λ¬Έμ„œλ₯Ό 보면 location Type: string|LatLng|Place λ©λ‹ˆλ‹€. 예, μƒμ„±μžμ—μ„œ 숫자 값을 μ‚¬μš©ν•˜λŠ” Google지도 LatLng 객체λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

그게 λ‹Ήμ‹ μ—κ²Œ ν•„μš”ν•œ κ²ƒμž…λ‹ˆκΉŒ?

기본적으둜 λ¬Έμ„œμ— λ‚˜μ™€μžˆλŠ”λŒ€λ‘œ μ „λ‹¬ν•˜λ €κ³ ν–ˆμ§€λ§Œ 계속 μ‹€νŒ¨ν•˜λŠ” 방법을 μ•Œκ³  μ‹ΆμŠ΅λ‹ˆλ‹€. lat 및 lngλ₯Ό μ‚¬μš©ν•˜λŠ” κ²½μœ μ§€μ˜ μž‘λ™ μ˜ˆκ°€ μžˆμŠ΅λ‹ˆκΉŒ?

ν˜Όλž€μŠ€λŸ¬μ›Œμ„œ λ―Έμ•ˆν•΄ 더 λͺ…ν™• ν–ˆμ–΄μ•Ό ν–ˆμ–΄

λ‚˜λŠ” κ·Έλ ‡κ²Œ μƒκ°ν•˜μ§€ μ•ŠλŠ”λ‹€. ν•˜μ§€λ§Œ 예제둜 μ½”λ“œλ₯Ό 제곡 ν•  수 μžˆλ‹€λ©΄? plunkr μ—μ„œμ²˜λŸΌ, λ‚΄κ°€ 찾을 μˆ˜μžˆλŠ” 것을 λ³Ό μˆ˜μžˆμ—ˆμŠ΅λ‹ˆλ‹€. :)

μ’‹μ•„, ν•˜λ‚˜ λͺ¨μ•„ 볼게

감사

μ£„μ†‘ν•©λ‹ˆλ‹€. _marker-cluster_ μ§€μ‹œλ¬Έ λ‚΄μ˜ _infowindow_μ—μ„œ _click event_λ₯Ό κ°€λ‘œ μ±„κ±°λ‚˜ 각 λ§ˆμ»€μ— λŒ€ν•΄ _sebm-google-map-info_ ꡬ성 μš”μ†Œλ₯Ό λ Œλ”λ§ ν•  수 μžˆλ‚˜μš”?

κ°μ‚¬ν•©λ‹ˆλ‹€!

@fsciuti와 같은 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€.
해결책을 μ°Ύμ•˜μŠ΅λ‹ˆκΉŒ?

agm-maps λŠ” μ—¬μ „νžˆ ν΄λŸ¬μŠ€ν„°λ₯Ό μ§€μ›ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— @ siegerx3 의 예λ₯Ό λ“€μ–΄ 마컀 λ³€κ²½ 사항과 @nanomoffet의 마컀 정보 μ°½ 예제λ₯Ό μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€. 잘 ν–ˆμ–΄! κ°μ‚¬ν•©λ‹ˆλ‹€. κ·€ν•˜μ˜ μ˜ˆκ°€ λ§Žμ€ λ„μ›€μ΄λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

무언가λ₯Ό 돌렀주기 μœ„ν•΄ λ‹€μŒ λ§ν¬μ—μ„œ @ siegerx3 예제의 μ—…λ°μ΄νŠΈ 된 버전을 μ œκ³΅ν•©λ‹ˆλ‹€.

https://drive.google.com/open?id=0B51AX67ezltoOFdSNTQ1NlQ4SU0

λ‹€μŒκ³Ό 같이 λ³€κ²½λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

  • Angular 4.1 및 @agm/core 에 맞게 쒅속성 μ—…λ°μ΄νŠΈ
  • Angular 4.1 및 @agm/core 에 맞게 μ½”λ“œ μ—…λ°μ΄νŠΈ
  • 마컀 λ³€κ²½ 감지 μΆ”κ°€
  • 마컀 정보창 μ˜ˆμ‹œ μΆ”κ°€
  • κ³ μ • μ½”λ“œ μŠ€νƒ€μΌ

@andorfermichael κ°μ‚¬ν•©λ‹ˆλ‹€, 당신은 ν›Œλ₯­ν•©λ‹ˆλ‹€! ν•œ 가지 질문이 μžˆμŠ΅λ‹ˆλ‹€. μ§€μ‹œλ¬Έ (λ§ˆμ»€μ™€ ν΄λŸ¬μŠ€ν„° λͺ¨λ‘)의 μŠ€νƒ€μΌμ„ κ΅¬μ²΄ν™”ν•˜λ €λ©΄ μ–΄λ–»κ²Œν•΄μ•Όν•©λ‹ˆκΉŒ? λ‹¨μˆœνžˆ ꡬ성 μš”μ†Œλ‘œ λ§Œλ“œλŠ” 것에 λŒ€ν•΄ μƒκ°ν–ˆμ§€λ§Œ Observable에 μ˜΅μ…˜κ³Ό μŠ€νƒ€μΌμ„ μ˜¬λ°”λ₯΄κ²Œ κ³΅κΈ‰ν•˜λŠ” 방법을 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

@picosam

ꡬ성 μš”μ†Œκ°€ ν•„μš”ν•˜μ§€ μ•Šκ³  ES6 λͺ¨λ“ˆ 만 μ‚¬μš©ν•˜λ©΄λ©λ‹ˆλ‹€.

μƒˆ νŒŒμΌμ„ λ§Œλ“€κ³  ꡬ성을 λ‚΄ λ³΄λƒ…λ‹ˆλ‹€. 예 :

_google-maps.config.ts_

export const markerIcon = {
  url: '/assets/marker.png', // url
  scaledSize: new google.maps.Size(35, 35)
};

const style = {
  url: '/assets/cluster.png',
  height: 40,
  width: 40,
  textColor: '#FFF',
  textSize: 11,
  backgroundPosition: 'center center'
};

export const options = {
  imagePath: '/assets/cluster',
  gridSize: 70,
  styles: [style, style, style]
};

그런 λ‹€μŒ _marker-cluster.ts_μ—μ„œ ν•΄λ‹Ή λ³€μˆ˜ / λͺ¨λ“ˆμ„ κ°€μ Έμ˜΅λ‹ˆλ‹€.

import { markerIcon, options } from './google-maps.config';

@handorfermichael danke noch mal !!!
λ¬Όλ‘  그런 λ‹€μŒ λ³΅μž‘ν•œ μ•„μ΄μ½˜κ³Ό μ΅œμ‹  Google Maps Javascript λͺ¨λ“ˆ 버전에 λ¬Έμ„œν™” 된 λͺ¨λ“  것을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ§žμŠ΅λ‹ˆκΉŒ?

@picosam κ·Έλ ‡κ²Œ μƒκ°ν•˜μ§€λ§Œ 아직 μ‹œλ„ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€

@andorfermichael 이것은 λ†€λΌμš΄ μ§μ—…μž…λ‹ˆλ‹€ πŸ‘
κ·ΈλŸ¬λ‚˜ λ‚˜λŠ” μ•½κ°„μ˜ λ¬Έμ œμ— μ§λ©΄ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€

정보창을 ν΄λ¦­ν•˜μ—¬ λ‹€λ₯Έ 경둜둜 λ¦¬λ””λ ‰μ…˜ν•΄μ•Όν•˜λŠ”λ° 정보창에 클릭 μ΄λ²€νŠΈκ°€ μ—†μŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ λŒ€μ‹  "closeclick"이벀트λ₯Ό μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€. 여기에 μ½”λ“œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

infowindow.addListener('closeclick', function () { this.router.navigate(['/blabla', id]); });

λͺ¨λ“  것이 잘 μž‘λ™ν•˜μ§€λ§Œ 정보창 λ‹«κΈ° λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄ μ΄λ²€νŠΈκ°€ ν˜ΈμΆœλ˜μ§€λ§Œ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.
this.router is undefined

_ λ¬Όλ‘  λΌμš°ν„° 라이브러리λ₯Ό κ°€μ Έμ˜€κ³  λΌμš°ν„°λŠ” μƒμ„±μžμ—μ„œ μ •μ˜ν•©λ‹ˆλ‹€ _

λ‹€λ₯Έ κΈ°μˆ μ„ μ‹œλ„ν•΄ λ³΄μ•˜μŠ΅λ‹ˆλ‹€. λΆ€λͺ¨ ꡬ성 μš”μ†Œμ™€ μ§€μ‹œλ¬Έ 사이에 이벀트 이미 ν„° (μž…λ ₯ / 좜λ ₯ 기술)λ₯Ό μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€.
맨 μœ„μ— @Output() eventEmitter = new EventEmitter() λ₯Ό 클래슀 λ³€μˆ˜λ‘œ μ •μ˜ν–ˆμŠ΅λ‹ˆλ‹€.
그리고 같은 μž₯μ†Œμ—μ„œ μΌμ–΄λ‚œ 사건,

infowindow.addListener('closeclick', function () { this.eventEmitter(id); });

λ˜ν•œ λͺ¨λ“  것이 잘 μž‘λ™ν•˜μ§€λ§Œ 정보창 λ‹«κΈ° λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄ μ΄λ²€νŠΈκ°€ ν˜ΈμΆœλ˜μ§€λ§Œ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.
this.eventEmitter is undefined

이 문제λ₯Ό ν•΄κ²°ν•  μˆ˜μžˆλŠ” 방법이 μžˆμŠ΅λ‹ˆκΉŒ?

@ hossam-maurice λ‚˜λŠ” this μ˜ν•΄ 였λ₯˜κ°€ λ°œμƒν–ˆλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€. κ·€ν•˜μ˜ 경우 this λŠ” 이벀트λ₯Ό λ°œμƒμ‹œν‚¨ μš”μ†Œ 인 μ •λ³΄μ°½μž…λ‹ˆλ‹€. μ΄λŸ¬ν•œ 이유둜 ES6 / ECMAScript2015μ—λŠ” ν™”μ‚΄ν‘œ κΈ°λŠ₯이 λ„μž…λ˜μ—ˆμŠ΅λ‹ˆλ‹€. ν™”μ‚΄ν‘œ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 경우 this λŠ” ν•¨μˆ˜κ°€ 호좜 된 방식이 μ•„λ‹ˆλΌ μ£Όλ³€ λ²”μœ„μ— μ˜μ‘΄ν•©λ‹ˆλ‹€.
λ”°λΌμ„œ infowindow.addListener('closeclick', () => { this.eventEmitter(id); }); κ°€ νš¨κ³Όκ°€μžˆμ„ κ²ƒμž…λ‹ˆλ‹€.

μžμ„Έν•œ λ‚΄μš©μ€ ExploringJS-Arrow Functions 및 MDN-Arrow Functionsλ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

@andorfermichael 정말 κ³ λ§ˆμ›Œμš”, μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€ : D πŸ‘

μ•ˆλ…•ν•˜μ„Έμš”, Google λ“œλΌμ΄λΈŒμ˜ μ‚¬μš©μž 지정 마컀 ν΄λŸ¬μŠ€ν„°λ₯Ό μ‚¬μš©ν–ˆμœΌλ©° μ •μƒμ μœΌλ‘œ μž‘λ™ν•©λ‹ˆλ‹€.
이제 ν•œ 가지 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. 마컀λ₯Ό ν΄λ¦­ν•˜κ³  λΆ€νŠΈ 슀트랩 λͺ¨λ‹¬μ„ μ—΄μ–΄μ•Όν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ‚˜λŠ” 이것을 μ–΄λ–»κ²Œ ν•  수 μžˆλŠ”μ§€ μ •λ§λ‘œ λͺ¨λ₯Έλ‹€. ν΄λ¦­μ‹œ 이벀트 λ¦¬μŠ€λ„ˆλ₯Ό μ‚¬μš©ν•˜κ³  κ²½κ³ λ₯Ό ν‘œμ‹œν•˜λ €κ³ ν–ˆμ§€λ§Œ μž‘λ™ν•˜μ§€λ§Œ λΆ€νŠΈ 슀트랩 λͺ¨λ‹¬μ„ νŒν•˜λŠ” 방법을 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. μ–΄λ–€ 아이디어?

감사 :)

μ•ˆλ…•ν•˜μ„Έμš”, 정보창에 λ²„νŠΌμ„ μΆ”κ°€ν–ˆλŠ”λ° 클릭 μ΄λ²€νŠΈκ°€ μž‘νžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ–΄λ–»κ²Œν•˜λŠ”μ§€ μ•„μ‹œλ‚˜μš”?

μ•ˆλ…•ν•˜μ„Έμš”.
μ•ˆλ…•ν•˜μ„Έμš” μ†”λ£¨μ…˜μ— κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€. λ‚΄λΆ€ λ§ˆμ»€μ— 따라 ν΄λŸ¬μŠ€ν„° 색상을 λ³€κ²½ν•˜λŠ” 데 도움을 μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ? λΉ¨κ°•, λ…Έλž‘ 및 νŒŒλž‘κ³Ό 같은.
μ’…λ₯˜ μ•ˆλΆ€

@ vugar005 색상을 λ³€κ²½ν•˜μ—¬ μ •ν™•νžˆ 무엇을 μ˜λ―Έν•˜λŠ”μ§€ μ΄ν•΄ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€. ν•„μš”μ— 따라 ν΄λŸ¬μŠ€ν„°μ˜ 이미지λ₯Ό κ°„λ‹¨νžˆ λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‚΄κ°€ μ•„λŠ” ν•œ Google의 마컀 ν΄λŸ¬μŠ€ν„° λΌμ΄λΈŒλŸ¬λ¦¬λŠ” ν΄λŸ¬μŠ€ν„° λ‹Ή 마컀 μˆ˜κ°€ 증가함에 따라 μ‚¬μš©λ˜λŠ” m1 ~ m5 (m = κΈ°λ³Έκ°’)λΌλŠ” 5 개의 μ„œλ‘œ λ‹€λ₯Έ 이미지λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. μ •ν™•ν•œ μž„κ³„ 값을 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ Google Developers MapsDocumentation을 μ°Έμ‘°ν•˜μ„Έμš” . κ·Έλž˜μ„œ μ €λŠ” μ„œλ‘œ λ‹€λ₯Έ μƒ‰μƒμœΌλ‘œ 5 개의 이미지λ₯Ό λ§Œλ“€κ³  이름을 cluster1μ—μ„œ cluster5둜 μ§€μ •ν•˜κ³  assets 폴더 μ•ˆμ— λ°°μΉ˜ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

@AlexisNi 당신은

InfoWindow의 μ½˜ν…μΈ λ₯Ό ν¬ν•¨ν•˜λŠ” 것은 DOM에 μ²¨λΆ€λ©λ‹ˆλ‹€.
google.maps.event.addListener(infoWindow, 'domready', function() {
  document.getElementById('info-window-button').addEventListener('click', function(){
    // run code here
  });
});

μžμ„Έν•œ λ‚΄μš©μ€ Google Developers Maps Documention 을 μ°Έμ‘°

@joaolbaptista λ―Έμ•ˆν•˜μ§€λ§Œ Google지도 λ§ˆμ»€μ™€ κ²°ν•©ν•˜λ”λΌλ„ Bootstrap에 λŒ€ν•œ κ·€ν•˜μ˜ μ§ˆλ¬Έμ€ λ‚΄ μ˜κ²¬μœΌλ‘œλŠ” 주제λ₯Ό λ²—μ–΄λ‚¬μŠ΅λ‹ˆλ‹€. λ‚˜λŠ” stackoverflow μ—μ„œ λ™μΌν•œ 질문 (쑰금 더 μžμ„Ένžˆ)을 μ œμ•ˆ ν•  κ²ƒμž…λ‹ˆλ‹€.)

@andorfermichael μ‹€μ œλ‘œ ν΄λŸ¬μŠ€ν„° λ‚΄μ˜ 마컀 μˆ˜μ— 따라 μ•„μ΄μ½˜μ„ λ³€κ²½ν•˜λŠ” 것을 μ˜λ―Έν–ˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ κΈ°λ³Έ Google μ›Ή API둜 μ „ν™˜ν–ˆμŠ΅λ‹ˆλ‹€. 희망 κ°λ„μ§€λ„λŠ” ν–₯ν›„ ν΄λŸ¬μŠ€ν„° μ„œλΉ„μŠ€λ₯Ό 제곡 ν•  κ²ƒμž…λ‹ˆλ‹€.
μ–΄μ¨Œλ“  κ³ λ§ˆμ›Œ

@ vugar005 그것이 λ‚΄κ°€ μ„€λͺ…ν•˜λ €κ³  ν•œ κ²ƒμž…λ‹ˆλ‹€. κΈ°λ³Έ Google지도 API쑰차도 5 개의 μ„œλ‘œ λ‹€λ₯Έ 이미지에 λŒ€ν•œ κ°€λŠ₯μ„± 만 μ œκ³΅ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 각 μ΄λ―Έμ§€λŠ” νŠΉμ • μž„κ³„ 값에 도달 ν•  λ•Œ ν‘œμ‹œλ©λ‹ˆλ‹€ (예 : cluster1 (m1) 0-10, cluster2 (m2) 11-100 λ“±).

μ•ˆλ…•ν•˜μ„Έμš” @andorfermichael , νŒ¨ν‚€μ§€λ₯Ό μ—…κ·Έλ ˆμ΄λ“œ ν•œ ν›„ κ°‘μžκΈ°μ΄ 였λ₯˜κ°€ λ°œμƒν•˜λŠ” 이유λ₯Ό μ•Œ 수 μžˆμŠ΅λ‹ˆκΉŒ?

ReferenceError: MarkerClusterer is not defined
    at SafeSubscriber._next (marker-clusterer.ts:106)
    at SafeSubscriber.webpackJsonp.../../../../rxjs/Subscriber.js.SafeSubscriber.__tryOrUnsub (Subscriber.js:238)
    at SafeSubscriber.webpackJsonp.../../../../rxjs/Subscriber.js.SafeSubscriber.next (Subscriber.js:185)
    at Subscriber.webpackJsonp.../../../../rxjs/Subscriber.js.Subscriber._next (Subscriber.js:125)
    at Subscriber.webpackJsonp.../../../../rxjs/Subscriber.js.Subscriber.next (Subscriber.js:89)
    at SkipWhileSubscriber.webpackJsonp.../../../../rxjs/operator/skipWhile.js.SkipWhileSubscriber._next (skipWhile.js:52)
    at SkipWhileSubscriber.webpackJsonp.../../../../rxjs/Subscriber.js.Subscriber.next (Subscriber.js:89)
    at TakeSubscriber.webpackJsonp.../../../../rxjs/operator/take.js.TakeSubscriber._next (take.js:80)
    at TakeSubscriber.webpackJsonp.../../../../rxjs/Subscriber.js.Subscriber.next (Subscriber.js:89)
    at AsyncAction.webpackJsonp.../../../../rxjs/observable/IntervalObservable.js.IntervalObservable.dispatch (IntervalObservable.js:70)

@picosam . λ‚˜λŠ” 전에이 λ¬Έμ œκ°€ μžˆμ—ˆλ‹€. λ¬Έμ œλŠ” masterclusterer js νŒŒμΌμ„ κ°€μ Έ μ˜€μ§€ μ•Šμ•˜κ±°λ‚˜ masterclusterer js νŒŒμΌμ„ κ°€μ Έ 였기 전에 μ½”λ“œκ°€ Masterclustererλ₯Ό μ‚¬μš©ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

@ vugar005에 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€-사싀 μ €λŠ” κ·Έ μ½”λ“œλ₯Ό κ½€ μ˜€λž«λ™μ•ˆ κ±΄λ“œλ¦¬μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€! .js 파일이 .angular-cli.json ν¬ν•¨λ˜μ–΄ 있으며 .ts νŒŒμΌμ— import * as ... λ¬Έμ΄μ—†λŠ” 것은 μ‚¬μ‹€μž…λ‹ˆλ‹€. λ¬Όλ‘  import 문을 μˆ˜λ™μœΌλ‘œ μΆ”κ°€ν•˜λ €κ³  ν•  λ•Œ .js ν™•μž₯이 ν—ˆμš©λ˜μ§€ μ•ŠλŠ”λ‹€λŠ” 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€!

@picosam μ²œλ§Œμ—μš” . λ„μ›€μ΄λ˜μ—ˆλ‹€ λ‹ˆ λ‹€ν–‰μž…λ‹ˆλ‹€.

이 κΈ°λŠ₯은 μƒˆλ‘œμš΄ @ agm / js-marker-clusterer νŒ¨ν‚€μ§€ (# 1044)λ₯Ό 톡해 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

@SebastianM angular-google-mapsμ—μ„œμ΄ κΈ°λŠ₯을 μ‚¬μš©ν•  수있게

@andorfermichael κ·€ν•˜μ˜ μ˜ˆλŠ” ν›Œλ₯­ν•΄ λ³΄μž…λ‹ˆλ‹€! 예λ₯Ό λ“€μ–΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. κ·€ν•˜μ˜ μ˜ˆμ—μ„œ λ‚˜λŠ” 색인 νŽ˜μ΄μ§€λ₯Ό 톡해 Google지도 APIλ₯Ό ν¬ν•¨ν•˜λ €κ³ ν•˜μ§€λ§Œ Google을 찾을 수 μ—†κ±°λ‚˜ 마컀 ν΄λŸ¬μŠ€ν„° 러λ₯Ό 찾을 수 μ—†μŒ λ“±κ³Ό 같은 였λ₯˜κ°€ 계속 λ°œμƒν•©λ‹ˆλ‹€.

@jpcode μ•ˆλ…•ν•˜μ„Έμš” κ·€ν•˜μ˜ μ†”λ£¨μ…˜μ— κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€.ν•˜μ§€λ§Œ μ§€μ‹œλ¬Έμ„ μ‚¬μš©ν•˜λ©΄ agm-markerμ—μžˆλŠ” λ‚˜λ¨Έμ§€ 짝수λ₯Ό μ œμ–΄ ν•  수 μ—†λ‹€λŠ” λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. agm-marker에 μΆ”κ°€ν•˜λŠ” 방법이 μžˆμŠ΅λ‹ˆκΉŒ? λ˜λŠ” μ§€μ‹œλ¬Έμ˜ agm-markerμ—μžˆλŠ” 이벀트λ₯Ό μΆ”κ°€ν•˜λ €λ©΄?

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰