ããã«ã¡ã¯ã httpsïŒ//github.com/googlemaps/js-marker-clustererãŸãã¯ããã§ä»ã®ããŒã«ãŒã¯ã©ã¹ã¿ãŒã䜿çšããäžã§ã®ãã€ã³ã¿ã¯ãã
ç³ãèš³ãããŸããããä»ããã¢ããã€ã¹ã¯ãããŸãã
@SebastianMããããªããžã§ã¯ãã«ã¢ã¯ã»ã¹ããããšã§å®è¡ã§ãããšæããŸãããã¡ããã芧ãã ããïŒ https ïŒ
誰ããå®éã«ãããããŸãããïŒ ããŒã«ãŒã¯ã©ã¹ã¿ãŒã®jsãã¡ã€ã«ã¯ã.getMapïŒïŒããæž¡ããããããªããžã§ã¯ããæ°ã«å ¥ããªãããã§ãã
@AbdulTheProgrammerç§ã¯ãããå ¥ãã®ãåŸ ã£ãŠããŸãããç§ã®æ倧ã®åžæã¯ãããããŸãããããšã§ããïŒ ããããã£ã¬ã¯ãã£ãã§äœ¿çšããããã®ãšåãGoggleMapsAPIWrapperãµãŒãã¹ã®ã€ã³ã¹ã¿ã³ã¹ã§getMapïŒïŒãåŒã³åºããããšã¯ç¢ºãã§ããããã¯ãçŸæç¹ã§ã®ç§ã®æ倧ã®åé¡ã§ãã
ç§ã¯ã«ã¹ã¿ã ã³ã³ããŒãã³ãã䜿çšããŠãããsebm-google-mapå ã«å«ããããšã§ãããéæããŸããã GoogleMapsAPIWrapperãšnativeMapã䜿çšããŸãã
google maps javascript apiïŒwindow.google.mapsïŒã䜿çšããŠæåã§ããŒã«ãŒãè¿œå ããMarkerClustererãäœæããŸãã
ã圹ã«ç«ãŠã°å¹žãã§ãã
@ricardojbertolinã»ãã¹ãã£ã³ãããã§ææããããã«ãããã¯åœ¹ã«ç«ã¡ãŸãïŒ311ããããå ã®ã«ã¹ã¿ã ã³ã³ããŒãã³ãã¯ããã€ãã£ãããããªããžã§ã¯ãã«ã¢ã¯ã»ã¹ããæ¹æ³ã§ããããããŒãžã£ãŒãµãŒãã¹ã䜿çšããŠããŒã«ãŒãè¿œå ããããã®ããè¯ãæ¹æ³ãããã¯ãã§ãã jsapiãä»ããŠæåã§è¡ãã®ãšã¯å¯Ÿç §çã«...
ãŸããjs-marker-clustererãæ©èœãããã®ã«èŠåŽããŠããŸãã ãã€ãã£ããããã€ã³ã¹ã¿ã³ã¹ãžã®åç
§ãååŸããŸããããã€ãã£ããããããŒã«ãŒãžã®åç
§ãå¿
èŠã§ãã <sebm-google-map-marker>
ã®ãã€ãã£ããããããŒã«ãŒãååŸããæ¹æ³ãç¥ã£ãŠãã人ã¯ããŸããïŒ
@alexweber
ã«ã¹ã¿ã ã³ã³ããŒãã³ããš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ãµãŒãã¹ã®ãããã€ããŒãæå®ããŠããªãããããããã€ããŒãèŠã€ãããŸã§ã³ã³ããŒãã³ãããªãŒãäžã«ç§»åããŸãã ãã®å Žåãããã¯1ã¹ãããã§ããã sebm-google-map
ã³ã³ããŒãã³ãã§æäŸãããGoogleMapsAPIWrapperã䜿çšããŸã
@jfmaeck MarkerManager
ãµãŒãã¹ã«ã¯getNativeMarker()
ã¡ãœãããããããã®ããã«äœ¿çšã§ããŸããã©ãããŒã«ã€ããŠäžèšã®ã¡ãœããã䜿çšããŠãåãããŒã«ãŒãããŒãžã£ãŒãµãŒãã¹ã€ã³ã¹ã¿ã³ã¹ãååŸã§ããŸãã
@alexweber
ã³ãŒããèŠããšã説æã¯çã«ããªã£ãŠããŸãïŒ ããããšã:)
@alexweberã¯ããã€ãã£ãããŒã«ãŒã€ã³ã¹ã¿ã³ã¹ãååŸããæ¹æ³ã«ã€ããŠã®ãã³ããããããšãããããŸãã ïŒç§ã¯ãŸã äžã€ã®è³ªåã¯ããããæã£ãŠããgetNativeMarker()
ã®æ¹æ³MarkerManager
èŠèŸŒãSebmGoogleMapMarker
ãã®ãã©ã¡ãŒã¿ãšããŠãã€ã³ã¹ã¿ã³ã¹ïŒããŒã«ãŒæåïŒã ãã®ã³ã³ããŒãã³ããå€æ°ã«åã蟌ãã§getNativeMarkeré¢æ°ã«æž¡ãæ¹æ³ãç¥ã£ãŠããŸããïŒ
@jfmaeckåé¡ãããŸããïŒ çŸæç¹ã§ã¯100ïŒ
確å®ãã©ããã¯ç¢ºèªã§ããŸããããã³ã³ããŒãã³ãã§@ViewChild('myMarker'): SebmGoogleMapMarker
ã䜿çšããããŒã¯ã¢ããã§#
ã䜿çšããŠ@ViewChild('myMarker'): SebmGoogleMapMarker
ããããšãã§ããŸãïŒ <sebm-google-map-marker #myMarker>
just ViewChildã¯ngAfterViewInit
ã§ã®ã¿æ£ãã解決ãããããšã«æ³šæããŠãã ããã
@alexweberã
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 ïŒ
ã«ã¹ã¿ã ãããã³ã³ããŒãã³ã@ContentChildren
ïŒ @ SebastianMãææããããã«ïŒã䜿çšããŠæ©èœãããã«ã¯æ©èœããŸãããããŒã«ãŒã«ã¢ã¯ã»ã¹ããããã«äœæããã ãã§ãããè¿œå ã®ã³ã³ããŒãã³ãã
@SebastianMãš@alexweberã«æè¬ããŸãïŒ
@alexweber @SebastianMãŸããjs-marker-clustererã䜿çšãããã®ã©ã€ãã©ãªãå«ããã«ã¯ã©ãããã°ããã§ããïŒ ç¹å®ã®ãºãŒã ã¬ãã«ã§ã¯ã©ã¹ã¿ãŒã䜿çšããæ¹æ³ã¯ãããŸããïŒ ãããŠããã®ãããªã¯ã©ã¹ã¿ãŒã®ç»åãå«ããã«ã¯ã©ãããã°ããã§ããïŒ http ïŒ
@ricardojbertolinã³ãŒããå ±æã§ãããã£ã³ã¹ã¯ãããŸããïŒ ç§ã¯angular2ãåããŠäœ¿çšãïŒangularjsã1幎以äžäœ¿çšããŠããŸãïŒãå°ãè¿·ã£ãŠããŸãã
@ alexweber ã
@jpcodeç³ãèš³ãããŸãããããã°ããããã«åãçµãã§ããŸãã...
ç§ã®ãããžã§ã¯ãã®1ã€ã«å®çšçãªãœãªã¥ãŒã·ã§ã³ããããŸãã
å¿
èŠã«å¿ããŠãäŸãæããŠãã©ã³ã«ãŒããŸãšããããšãã§ããŸããïŒ
@jpcode
@alexweber
@ siegerx3ããã§ããã倧ãã«åœ¹ç«ã¡ãŸãã
ç§ã¯ã°ãŒã°ã«ãããAPI + markerclusterer.jsã䜿çšããã ãã§å¥ã®æ¹æ³ã§åããŠããŸãã
@ siegerx3 ãããã¯ã°ãŒã°ã«ãããlibã䜿çšããã ãã®åºæ¬çãªäŸã§ãïŒ
https://plnkr.co/Tr1Ykkj12HCkF9InQmuW
ä¿çäžã®POCïŒ
angle2-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ãäœæããŸãã
ã¢ãããŒãïŒ
ãŸããangular-2-google-mapsã®ä»ã®ãã£ã¬ã¯ãã£ãã䜿çšããããšãã§ããŸãããclustererããµããŒãããããã«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;
}
ã°ãŒã°ã«ãããã®ããŒãã2åé²ãæ¹æ³ã§ãangular2-google-mapsã®ãããã€ããŒã䜿çšããŸã
ã³ã³ããŒãã³ãå®çŸ©ã«ãããã€ããŒãè¿œå ããŸã
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>
@jpcode
ç§ã®ãœãªã¥ãŒã·ã§ã³ã§ã¯ãããªããèšã£ãããã«ãmaps sdkã2åããŒããããŠããŸãããããããangular2-google-mapsã©ã€ãã©ãªã«è¿œå ããå¿
èŠãããããšã«åæããŸãã
ç§ã¯agmlibã«ã§ããéãå€ãã®ããšããããå¿ èŠãªéšåãèªåã§ããããŸãã
@ siegerx3
å®äŸãzipãã¡ã€ã«ã§å
±æããŠããã ããŸããïŒ
@ hellsm83
ããã§ååãªãææ¥äœæããŸã:)
ããªãã¯angular-cliã«ç²ŸéããŠããŸããïŒ ãã以å€ã®å Žåã¯ãåºæ¬çãªãã®ãå®è¡ããŸãã
@ siegerx3
ã¯ããå°ã...ç§ã¯ã°ãŒã°ã«ãããapi +ããŒã«ãŒã¯ã©ã¹ã¿ãŒã䜿çšããŠã¯ã©ã¹ã¿ãŒåãå®è¡ããããšãã§ããŸããã 代ããã«ããœãªã¥ãŒã·ã§ã³ã®å
šäœåãææ¡ããããã«ãangular2-google-maps ...ã䜿çšããããšæããŸãã
ããªãã®å©ãã®ããã«ããããã®tnx
@ hellsm83
https://drive.google.com/open?id=0B4y4KJY7l3rPNTdqR0hyNTRqVHc
npm install
ãšng serve
ã§ãã æåã«angular-cliãã€ã³ã¹ããŒã«ããŠããªãå Žåã¯npm install angular-cli -g
ã
ããã¯æé©ãªãœãªã¥ãŒã·ã§ã³ã§ã¯ãªãããšãå¿ããªãã§ãã ããã ã¯ã©ã¹ã¿ãŒãã£ã¬ã¯ãã£ãããŸã ãªããããããã¯ç§ãè¡ã£ãåé¿çã«ãããŸããã
ç·šéïŒ
ã¢ãã ãæ©èœããŠããªãã£ãããããã©ãŒãããããããããããããªãã®ã§ãå€ãè¯ããšãã£ã¿ãŒã䜿çšããŠããŸãã^^
@ siegerx3
ã©ããããããšãã ç§ã¯ãã®è§£æ±ºçããã§ãã¯ããŸã:)
ãããAngular2 googleãããã«å«ãŸããŠããããšã«é¢ããæŽæ°ã¯ãããŸããïŒ ç§ã¯æ¬åœã«åãçµãã§ãããããžã§ã¯ãã«ããã䜿çšããå¿ èŠããããŸã
@SteveDowsett
ããªãã¯ãŸã ç§ãå«ã人ã
ãæäŸããäŸã®1ã€ã䜿ãããšãã§ããŸã:)
ãã¡ããããã§ååãªã
@ hellsm83
ãšããã§ããã¹ãŠãããŸããããŸãããïŒ ããã¯ããªããå©ããŸãããïŒ
@ siegerx3
ã¯ããããã¯ç§ã倧ãã«å©ããŸããã TnxïŒ
@ siegerx3
ç§ã¯ããªãã®äŸãèªåã§äœ¿çšãããããããŸãæ©èœãããã®ã§ã称è³ã«å€ããŸãïŒ
ããããä»ã®ç§ã®åé¡ã¯ãããŒã«ãŒãæŽæ°ã§ããªãããã«èŠããããšã§ãã ngOnChangesã䜿çšããŠãæŽæ°ããããã€ã³ãã®é åãæž¡ããŸãããé åãå€åããŠããã®ãããããŸãããé åã空ã«ãªã£ãŠãããŒã«ãŒã¯åé€ãããŸããã
ä»»æã®ãã³ãïŒ
@nanomoffet
ããã圹ã«ç«ã£ãããšã¯çŽ æŽãããã§ãïŒ
å®éãç§ã¯æ°æ¥åã«åã/åæ§ã®åé¡ã«ééããŸãããã解決çãèŠã€ããæéããŸã ãããŸããã§ããã
ãã®æäœãèŠã€ãããããã«æçš¿ããŸãã
æ°žç¶ã¯ã©ã¹ã¿ãŒã®åé¡ã®è§£æ±ºçãèŠã€ããŸããã
.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
@nanomoffet
ããäžåºŠãã®éšåã«åãçµããšãã«ãã§ãã¯ããŸããããããšã:)
ããã«ã¡ã¯ã¿ããªããã®ãã³ããããããšã
ãµãã³ã³ããŒãã³ãã䜿çšããŠ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
ããã¯ããŸãæ©èœããŸãããç§ã¯çµ±åããããšãã§ããŸãã
@sprakashg
ã¯ã©ã¹ã¿ãŒã¯ãŸã ã¢ãžã¥ãŒã«ã«å®è£
ãããŠããããã¢ãžã¥ãŒã«ã®ããŒã«ãŒã䜿çšããŠããªããããã¯ã©ã¹ã¿ãªã³ã°ã«äœ¿çšãããŠããã®ãšåãã«ã¹ã¿ã ã³ã³ããŒãã³ãã§ãã€ãã£ããããAPIã䜿çšããå¿
èŠããããšæããŸãã
ã€ãŸããããã©JavaScriptã®å Žåãšåãããã«ãã©ãã«ãšæ
å ±ãŠã£ã³ããŠãæåã§è¿œå ããŸãã
@sprakashg
ç§ã¯å®éã«ãããšåãããšã«åãçµãã§ããŸãã ã©ã€ãã©ãªã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ã§ãŠã§ã€ãã€ã³ãã䜿çšã§ããããããã§åç §ãããŠããããã«latãšlngã䜿çšã§ãããã©ããã誰ããç¥ã£ãŠããŸããïŒã
@naranmistryããããããšãå°ãæå®ã§ããŸããïŒ
ããªãã®èšç»ãæ£ç¢ºã«äœã§ãããããããŸããã å€å誰ãä»ã®äººãç解ããŠããŸããïŒ
åºæ¬çã«ãæååã®ä»£ããã«lngãšlatã®å€ããŠã§ã€ãã€ã³ãã«å ¥ããããããã«ãããã®ã§ãããããã¯angular2-google-mapsã䜿çšããŠå¯èœã§ããïŒ çµåºŠãšç·¯åºŠã®å€ã䜿çšããŠãè€æ°ã®ç¹å®ã®éäžéæ©ã®ããã«ãŒãã衚瀺ãããã®ã§
æ£ããç解ããŠããã°ããã®ã¢ãžã¥ãŒã«ãžã®æ¥ç¶ã¯è¡šç€ºãããŸããããäžè¬çã«ãããã¥ã¡ã³ããèŠããšlocation Type: string|LatLng|Place
ãšè¡šç€ºãããŠããŸãã ããã§ããã³ã³ã¹ãã©ã¯ã¿ãŒã§æ°å€ãåãåãgoogle mapsLatLngãªããžã§ã¯ãã䜿çšã§ããŸãã
ããã¯ããªããå¿ èŠãšãããã®ã§ããïŒ
åºæ¬çã«ã¯ãããã¥ã¡ã³ãã«èšèŒãããŠããããã«æž¡ãããšããã®ã§ããã倱æãç¶ããã®ã§ããã®æ¹æ³ãç¥ããããšæããŸãã latãšlngã䜿çšãããŠã§ã€ãã€ã³ãã®å®çšçãªäŸã¯ãããŸããïŒ
æ··ä¹±ããŠãã¿ãŸããããã£ãšæ確ã«ãã¹ãã§ã
ããã¯æããŸããã ããããäŸãšããŠã³ãŒããæäŸã§ãããïŒ ãã©ã³ã«ãŒã®ããã«ãç§ã¯ç§ãèŠã€ããããšãã§ãããã®ãèŠãããšãã§ããŸãã:)
ããŠãç§ã¯1ã€ããŸãšããŠã¿ãŸã
ããããšã
ç³ãèš³ãããŸãããã_marker-cluster_ãã£ã¬ã¯ãã£ãå ã®_infowindow_ã§_click event_ãã€ã³ã¿ãŒã»ããããããåããŒã«ãŒã®_sebm-google-map-info_ã³ã³ããŒãã³ããã¬ã³ããªã³ã°ãããã§ããŸããïŒ
ããããšãããããŸããïŒ
ç§ã¯åãåé¡@fsciutiãæã£ãŠããŸãã
解決çãèŠã€ããŸãããïŒ
agm-maps
ã¯ãŸã ã¯ã©ã¹ã¿ãŒããµããŒãããŠããªãã®ã§ã @ siegerx3ã®äŸãããŒã«ãŒã®å€æŽã®æ¹åãããã³@nanomoffetã®ããŒã«ãŒæ
å ±ãŠã£ã³ããŠã®äŸãåãäžããŸããã ããã§ããŸããïŒ ãããã§ãããªãã®äŸã¯å€§ãã«åœ¹ç«ã¡ãŸããã
äœããè¿ãããã«ã次ã®ãªã³ã¯ã§@ siegerx3ã®äŸã®æŽæ°ããŒãžã§ã³ãæäŸããŸãã
https://drive.google.com/open?id=0B51AX67ezltoOFdSNTQ1NlQ4SU0
次ã®å€æŽãè¡ãããŸããã
@agm/core
ã«åãããã«äŸåé¢ä¿ãæŽæ°ããŸãã@agm/core
ã«åãããã«ã³ãŒããæŽæ°ããŸãã@andorfermichaelããããã®äººã«æè¬ããŸããããªãã¯çŽ æŽãããã§ãïŒ 1ã€ã®è³ªåããé¡ãããŸãïŒãã£ã¬ã¯ãã£ãã®ã¹ã¿ã€ã«ïŒããŒã«ãŒãšã¯ã©ã¹ã¿ãŒã®äž¡æ¹ïŒãå€éšåãããå Žåãã©ã®ããã«ããã°ããã§ããïŒ åã«ã³ã³ããŒãã³ãã«ããããšãèããŸããããããªããæã£ãŠãããªãã·ã§ã³ãšã¹ã¿ã€ã«ã§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';
@andorfermichael danke noch mal !!!
ãã¡ãããå
ã«é²ãã§è€éãªã¢ã€ã³ã³ã䜿çšããããšãã§ããŸããææ°ã®Google Maps Javascriptã¢ãžã¥ãŒã«ããŒãžã§ã³ã«èšèŒãããŠããå
容ã¯ãã¹ãŠæ£ããã§ããïŒ
@picosamããæããŸããããŸã è©ŠããŠããŸãã
@andorfermichaelããã¯æ³šç®ã«å€ããä»äºã§ãð
ããããç§ã¯å°ãåé¡ã«çŽé¢ããŠããŸã
æ å ±ãŠã£ã³ããŠãã¯ãªãã¯ããŠå¥ã®ã«ãŒãã«ãªãã€ã¬ã¯ãããå¿ èŠããããŸãããæ å ±ãŠã£ã³ããŠã«ã¯ãªãã¯ã€ãã³ãããããŸããã ããã§ã代ããã«ãcloseclickãã€ãã³ãã䜿çšããŸãããã³ãŒãã¯æ¬¡ã®ãšããã§ãã
infowindow.addListener('closeclick', function () { this.router.navigate(['/blabla', id]); });
ãã¹ãŠæ£åžžã«åäœããŸãããæ
å ±ãŠã£ã³ããŠã®éãããã¿ã³ãã¯ãªãã¯ãããšãã€ãã³ããåŒã³åºãããŸããããšã©ãŒãã¹ããŒãããŸãthis.router is undefined
_ãã¡ãããã«ãŒã¿ãŒã©ã€ãã©ãªã¯ã€ã³ããŒããããã«ãŒã¿ãŒã¯ã³ã³ã¹ãã©ã¯ã¿ãŒã§å®çŸ©ãããŸã_
å¥ã®ææ³ãè©ŠããŸããã芪ã³ã³ããŒãã³ããšãã£ã¬ã¯ãã£ãã®éã§eventemitterïŒå
¥å/åºåææ³ïŒã䜿çšããŸããã
äžéšã®@Output() eventEmitter = new EventEmitter()
ãã¯ã©ã¹å€æ°ãšããŠå®çŸ©ããŸããã
ãããŠåãå Žæã§ã®ã€ãã³ãã
infowindow.addListener('closeclick', function () { this.eventEmitter(id); });
ãŸãããã¹ãŠæ£åžžã«åäœããŸãããæ
å ±ãŠã£ã³ããŠã®éãããã¿ã³ãã¯ãªãã¯ãããšãã€ãã³ããåŒã³åºãããŸããããšã©ãŒãã¹ããŒãããŸãthis.eventEmitter is undefined
ãã®åé¡ãä¿®æ£ããæ¹æ³ã¯ãããŸããïŒ
@ hossam-mauriceãšã©ãŒã®åå ã¯this
ã ãšæããŸãã ããªãã®å Žåã®this
ã¯ãã€ãã³ããçºçãããèŠçŽ ã§ããinfowindowã§ãã ãã®ãããES6 / ECMAScript2015ã§ã¯ç¢å°é¢æ°ãå°å
¥ãããŸããã ç¢å°é¢æ°ã®äœ¿çšthis
ã¯ãé¢æ°ã®åŒã³åºãæ¹æ³ã§ã¯ãªããåšå²ã®ã¹ã³ãŒãã«äŸåããŸãã
ãããã£ãŠã infowindow.addListener('closeclick', () => { this.eventEmitter(id); });
ãæ©èœããã¯ãã§ãã
詳现ã«ã€ããŠã¯ã ExploringJS-ç¢å°é¢æ°ããã³MDN-ç¢å°é¢æ°ãåç §ããŠãã ããã
@andorfermichaelã©ããããããšãããããŸãããããã¯ããŸãDð
ããã«ã¡ã¯ãç§ã¯ã°ãŒã°ã«ãã©ã€ãããã«ã¹ã¿ã ããŒã«ãŒã¯ã©ã¹ã¿ãŒã䜿çšããŸããããããŠããã¯ããŸãåããŸãã
ä»ãç§ã¯1ã€ã®åé¡ãæ±ããŠããŸããããŒã«ãŒãã¯ãªãã¯ããŠãããŒãã¹ãã©ããã¢ãŒãã«ãéãå¿
èŠããããŸãã ããããç§ã¯ãããã©ã®ããã«è¡ãããšãã§ããã®ãæ¬åœã«ããããŸããã ã¯ãªãã¯ããŠã€ãã³ããªã¹ããŒã䜿çšããŠã¢ã©ãŒãã衚瀺ããããšããŸããããæ©èœããŸãããããŒãã¹ãã©ããã¢ãŒãã«ããããããæ¹æ³ãããããŸããã äœãæ¡ã¯ïŒ
ããããšã:)
ããã«ã¡ã¯ãæ å ±ãŠã£ã³ããŠå ã«ãã¿ã³ãè¿œå ããŸããããã¯ãªãã¯ã€ãã³ãããã£ããã§ããŸããããã®æ¹æ³ã«ã€ããŠäœãèãããããŸããïŒ
@andorfermichael
ããã«ã¡ã¯è§£æ±ºçãããããšãã ãŸãããã®äžã®ããŒã«ãŒã«å¿ããŠã¯ã©ã¹ã¿ãŒã®è²ãå€æŽããã®ãæäŒã£ãŠããã ããŸãããã èµ€ãé»ãéãªã©ã
æ¬å
·
@ vugar005è²ãå€ãããšã¯ã©ãããæå³ãæ£ç¢ºã«ã¯ããããŸããã å¿ èŠã«å¿ããŠãã¯ã©ã¹ã¿ãŒã®ã€ã¡ãŒãžãç°¡åã«å€æŽã§ããŸãã ç§ã®ç¥ãéããGoogleã®ããŒã«ãŒã¯ã©ã¹ã¿ãŒã©ã€ãã©ãªã¯ãm1ããm5ïŒm =ããã©ã«ãïŒãšããååã®5ã€ã®ç°ãªãç»åãæäŸããŸãããããã®ç»åã¯ãã¯ã©ã¹ã¿ãŒãããã®ããŒã«ãŒã®æ°ãå¢ããã«ã€ããŠäœ¿çšãããŸãã æ£ç¢ºãªãããå€ã¯ããããŸããã 詳现ã«ã€ããŠã¯ã Google DevelopersMapsDocumentationãã芧ãã ããã ãããã£ãŠãç°ãªãè²ã§5ã€ã®ç»åãäœæãããããã«cluster1ããcluster5ãšããååãä»ããŠãassetsãã©ã«ããŒå ã«é 眮ããããšããå§ãããŸãã
@AlexisNiã¯ãinfoWindowã§domreadyã€ãã³ãããªãã¹ã³ããããšããããšãã§ããŸãããã®ã€ãã³ãã¯ã
google.maps.event.addListener(infoWindow, 'domready', function() {
document.getElementById('info-window-button').addEventListener('click', function(){
// run code here
});
});
詳现ã«ã€ããŠã¯ã Google Developers MapsDocumentionãã芧ãã ããã
@joaolbaptistaç³ãèš³ãããŸããããGoogleãããããŒã«ãŒãšçµã¿åãããŠãBootstrapã«ã€ããŠã®ããªãã®è³ªåã¯ç§ã®æèŠã§ã¯ãããã¯ããå€ããŠããŸãã stackoverflowã§åã質åïŒããå°ã詳现ïŒãããããšããå§ãããŸã;ïŒ
@andorfermichaelå®éã«ã¯ãã¯ã©ã¹ã¿ãŒå
ã®ããŒã«ãŒã®æ°ã«å¿ããŠã¢ã€ã³ã³ãå€æŽããããšãæå³ããŸããã ãã®ããããã€ãã£ãã®google webapiã«åãæ¿ããŸããã è§åºŠããããå°æ¥çã«ã¯ã©ã¹ã¿ãŒãµãŒãã¹ãæäŸããããšãé¡ã£ãŠããŸãã
ãšã«ããããããšãããããŸãã
@ vugar005ãããç§ã説æããããšããããšã§ãã ãã€ãã£ãã®ã°ãŒã°ã«ããã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ãã¡ã€ã«ãã€ã³ããŒãããªãã£ãããmasterclustererjsãã¡ã€ã«ãã€ã³ããŒããããåã«ã³ãŒããMasterclustererã䜿çšããããšã§ãã
ã©ããããããšã.js
ãã¡ã€ã«ã¯ç§ã®.angular-cli.json
å«ãŸããŠããã .ts
ãã¡ã€ã«ã«import * as ...
ã¹ããŒãã¡ã³ãããªãã®ã¯äºå®ã§ãã ãã¡ããã import
ã¹ããŒãã¡ã³ããæåã§è¿œå ããããšãããšã .js
æ¡åŒµåãèš±å¯ãããŠããªããšãããšã©ãŒãçºçããŸããã
@picosamã©ãããããŸããŠã ã圹ã«ç«ãŠãŠããããã§ãã
ãã®æ©èœã¯ãæ°ãã@ agm / js-marker-clustererããã±ãŒãžïŒïŒ1044ïŒããå©çšã§ããŸãã
@SebastianMãã®æ©èœãangular-google-mapsã§å©çšã§ããããã«ããŠããã ãããããšãããããŸãã ã¯ã©ã¹ã¿ãŒã®ã¯ãªãã¯ã§ã¯ãªãã¯ã€ãã³ããæ©èœãããããšããŠããŸãããçŸåšã¯å©çšã§ããªãããã§ãã åãããã®åé¿çã¯ãããŸããïŒ
@andorfermichaelããªãã®äŸã¯çŽ æŽãããèŠããŸãïŒ ãã®äŸãæäŸããŠãããŠããããšãã ããªãã®äŸã§ã¯ãã€ã³ããã¯ã¹ããŒãžã«ã°ãŒã°ã«ãããã®APIãå«ããããšããŠããŸãããã°ãŒã°ã«ãèŠã€ãããªããããŒã«ãŒã¯ã©ã¹ã¿ãŒãèŠã€ãããªããªã©ã®ãšã©ãŒãçºçãç¶ããŸãã
@jpcodeããã«ã¡ã¯ããœãªã¥ãŒã·ã§ã³ã«æè¬ããŸããããã¯æ©èœããŸããããã£ã¬ã¯ãã£ãã䜿çšãããšãagm-markerã«ããæ®ãã®å¶æ°ãå¶åŸ¡ã§ããªããšããåé¡ããããŸãã ãããagm-markerã«è¿œå ããæ¹æ³ã¯ãããŸããïŒ ãŸãã¯ããã£ã¬ã¯ãã£ãã®agm-markerã«ããã€ãã³ããè¿œå ããŸããïŒ
æãåèã«ãªãã³ã¡ã³ã
@ siegerx3ç°¡åã«èãããŸãããæåã«ã«ã¹ã¿ã ã³ã³ããŒãã³ããŸãã¯ãã£ã¬ã¯ãã£ããäœæããŸãã
ãã³ãã¬ãŒããå¿ èŠãªãã£ãããããã£ã¬ã¯ãã£ãã䜿çšããŸãããã³ã³ããŒãã³ãã䜿çšããŠãå¿ èŠã«å¿ããŠã³ã³ããŒãã³ããæå®ã§ããŸãã
èšããŸã§ããªãã䜿çšããŠããã³ã³ããŒãã³ãã®
directives
ã»ã¯ã·ã§ã³ã§ã«ã¹ã¿ã ã³ã³ããŒãã³ã/ãã£ã¬ã¯ãã£ããæå®ããå¿ èŠããããŸãã 次ã«ãã³ã³ããŒãã³ãããããå ã«ããããããŸããAngular2 DIã®åäœæ¹æ³ã«ãããGoogleMapsAPIWrapperãµãŒãã¹ã®ãããã€ããŒãæå®ããŠããªãããããããã€ããŒãèŠã€ãããŸã§ã³ã³ããŒãã³ãããªãŒãäžã«ç§»åããŸãã ãã®å Žåãããã¯1ã¹ãããã§ããã
sebm-google-map
ã³ã³ããŒãã³ãã§æäŸãããGoogleMapsAPIWrapperã䜿çšããŸã