如何使用raphael.js结合项目绘制中国地图,完成地图交互

如何使用raphael.js结合项目绘制中国地图,完成地图交互

Raphael是一个用于在网页中绘制矢量图形的Javascript库。

它使用 SVG W3C 推荐标准和 VML 作为创建图形的基础,你可以通过 JavaScript 操作 DOM 来轻松创建出各种复杂的柱状图、饼图、曲线图等各种图表,还可以绘制任意形状的图形,可以进行图表或图像的裁剪和旋转等复杂操作。   Raphaël 是跨浏览器的矢量图形库,目前支持的浏览器包括: Firefox 3.0+,Safari 3.0+,Chrome 5.0+,Opera 9.5+ 以及 Internet Explorer 6.0+。   风信建站在实际开发项目中的应用截图演示:
如何使用raphael.js结合项目绘制中国地图,完成地图交互

准备工作

我们需要准备一张矢量地图,可以从网上找一张矢量地图,或者使用illustrator绘制一份矢量地图,然后导出为SVG格式的文件,这个文件可以在浏览器上打开,然后提取里面的path路径信息(M开头的坐标)。并将path路径信息,按照chinamapPath.js的格式准备好地图路径信息。

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路径信息文件。

<script type="text/javascript" src="raphael.js"></script> 
<script type="text/javascript" src="chinamapPath.js"></script> 

然后在body中需要放置地图的位置放置div#map。

<div id="map"></div> 

JAVASCRIPT

首先我们在页面中调用地图,方法如下:

window.onload = function () { 
    //绘制地图 
    var R = Raphael("map", 600, 500);//将地图载入到id为map的div中,并设置区域为600x500px大小。 
    paintMap(R); 
} 

这个时候我们用浏览器打开会显示载入后的地图。接下来我们要给地图中的对应的省份区域加上省份名称,以及鼠标滑向每个省份区块时的变色动画效果。

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文档中找到使用说明,本文不在讲述。

此外由于地图尺寸原因,有些省份名称在地图中的显示位置不恰当,需要修正偏移量,这样看起来舒服点。

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

这样一个基本的地图效果就完成了,接下来我们要介绍结合jquery,PHP+MySQL读取数据到地图中来,并实现基本的动态加载数据和交互功能

  实用网站:   raphael.js地图演示地址:http://www.helloweba.com/demo/chinamap/   Raphael 官方网站地址:http://raphaeljs.com   Raphael 英文参考文档:http://raphaeljs.com/reference.html   Raphael 中文帮助文档:http://julying.com/lab/raphael-js/docs/

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/115171.html<

(0)
管理的头像管理
上一篇2025-02-18 00:45
下一篇 2025-02-18 00:47

相关推荐

  • 站群服务器IP段怎么选最安全,有哪些注意事项

    选择站群服务器IP段的安全核心在于IP地址的独立性、机房的路由策略以及服务商的合规资质,一个可靠的IP段必须来自持牌自营机房,具备独立C段和清洗能力,才能避免被关联风险,为什么IP段选择决定站群安全搜索引擎对IP关联的识别算法近年来越来越精细,同一C段或广播域的IP,爬虫通过反向DNS、路由跳数等特征很容易判断……

    2026-07-26
    0
  • 企业上云到底有什么实际好处,企业上云怎么选云服务商

    企业上云最大的实际好处,是把传统的机房运维包袱转化为可按需购买的专业服务,让企业成本更可控、业务更敏捷、安全更合规,成本重构:从买硬件到买服务传统企业自建机房,一次性投入大量资金购买服务器和网络设备,还得预留资源应对业务高峰,平时这些资源可能闲置浪费,上云之后,计算资源变成像水电一样按量付费的运营支出,告别资源……

    2026-07-26
    0
  • 流量清洗的工作原理到底是什么,有什么作用?

    流量清洗本质上是实时识别并过滤攻击流量,只将干净流量放行至目标服务器,是DDoS防护体系中的核心环节,为什么需要流量清洗近年来,DDoS攻击的规模和频率持续攀升,据行业报告,攻击带宽已轻松突破T级,攻击手法从单一的流量型攻击向应用层攻击演变,传统的防火墙或入侵检测系统在面对海量攻击流量时,往往自身先被耗尽,导致……

    2026-07-26
    0
  • CNNIC IP 联盟成员需要什么资质?,申请条件是什么?

    CNNIC IP联盟成员资质是互联网服务商直接从事IP地址分配与管理的官方权威身份,它意味着该服务商拥有独立、稳定的IP资源来源,是选择IDC服务时不可忽视的核心资质之一,什么是CNNIC IP联盟成员:拆解这项资质的真实含义CNNIC(中国互联网络信息中心)是国家级互联网地址资源管理机构,负责IP地址、AS号……

    2026-07-26
    0
  • 站群服务器怎么选才不会被 K 站,有哪些注意事项?

    站群服务器选不好,再好的内容也白费,核心在于IP绝对独立、环境完全隔离、运营全面合规,三者缺一不可,为什么站群服务器容易被K站搜索引擎对站群行为的打击,本质是为了打击低质量、批量复制、缺乏独立价值的站点,当多个站点共享同一IP段、相同服务器环境甚至同一套程序时,搜索引擎很容易将这些站点归为同一运营主体,进而判断……

    2026-07-26
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注