UNPKG

mapv

Version:

a library of geography visualization

469 lines (410 loc) 14 kB
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> html, body { width: 100%; height: 100%; margin: 0; padding: 0; overflow: hidden; } #map { width: 100%; height: 100%; } </style> </head> <body> <div id="map"></div> <canvas id="canvas"></canvas> <script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script> <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=1XjLLEhZhQNUzd93EjU5nOGQ"></script> <script type="text/javascript" src="../build/mapv.js"></script> <script type="text/javascript" src="js/dat.gui.min.js"></script> <script type="text/javascript"> var gui; var options = { gradient: { 0: 'yellow', 1: 'red', } }; initGui(); function initGui() { gui && gui.destroy(); gui = new dat.GUI({ nameMap: { draw: '绘制方法', } }); var gradientOptions = [ { 0: "#3fcd3c", 0.5: "#f8bf34", 1.0: "#f65e5c" }, { 0: "#8ed46a", 0.5: "#e9fb8a", 1.0: "#ed996d" }, { 0: "#8ed46a", 0.25: "#c9d868", 0.5: "#f1b658", 0.75: "#e9684c", 1: "#e3626d", }, { 0.25: "rgba(0, 0, 255, 1)", 0.55: "rgba(0, 255, 0, 1)", 0.85: "rgba(255, 255, 0, 1)", 1.0: "rgba(255, 0, 0, 1)" }, { '0': 'Black', '0.5': 'Aqua', '1': 'White' }, { '0.0': 'blue', '1': 'red' }, { '0.0': 'rgb(0, 0, 0)', '0.6': 'rgb(24, 53, 103)', '0.75': 'rgb(46, 100, 158)', '0.9': 'rgb(23, 173, 203)', '1.0': 'rgb(0, 250, 250)' }, { '0': 'Navy', '0.25': 'Blue', '0.5': 'Green', '0.75': 'Yellow', '1': 'Red' }, { '0': 'Black', '0.33': 'DarkRed', '0.66': 'Yellow', '1': 'White' }, { '0': 'Black', '0.4': 'Purple', '0.6': 'Red', '0.8': 'Yellow', '1': 'White' }, { '0': 'Red', '0.66': 'Yellow', '1': 'White' }, { '0': 'Navy', '0.25': 'Navy', '0.26': 'Green', '0.5': 'Green', '0.51': 'Yellow', '0.75': 'Yellow', '0.76': 'Red', '1': 'Red' }, { '0': 'rgba(55, 55, 255, 0.6)', '0.3': 'rgba(55, 55, 255, 0.6)', '0.31': 'rgba(55, 255, 50, 0.6)', '0.7': 'rgba(55, 255, 50, 0.6)', '0.71': 'rgba(255, 50, 50, 0.6)', '1': 'rgba(255, 50, 50, 0.6)' }, { '0.00': 'rgb(255,0,255)', '0.25': 'rgb(0,0,255)', '0.50': 'rgb(0,255,0)', '0.75': 'rgb(255,255,0)', '1.00': 'rgb(255,0,0)' }, { 0: "yellow", 1.0: "red" }, { 0: "white", 1.0: "blue" }, { 0: "green", 1.0: "rgb(0, 255, 255)" }, { 0: "green", 0.5: "yellow", 1.0: "red" }, { 0: "lightgreen", 1.0: "darkgreen" }, { 0: "lightgreen", 1.0: "darkgreen" } ]; gui.addGradient(options, 'gradient', gradientOptions).onFinishChange(finished); } function finished() { mapvLayer.update({ options: { gradient: options.gradient } }); } // 百度地图API功能 var map = new BMap.Map("map", { enableMapClick: false }); // 创建Map实例 map.centerAndZoom(new BMap.Point(105.403119, 38.028658), 5); // 初始化地图,设置中心点坐标和地图级别 map.enableScrollWheelZoom(true); // 开启鼠标滚轮缩放 map.setMapStyle({ styleJson: [ { "featureType": "all", "elementType": "all", "stylers": { "visibility": "off" } }, { "featureType": "background", "elementType": "all", "stylers": { "color": "#ffffff", "visibility": "on" } } ] }); map.getContainer().style.background = '#fff'; var pt = new BMap.Point(127.733142,21.226515); var jiuduanwidth = 408; var jiuduanheight = 563; var scale = 4.5; var myIcon = new BMap.Icon("./images/nanhai.png", new BMap.Size(jiuduanwidth / scale, jiuduanheight / scale), { imageSize: new BMap.Size(jiuduanwidth / scale, jiuduanheight / scale) }); var marker2 = new BMap.Marker(pt,{icon:myIcon}); // 创建标注 map.addOverlay(marker2); marker2.enableDragging(); var mapvLayer = null; $.get('data/china.json', function(geojson) { var geojsonOptions = { zIndex: 3, max: 3, draw: 'simple' } var geojsonDataSet = mapv.geojson.getDataSet(geojson); var to = '甘肃'; // 如是迁出,则填写迁出 var showType = '迁入'; var isShowTo = true; var qianxi = new mapv.DataSet([ { from: '上海', to: '苏州', count: 3, }, { from: '保定', to: '北京', count: 3, }, { from: '廊坊', to: '北京', count: 3, }, { from: '北京', to: '天津', count: 2, }, { from: '重庆', to: '成都', count: 2, }, { from: '张家口', to: '北京', count: 2, }, { from: '上海', to: '杭州', count: 2, }, { from: '南通', to: '上海', count: 1, }, { from: '承德', to: '北京', count: 1, }, { from: '上海', to: '嘉兴', count: 1, }, ]); var qianxiData = qianxi.get(); var lineData = []; var pointData = []; var textData = []; var timeData = []; var citys = {} for (var i = 0; i < qianxiData.length; i++) { var fromColumn = showType == '迁入' ? 'from' : 'to'; var toColumn = showType == '迁入' ? 'to' : 'from'; var fromCenter = mapv.utilCityCenter.getCenterByCityName(qianxiData[i][fromColumn]); var toCenter = mapv.utilCityCenter.getCenterByCityName(qianxiData[i][toColumn]); if (!fromCenter || !toCenter) { continue; } var point = citys[qianxiData[i].from] = qianxiData[i].count; var point = showType == '迁入' ? fromCenter : toCenter; pointData.push( { geometry: { type: 'Point', coordinates: [point.lng, point.lat] }, text: i + 1 } ); textData.push( { geometry: { type: 'Point', coordinates: [point.lng, point.lat] }, text: qianxiData[i].from } ); textData.push( { geometry: { type: 'Point', coordinates: [toCenter.lng, toCenter.lat] }, text: qianxiData[i].to } ); var curve = mapv.utilCurve.getPoints([fromCenter, toCenter]); for (j = 0; j < curve.length; j++) { timeData.push({ geometry: { type: 'Point', coordinates: curve[j] }, count: 1, time: j }); } lineData.push({ geometry: { type: 'LineString', coordinates: curve //coordinates: [[fromCenter.lng, fromCenter.lat], [toCenter.lng, toCenter.lat]] }, count: 30 * Math.random() }); } /* var data = geojsonDataSet.get({ filter: function (item) { for (var i = 0; i < qianxiData.length; i++) { if (item.name == qianxiData[i].from || item.name == qianxiData[i].to) { item.fillStyle = 'rgba(255, 65, 256, 1)'; return true; } } return false; } }); var layerDataSet = new mapv.DataSet(data); mapvLayer = new mapv.baiduMapLayer(map, layerDataSet, geojsonOptions); */ var chinaLayer = new mapv.baiduMapLayer(map, geojsonDataSet, { draw: 'simple', lineWidth: 0.8, strokeStyle: 'rgba(255, 255, 255, 1)', fillStyle: 'rgba(218, 218, 218, 1)' }); var textDataSet = new mapv.DataSet(textData); var textOptions = { draw: 'text', font: 'bold 14px Arial', avoid: true, fillStyle: 'black', zIndex: 200, shadowBlur: 10 } var textMapvLayer = new mapv.baiduMapLayer(map, textDataSet, textOptions); var lineDataSet = new mapv.DataSet(lineData); var lineOptions = { strokeStyle: 'rgba(255, 50, 50, 0.8)', shadowColor: 'rgba(255, 250, 50, 1)', shadowBlur: 20, lineWidth: 2, zIndex: 100, draw: 'simple' } var lineLayer = new mapv.baiduMapLayer(map, lineDataSet, lineOptions); var pointOptions = { fillStyle: 'rgba(255, 250, 250, 0.5)', strokeStyle: 'rgba(255, 250, 250, 1)', lineWidth: 1, size: 10, zIndex: 300, draw: 'simple' } var pointDataSet = new mapv.DataSet(pointData); //var pointLayer = new mapv.baiduMapLayer(map, pointDataSet, pointOptions); /* var numberLayer = new mapv.baiduMapLayer(map, pointDataSet, { fillStyle: 'black', zIndex: 300, draw: 'text' }); */ var timeDataSet = new mapv.DataSet(timeData); console.log(timeData); var timeOptions = { fillStyle: 'rgba(255, 250, 250, 0.5)', zIndex: 150, size: 2.5, animation: { type: 'time', stepsRange: { start: 0, end: 50 }, trails: 10, duration: 2, }, draw: 'simple' } var timeMapvLayer = new mapv.baiduMapLayer(map, timeDataSet, timeOptions); }); </script> </body> </html>