2017-04-26 42 views
1

我试图在我的应用中实现this demo,但无论值如何,我都会获得全黑地图。这里是我的代码:amChart heat位置敏感地图

var map = AmCharts.makeChart("chartdiv", { 
"type": "map", 
"theme": "light", 
"colorSteps": 10, 
"dataProvider": { 
    "mapURL": "https://www.amcharts.com//lib/3/maps/svg/iranLow.svg", 
    "getAreasFromMap": true, 
    "zoomLevel": 0.9, 
    "areas": [] 
}, 
"areasSettings": { 
    "autoZoom": true, 
    "balloonText": "[[title]]: <strong>[[value]]</strong>" 
}, 
"valueLegend": { 
    "right": 10, 
    "minValue": "little", 
    "maxValue": "a lot!" 
}, 
"zoomControl": { 
    "minZoomLevel": 0.9 
}, 
"titles": 'titles', 
"listeners": [ { 
    "event": "init", 
    "method": updateHeatmap 
} ] 
}); 


function updateHeatmap(event) { 
var map = event.chart; 
if (map.dataGenerated) 
    return; 
if (map.dataProvider.areas.length === 0) { 
    setTimeout(updateHeatmap, 100); 
    return; 
} 
for (var i = 0; i < map.dataProvider.areas.length; i++) { 
    map.dataProvider.areas[ i ].value = Math.round(Math.random() * 10000); 
} 
map.dataGenerated = true; 
map.validateNow(); 
} 

有什么我应该做的,以获得基于值的颜色范围?

+0

您是否在项目中包含光源主题源? – barbsan

+0

@barbsan是的,我已经包含了'amchart.js','ammap.js'和'light theme' – mhesabi

回答

3

在AmCharts网站上使用SVG作为源代码时,如果您的本地环境是http - include是https,那么您很可能会遇到跨源问题。

理想情况下,您应该使用地图JavaScript代替SVG文件。尝试包括iranLow.js地图JavaScript文件,并使用map: "iranLow"而不是mapURL: 'path/to/svg'

iranLow.js包括(后ammap.js):下面

"dataProvider": { 
    "map": "iranLow", 
    "getAreasFromMap": true, 
    "zoomLevel": 0.9, 
    "areas": [] 
}, 

演示

<script type="text/javascript" src="https://www.amcharts.com/lib/3/maps/js/iranLow.js"></script> 

改性dataprovider定义:

var map = AmCharts.makeChart("chartdiv", { 
 
"type": "map", 
 
"theme": "light", 
 
"colorSteps": 10, 
 
"dataProvider": { 
 
    "map": "iranLow", 
 
    "getAreasFromMap": true, 
 
    "zoomLevel": 0.9, 
 
    "areas": [] 
 
}, 
 
"areasSettings": { 
 
    "autoZoom": true, 
 
    "balloonText": "[[title]]: <strong>[[value]]</strong>" 
 
}, 
 
"valueLegend": { 
 
    "right": 10, 
 
    "minValue": "little", 
 
    "maxValue": "a lot!" 
 
}, 
 
"zoomControl": { 
 
    "minZoomLevel": 0.9 
 
}, 
 
"titles": 'titles', 
 
"listeners": [ { 
 
    "event": "init", 
 
    "method": updateHeatmap 
 
} ] 
 
}); 
 

 

 
function updateHeatmap(event) { 
 
var map = event.chart; 
 
if (map.dataGenerated) 
 
    return; 
 
if (map.dataProvider.areas.length === 0) { 
 
    setTimeout(updateHeatmap, 100); 
 
    return; 
 
} 
 
for (var i = 0; i < map.dataProvider.areas.length; i++) { 
 
    map.dataProvider.areas[ i ].value = Math.round(Math.random() * 10000); 
 
} 
 
map.dataGenerated = true; 
 
map.validateNow(); 
 
}
#chartdiv { 
 
    width: 100%; 
 
    height: 300px; 
 
}
<script type="text/javascript" src="https://www.amcharts.com/lib/3/ammap.js"></script> 
 
<script type="text/javascript" src="https://www.amcharts.com/lib/3/themes/light.js"></script> 
 
<script type="text/javascript" src="https://www.amcharts.com/lib/3/maps/js/iranLow.js"></script> 
 
<div id="chartdiv"></div>

+0

覆盖onclick事件的任何解决方案,并创建超链接querystring为每个省份的目标url位置? –

+1

您可以添加您自己的点击处理程序,方法是为侦听器数组中的['clickMapObject'(向下滚动查看事件)](https://docs.amcharts.com/3/javascriptmaps/AmMap#events)添加一个侦听器,然后使用它来获取被点击的省的对象信息来做你需要的任何事情。如果您需要更多帮助或详细示例,请将其作为单独问题发布,因为这不适合在StackOverflow上劫持别人的帖子来问一个不相关的问题。 – xorspark