【问题标题】:amChart heat Location-sensitive mapamChart heat 位置敏感地图
【发布时间】:2017-04-26 06:21:36
【问题描述】:

我正在尝试在我的应用程序中实现this demo,但无论值如何,我都会将整个地图变为黑色。这是我的代码:

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();
}

为了根据值获取颜色范围,我还应该做些什么吗?

【问题讨论】:

  • 您的项目中是否包含光源主题?
  • @barbsan 是的,我已经加入了 amchart.js、ammap.js 和 light theme

标签: javascript amcharts ammap


【解决方案1】:

在本地运行代码时,使用 AmCharts 网站上的 SVG 作为源时,您可能会遇到跨源问题(尤其是如果您的本地环境是 http - 包含是 https)。

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

iranLow.js 包括(在 ammap.js 之后):

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

修改dataprovider定义

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

下面的演示:

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>

【讨论】:

  • 是否有任何解决方案来覆盖 onclick 事件并使用查询字符串创建超链接以定位每个省份的 url 位置?
  • 您可以通过在 listeners 数组中为 clickMapObject (scroll down for the event) 添加一个侦听器来添加自己的点击处理程序,并使用它来获取点击省份的对象信息以执行您需要的任何操作。如果您需要更多帮助或详细示例,请将其作为单独的问题发布,因为这不适合在 StackOverflow 上劫持其他人的帖子以提出不相关的问题。
猜你喜欢
  • 2016-12-15
  • 2014-05-25
  • 2011-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-15
  • 2010-09-12
  • 1970-01-01
相关资源
最近更新 更多