`
z272705615
  • 浏览: 17426 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Raphael+D3实现中国热点地图

阅读更多

Raphael为矢量图形提供了完美的跨浏览器实现方案。在支持SVG的浏览器中,它将代码渲染成SVG格式,在不支持SVG的浏览器中则会渲染为VML格式。只要对SVG有一定了解,上手Raphael也会很简单。

D3.js是个比较流行的数据可视化库,通过将数据绑定到DOM,再映射到document中

 

使用Raphael实现一张中国地图:

var R = Raphael(divId, 560, 470);
		var SetProvicePath = R.set();
		var SetProviceText = R.set();
		var ProvicePathattr = {
			"fill" : "#f1f1f1",
			"stroke" : "#FDFDFF",
			"stroke-width" : 1,
			"fill-opacity" : 0.85
		};
		var ProviceTextattr = {
			"font-size" : 18,
			"font-family" : "Microsoft YaHei"
		};
		initMAPDATA(data);
		var maxdata = getMaxdata(MAPDATA);
		var mindata = getMindata(maxdata);
//初始化地图			
        

var china = {};
        china.aomen = { 
			province	: "澳门",
			path	: R.path("m 320.48227,337.56839 -1.7466,3.57753 c 0,0 1.61743,1.80305 3.60238,2.21758 1.98495,0.41451 3.62967,-1.00669 3.62967,-1.00669 l -5.48545,-4.78842 z").click(function(){clickCallBack(MAPDATA[0]["province"])})};
		china.hongkong = { 
			province	: "香港",
			path	: R.path("m 323.68571,334.54146 3.394,0.773 3.453,-2.558 1.666,4.582 c 0,0 -5.521,2.673 -3.691,1.785 1.828,-0.884 -4.641,-0.355 -4.641,-0.355 l -0.834,-3.454 0.653,-0.773 z").click(function(){clickCallBack(MAPDATA[1]["province"])})};
		china.taiwan = { 
			province	: "台湾",
			path	: R.path("m 403.3008,304.32526 -10.269,20.78425 -4.0012,6.449 -1.746,5.7312 -2.1471,1.30283 -2.2631,-6.43526 -3.3147,-3.95553 -0.8126,-10.2486 c 0,0 1.3916,-6.3798 3.0525,-8.58559 1.6614,-2.20336 11.0085,-14.61837 11.0085,-14.61837 l 9.1572,-4.69683 4.0557,2.96161 -2.7201,11.31117 z").click(function(){clickCallBack(MAPDATA[2]["province"])})};		
……	
   

 

使构造搞的地图实现自适应大小和动画:

 

//适应大小
var trans = [ "s", width / 560, height / 470, width / 2, height / 2 ];
	for ( var i in china) {
		SetProvicePath.push(china[i]['path']);
	}
	SetProvicePath.attr(ProvicePathattr).transform(trans);
//动画
	SetProvicePath.mouseover(function(){
	             this.animate({"stroke-width": 2.7}, 1000, "elastic");
	}).mouseout(function(){
	             this.animate({"stroke-width": 1}, 1000, "elastic");
	});

Raphael会按照代码的顺序渲染矢量图,如我们代码中第一个是澳门,在浏览器中渲染出的<path>或<shape>第一个也将是澳门,所以随后使用D3绑定数据时,要注意按照<path>的顺序初始化好数据。

 

使用D3将数据绑定到渲染好的矢量图中以便让其控制热点的呈现,因为低版本的IE不支持D3所以不用考虑使用D3处理VML图形。

 

//根据数据着色	
       var ProviceFILLCOLOR = d3.scale.quantile().domain([mindata, maxdata]).range([0, 1, 2, 3, 4, 5, 6]);
       d3.select(divId).selectAll("svg").selectAll("path").data(MAPDATA).style("fill", function(d){return FILLCOLOR[ProviceFILLCOLOR(d["data"])]}).append("svg:title").text(function(d){return d["province"] + "\n热度:" + d });

 scale方法会根据热度是最大差别自动将其映射到颜色数组中。


最终的体现效果如图。


  • 大小: 17.6 KB
  • 大小: 19.6 KB
分享到:
评论
1 楼 michelya 2013-07-25  
想问一下,你svg path点怎么得到的

相关推荐

    Raphael 开发中国省份地图

    该 Demo 是使用 Raphael 制作中国省份地图,结合 jquery 实现一 些动态点击效果,并且使用扩展 Raphael 内核,可以动态调整地图画布的大 小,还实现了点击动态生成热点数据的图形开发,具体界面请参照工程包中 图...

    Raphael 开发中国省份地图 加入箭头功能

    该 Demo 是使用 Raphael 制作中国省份地图,结合 jquery 实现一 些动态点击效果,并且使用扩展 Raphael 内核,可以动态调整地图画布的大 小,还实现了点击动态生成箭头数据的开发,在一个画布上勾勒箭头图形,具 ...

    Raphael 开发中国大区,片区地图

    该 Demo 是使用 Raphael 制作中国大区、片区地图,结合 jquery 实现一 些动态点击效果,并且使用扩展 Raphael 内核,可以动态调整地图画布的大 小,还实现了点击动态生成热点数据的图形开发,具体界面请参照工程包...

    raphael中文帮助文档(API).chm

    raphael中文帮助文档(API)chm文档,因为在网上没有找到好的离线版的,都是在线的,所以自己根据在线的生成了一个chm帮助文档,下载了,绝对不会让你失望。

    jquery+raphael实现3D饼状图

    在使用jQuery和Raphael实现3D饼状图时,我们需要遵循以下步骤: 1. **引入库**:首先,在HTML文件(如text.html)中,我们需要引入jQuery和Raphael库的链接。这通常通过`&lt;script&gt;`标签完成,确保jQuery在Raphael...

    raphael吉林省地图

    在这个“raphael吉林省地图”项目中,开发者运用Raphaël库来绘制了详细的吉林省地图,展示了该省各市区的边界和分布。 SVG是一种XML格式,用于定义二维图形,它可以包含路径、形状、文本、图像和滤镜等元素,并且...

    Mapael基于raphaeljs用于显示动态矢量地图的jQuery插件

    Mapael是一款强大的jQuery插件,它利用raphael.js库来创建和展示动态的矢量地图。这个插件专为在Web应用中展示交互式地图而设计,提供了丰富的自定义选项和功能,使得开发者能够轻松地构建出具有各种交互效果的地图...

    基于jquery+raphael实现的可拖动树形图

    "基于jquery+raphael实现的可拖动树形图"就是一个这样的解决方案,它结合了jQuery、Raphaël库,以及SVG技术来构建一个动态的、用户可操作的树状表示形式。下面我们将深入探讨这些技术及其在实现此项目中的应用。 1...

    Raphaeljs 插件实现任意SVG节点加载

    **RaphaelJS插件实现任意SVG节点加载** RaphaelJS是一个强大的JavaScript库,它使得在Web浏览器中创建和操作SVG(可缩放矢量图形)变得简单。SVG是一种基于XML的图形格式,允许创建高质量、可缩放的图形,无论是在...

    raphael实现双击实现动态编辑文字

    本文将深入探讨如何利用Raphaël库实现双击文字后进行在线编辑的功能。 首先,理解Raphaël中的文字对象是关键。在Raphaël中,你可以通过`paper.text(x, y, text)`方法创建一个文本元素,其中`x`和`y`是文字的起始...

    raphael.js绘制中国地图 地图绘制方法

    在本文中给大家分享如何使用raphael.js来完成地图交互,raphael.js是一个很小的javascript库,它可以在网页中实现绘制各种矢量图、各类图表、以及图像裁剪、旋转、运动动画等等功能,需要的朋友可以参考下

    论文研究-一种基于D3和Raphael的交互式数据可视化模型 .pdf

    数据可视化是一种通过图形、图形、地图、动画等生动的形式展现数据的技术,目的在于帮助人们更好地理解和使用数据分析结果。数据可视化模型可以借助图形化的手段清晰高效地传达信息。当前,Web应用中的可视化模型...

    Raphael.JSON Raphael.Export Raphael.FreeTransform raphael.serialize

    Raphael.js是一个强大的JavaScript库,专门用于在Web浏览器中创建矢量图形。它提供了一种在SVG(可缩放矢量图形)和VML(Vector Markup Language)之间无缝切换的方法,使得开发者能够在所有现代浏览器以及IE5.5及更...

    Learning Raphael JS Vector Graphics 书+源码

    5. **高级应用**:可能涵盖图表制作、地图绘制、游戏开发、用户界面设计等实际应用场景,展示Raphael.js在复杂项目中的实用性。 6. **源码分析**:书中提供的源码可能是作者为了帮助读者深入理解Raphael.js的工作...

    raphael.js实现紧凑格子循环

    挂一个资源,看看能不能吸点积分... 临时简单弄的,通过raphael.js布置循环关系的数组,其它的拓扑图美观是美观,可惜布局太分散,定位太随机,有点强迫症的...2,raphael.cards.js --布局实现 3,cards.htm --布局调用显示

    raphaeljs_starter

    《raphaeljs_starter》是一本专注于RaphaelJS这一强大跨浏览器兼容的矢量图形库的教程书籍,由A. Krishnasagar编写,旨在帮助读者掌握如何轻松地创建交互式的2D图形和动画。本书由Packt Publishing出版,首次出版于...

    raphael.js扩展的拖拽功能,raphael.draggable.js,raphael.extension.js

    在实际应用中,使用`raphael.draggable.js`和`raphael.extension.js`可以让开发者在不离开Raphael.js的舒适区的情况下,实现更丰富的交互性和动态性。例如,你可以创建一个可拖动的地图,用户可以通过拖动来浏览不同...

    raphael

    raphael

    php和jquery实现地图区域数据统计展示数据示例

    在这个示例中,Raphael.js用于绘制中国地图,提供省份区块,并允许动态改变区块的颜色和样式。 2. **jQuery**:一个强大的JavaScript库,简化了DOM操作、事件处理和动画等功能。在这个例子中,jQuery负责监听用户的...

Global site tag (gtag.js) - Google Analytics