ã¯ããã« é§
ã¡ã¢ïŒããŒã ã§ãšã³ãžãã¢ãããŠãã id:wgg00sh ã§ãïŒ é§
ã¡ã¢ïŒã§ã¯2021幎11æã«ãæªååŸã®é§
ãå°å³ã§ç¢ºèªã§ããæ©èœãããªãªãŒã¹ããŸããïŒ ä»åã¯ãã®æ©èœãå®çŸããã«ããã£ãŠçºçããåé¡ã®äžäŸãšïŒãã®åé¡ãã©ã®ããã«è§£æ±ºãããã«ã€ããŠïŒäœ¿çšããå°å³ã©ã€ãã©ãªã§ãã Mapbox GL JS ã®äœ¿ãæ¹ãšåãããŠç޹ä»ããŠãããŸã å°å³äžã«å
šãŠã®é§
ã衚瀺ãã é§
ã¡ã¢ïŒã«ã¯ïŒ9300ãè¶
ããé§
ã䜿çšãããŠããã®ã§ïŒãŸãã¯ãã®å
šãŠã衚瀺ããŠã¿ãŸã âã®ãããªé§
æ
å ±ãæã£ãŠããŠïŒ export const stationList = [ [ 1, 'åœé€š' ,140.xxxxxx,41.yyyyyy ] , [ 2, 'äºçšé' ,140.xxxxxx,41.yyyyyy ] , ... ] ãã®ããŒã¿ã䜿ã£ãŠå°å³äžã«å
šãŠã®é§
ã衚瀺ããŠã¿ãŸã const stationGeoJSON = convertGeoJSON (stationList) // 座æšããŒã¿ã GeoJSON ã«å€æããåŠç map.addSource( 'station' , { type: 'geojson' , data: stationGeoJSON, } ) map.addLayer( { id: 'station' , type: 'circle' , source: 'station' , paint: { 'circle-color' : '#FF0000' , 'circle-radius' : 6, } } ) // ã¯ãªãã¯ã€ãã³ãã®è¿œå map.on( 'click' , 'station' , (e) => { new mapboxgl.Popup( { anchor: 'bottom' , } ) .setLngLat(e.lngLat) .setHTML(e.features [ 0 ] .properties.name) .addTo(map); } ) é ãããèŠãå Žå è¿ãã§èŠãå Žå ã¯ãªã㯠åé¡ç¹ ã¯ãªãã¯ããŠé§
ã®è©³ããæ
å ±ãªã©ãèŠãããšãèãããšïŒé ãããèŠãå Žåã¯é§
æ°ãå€ãããŠãŸãšãã«æäœã§ããªãã§ãïŒ ãŸãïŒããã ãã®éãæç»ããã®ã¯ïŒããã©ãŒãã³ã¹ã®èгç¹ããèŠãŠãããç¡ãããã§ã è§£æ±ºæ³ ããã§ïŒè€æ°ã®é§
ãå¯éããŠããå Žåã¯ïŒããããçºããŠå¥ã®è¡šç€ºã«ããã¯ã©ã¹ã¿åãè¡ããŸã Mapbox GL JS ã§ã¯ïŒ addSource ã®ãªãã·ã§ã³ã« cluster: true ãã€ããããšã§ïŒã¯ã©ã¹ã¿åãè¡ã£ãŠãããŸã ã¯ã©ã¹ã¿åã«é¢ãããªãã·ã§ã³ãšããŠïŒ clusterRadius clusterMinPoints clusterMaxZoom ããããŸããïŒãããã¯å®éã«äœ¿çšããããŒã¿ã«ãã£ãŠè¯ãæãã«èŠãããã©ã¡ãŒã¿ã暡玢ããã®ãè¯ããšæããŸã // é§
ããŒã¿ã®æå
¥ map.addSource( 'station' , { type: 'geojson' , data: stationGeoJSON, cluster: true , // ã¯ã©ã¹ã¿åãè¡ããªãã·ã§ã³ clusterRadius: 120, // ã¯ã©ã¹ã¿åãè¡ãååŸ clusterMinPoints: 30, // ã¯ã©ã¹ã¿åã«å¿
èŠãªæå°ã®èŠçŽ æ° } ) // ã¯ã©ã¹ã¿åãããŠããªã座æšããŒã¿ã®æç» map.addLayer( { id: 'station' , type: 'circle' , source: 'station' , filter: [ '!' , [ 'has' , 'point_count' ]] , paint: { 'circle-color' : '#FF0000' , 'circle-radius' : 6, } } ) // ã¯ã©ã¹ã¿åãããããŒã¿ã®æç» (åéšå) map.addLayer( { id: 'station_cluster' , type: 'circle' , source: 'station' , filter: [ 'has' , 'point_count' ] , // ã¯ã©ã¹ã¿åãããŠããèŠçŽ ãã®ãã§ãã¯æ¹æ³ paint: { 'circle-color' : [ 'step' , [ 'get' , 'point_count' ] , // ã¯ã©ã¹ã¿ã«å«ãŸããèŠçŽ æ°ã«å¿ããŠè²ãå€æŽ '#FF4000' , 30, '#FF8000' , 50, '#FFB000' , 100, '#FFFF00' , 300, '#FFFFFF' , ] , 'circle-radius' : [ 'step' , [ 'get' , 'point_count' ] , // ã¯ã©ã¹ã¿ã«å«ãŸããèŠçŽ æ°ã«å¿ããŠåã®å€§ãããå€æŽ 24, 30, 36, 50, 48, 100, 60, 300, 72, ] , } } ) // ã¯ã©ã¹ã¿åãããããŒã¿ã®æç» (ããã¹ãéšå) map.addLayer( { id: 'station_cluster_label' , type: 'symbol' , source: 'station' , filter: [ 'has' , 'point_count' ] , layout: { 'text-field' : '{point_count}' , 'text-size' : [ 'step' , [ 'get' , 'point_count' ] , 14, 30, 18, 50, 24, 100, 30, 300, 36, ] } } ) ãã®ããã«ããŠïŒå°å³äžã«æç»ãã倿°ã®ããŒã¿ããïŒç®çã®å Žæãæ¢ããããããæ©èœãå®çŸããããšãã§ããŸãã åè Sources | Style Specification | Mapbox GL JS | Mapbox Create and style clusters | Mapbox GL JS | Mapbox