源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2020-01-27 11:10 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:raphael.js绘制中国地图 地图绘制方法
最近的数据统计项目中要用到中国地图,也就是在地图上动态的显示某个时间段某个省份地区的统计数据,我们不需要flash,仅仅依靠raphael.js以及SVG图像就可以完成地图的交互操作。在本文中,我给大家分享如何使用js来完成地图交互。 [img]http://files.jb51.net/file_images/article/201402/20140212102852.jpg?2014112103917[/img] 先简单介绍下raphael.js,raphael.js是一个很小的javascript库,它可以在网页中实现绘制各种矢量图、各类图表、以及图像裁剪、旋转、运动动画等等功能。此外raphael.js还跨浏览器兼容,而且还兼容老掉牙的IE6啊。raphael.js的官网地址: http://raphaeljs.com/ 准备工作 我们需要准备一张矢量地图,可以从网上找一张矢量地图,或者使用illustrator绘制一份矢量地图,然后导出为SVG格式的文件,这个文件可以在浏览器上打开,然后提取里面的path路径信息(M开头的坐标)。并将path路径信息,按照chinamapPath.js的格式准备好地图路径信息。
[u]复制代码[/u] 代码如下:
var china = []; function paintMap(R) {     var attr = {         "fill": "#97d6f5",         "stroke": "#eee",         "stroke-width": 1,         "stroke-linejoin": "round"     };     china.aomen = {         name: "澳门",         path: R.path("M413.032,.........省略若干......... ,414.183z").attr(attr)     }     china.hk = {         //格式同上     }; }
以上是我们将准备好的地图路径信息封装到()函数中,并保存文件名为chinamapPath.js,供后面调用。 HTML 首先在head部分载入raphael.js库文件和chinamapPath.js路径信息文件。  
[u]复制代码[/u] 代码如下:
<script type="text/javascript" src="raphael.js"></script> <script type="text/javascript" src="chinamapPath.js"></script>
然后在body中需要放置地图的位置放置div#map。  
[u]复制代码[/u] 代码如下:
<div id="map"></div>
JAVASCRIPT 首先我们在页面中调用地图,方法如下:
[u]复制代码[/u] 代码如下:
window.onload = function () {     //绘制地图     var R = Raphael("map", 600, 500);//将地图载入到id为map的div中,并设置区域为600x500px大小。     paintMap(R); }
这个时候我们用浏览器打开会显示载入后的地图。接下来我们要给地图中的对应的省份区域加上省份名称,以及鼠标滑向每个省份区块时的变色动画效果。
[u]复制代码[/u] 代码如下:
window.onload = function () {     var R = Raphael("map", 600, 500);     //调用绘制地图方法     paintMap(R);     var textAttr = {         "fill": "#000",         "font-size": "12px",         "cursor": "pointer"     };                 for (var state in china) {         china[state]['path'].color = Raphael.getColor(0.9);         (function (st, state) {             //获取当前图形的中心坐标             var xx = st.getBBox().x + (st.getBBox().width / 2);             var yy = st.getBBox().y + (st.getBBox().height / 2);             //写入文字             china[state]['text'] = R.text(xx, yy, china[state]['name']).attr(textAttr);             st[0].onmouseover = function () {//鼠标滑向                 st.animate({fill: st.color, stroke: "#eee"}, 500);                 china[state]['text'].toFront();                 R.safari();             };             st[0].onmouseout = function () {//鼠标离开                 st.animate({fill: "#97d6f5", stroke: "#eee"}, 500);                 china[state]['text'].toFront();                 R.safari();             };          })(china[state]['path'], state);     } }
以上代码中运用了raphael提供的方法有:getColor,getBBox,animate,toFront等等,这些可以在raphael文档中找到使用说明,本文不在讲述。 此外由于地图尺寸原因,有些省份名称在地图中的显示位置不恰当,需要修正偏移量,这样看起来舒服点。
[u]复制代码[/u] 代码如下:
window.onload = function () {     var R = Raphael("map", 600, 500);     ...     for (var state in china) {         ...         (function (st, state) {             ....             switch (china[state]['name']) {                 case "江苏":                     xx += 5;                     yy -= 10;                     break;                 case "河北":                     xx -= 10;                     yy += 20;                     break;                 case "天津":                     xx += 10;                     yy += 10;                     break;                 case "上海":                     xx += 10;                     break;                 case "广东":                     yy -= 10;                     break;                 case "澳门":                     yy += 10;                     break;                 case "香港":                     xx += 20;                     yy += 5;                     break;                 case "甘肃":                     xx -= 40;                     yy -= 30;                     break;                 case "陕西":                     xx += 5;                     yy += 10;                     break;                 case "内蒙古":                     xx -= 15;                     yy += 65;                     break;                 default:             }             ...       })(china[state]['path'], state);    } }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部