安装heatmap
npm i maptalks.heatmap
热力分析
import { HeatLayer } from 'maptalks.heatmap' // data为坐标数组,[{x:x,y:y},{x:x,y:y}] addHeatLayer(data){ var arr = [] data.forEach(item => { const x = item.x; const y = item.y const xyz = [x,y,0.5] arr.push(xyz) }); const layer = new HeatLayer('heat', arr) layer.addTo(this.map); return layer }
安装maptalks.markercluster
npm i maptalks.markercluster
聚合分析
import {ClusterLayer} from 'maptalks.markercluster' addClusterLayer(){// 聚合分析 var markers = [] dataJson.forEach(item=>{ conso marker= new maptalks.Marker([item.geometry.x,item.geometry.y]) markers.push(marker) }) var clusterLayer = new ClusterLayer('cluster', markers, { noClusterWithOneMarker : false, maxClusterZoom : 11, symbol: { markerType: 'ellipse', markerFill: { property:'count', type:'interval', stops: [[0, 'rgb(135, 196, 240)'], [6, '#1bbc9b'], [12, 'rgb(216, 115, 149)']] }, markerFillOpacity : 0.7, markerLineOpacity : 1, markerLineWidth : 3, markerLineColor : '#fff', markerWidth: { property:'count', type:'interval', stops: [[0, 40], [9, 60], [99, 80]] }, markerHeight: { property:'count', type:'interval', stops: [[0, 40], [9, 60], [99, 80]] } }, drawClusterText: true, geometryEvents: true, single: true }) this.map.addLayer(clusterLayer) },
ClusterLayer: 点聚合图层示例:https://github.com/maptalks/maptalks.markercluster
完整示例代码:
<!DOCTYPE html> <html> <head> <title>maptalks.markercluster demo</title> <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/maptalks/dist/maptalks.min.js"></script> <link type="text/css" rel="stylesheet" href="https://cdn.jsdelivr.net/npm/maptalks/dist/maptalks.css"> <script type="text/javascript" src="../dist/maptalks.markercluster.js"></script> <script type="text/javascript" src="realworld.50000.1.js"></script> <script type="text/javascript" src="realworld.50000.2.js"></script> <style> html,body{ margin:0px; height: 100%; width: 100%; } #map { width: 100%; height:100%; } </style> </head> <body> <div id="map"></div> <script type="text/javascript" > //This demos is inspired by Leaflet.MarkerCluster //https://github.com/Leaflet/Leaflet.markercluster var map = new maptalks.Map("map",{ center: [175.27, -37.79], zoom : 14, centerCross : true, baseLayer : new maptalks.TileLayer('tile',{ urlTemplate: 'https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png', subdomains: ['a','b','c','d'], attribution: '© <a href="http://osm.org">OpenStreetMap</a> contributors, © <a href="https://carto.com/">CARTO</a>' }) }); var markers = []; // data from realworld.50000.1.js for (var i = 0; i < addressPoints.length; i++) { var a = addressPoints[i]; markers.push(new maptalks.Marker([a[1], a[0]]).on('mousedown', onClick)); } // data from realworld.50000.2.js for (var i = 0; i < addressPoints2.length; i++) { var a = addressPoints2[i]; markers.push(new maptalks.Marker([a[1], a[0]]).on('mousedown', onClick)); } var clusterLayer = new maptalks.ClusterLayer('cluster', markers, { 'noClusterWithOneMarker' : false, 'maxClusterZoom' : 18, //"count" is an internal variable: marker count in the cluster. 'symbol': { 'markerType' : 'ellipse', 'markerFill' : { property:'count', type:'interval', stops: [[0, 'rgb(135, 196, 240)'], [9, '#1bbc9b'], [99, 'rgb(216, 115, 149)']] }, 'markerFillOpacity' : 0.7, 'markerLineOpacity' : 1, 'markerLineWidth' : 3, 'markerLineColor' : '#fff', 'markerWidth' : { property:'count', type:'interval', stops: [[0, 40], [9, 60], [99, 80]] }, 'markerHeight' : { property:'count', type:'interval', stops: [[0, 40], [9, 60], [99, 80]] } }, 'drawClusterText': true, 'geometryEvents' : true, 'single': true }); map.addLayer(clusterLayer); map.on('click', function (e) { console.log(clusterLayer.identify(e.coordinate)); }); function onClick(e) { console.log(e.target); } </script> </body> </html>
发表评论