在我们平时做的很多网站项目中都会需要绘制各种各样的二维矢量图形。比如做城市地下管网的断面图、管线管点的坐标位置矢量标识图、钻孔位置或地层剖面图等等。我们有很多种方法来绘制这些矢量图(vml、canvas、svg等等),下面我要介绍的是SVG绘图语言,也是我在做项目中用到比较多的,仅以我的个人实战经验分享给大家,供大家参考:

一、SVG基础知识

  SVG是一种矢量标记语言,网上也有很多关于SVG的理论知识描述,大家可以自己去百度学习,比较通俗地说,SVG是一种语言,是一块画布,在这块画布上,用户可以按照它的语言格式,调方法创建图形节点,从而去绘制各种点、线、面、矩形、多边形、圆形、贴图等等,从而画出自己想要的二维图形效果。

  注意:SVG最主要的一个应用就是绘制的二维图可缩放,每个节点均可添加点击或各种响应事件,这也是很多项目应用中需要用到它的原因和好处。

  (1)线段

     SVG标记节点:

      <line x1="0" y1="0" x2="300" y2="300" style="stroke:rgb(99,99,99);stroke-width:2"/>

  (2)折线

     SVG标记节点:

      <polyline points="0,0 0,20 20,20 20,40 40,40 40,60" style="fill:white;stroke:red;stroke-width:2"/>

  (3)圆

     SVG标记节点:

      <circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red"/>

  (4)矩形

    SVG标记节点:

      <rect width="300" height="100" style="fill:rgb(0,0,255);stroke-width:1; stroke:rgb(0,0,0)"/>

    脚本中动态创建(其它几类节点类似,可百度查找到方法):

      var rect=document.createElementNS('http://www.w3.org/2000/svg','rect'); 
            rect.setAttribute("id","rect"); 
            rect.setAttribute("x",0); 
            rect.setAttribute("y",0); 
            rect.setAttribute("width",200); 
            rect.setAttribute("height",200); 
            rect.setAttribute("fill",'red'); 
            svg.appendChild(rect); //svg为页面中添加的svg根节点

  (5)多边形

    SVG标记节点:

      <polygon points="220,100 300,210 170,250" style="fill:#cccccc;stroke:#000000;stroke-width:1"/>

  (6)路径

    SVG标记节点:

    <path d="M250 150 L150 350 L350 350 Z" />

  (7)贴图

    可以在多边形中平铺或填充图片,从而达到显示剖面纹理图的效果。

    先定义svg标签(背景图的引用标签defs和绘图区域标签g)

    

    多边形绘制(1、添加背景图的定义;2、多边形填充图片的定义名):

    

二、实际应用

  (1)基本的点线剖面图

    所有涉及到简单的绘制点、线、多边形等剖面图的都可以自己在js脚本中动态创建节点来绘制。

  (2)二维地图绘制:

    可在ArcMap中将矢量二维地图数据导出成SVG文件,导出过程中可以设置文字标识、颜色等等信息,导出的SVG文件即可以嵌入到网页中显示了。

  (3)管网拓扑图:

    与上面的二维地图绘制一样,将管网shp数据在ArcMap中打开,导出成SVG文件,然后嵌入到网页中显示。

      

  (4)地层剖面图

    该应用涉及到地质相关业务,总之,剖面得到的多边形可以通过SVG动态创建多边形节点,然后填充纹理图片路径,便可以显示各个地层多边形的纹理图了

作者:Ares_perfect

出处:http://www.cnblogs.com/onlyperfect/

本文以学习、研究和分享为主,如需转载,请联系本人,标明作者和出处,非商业用途!

SVG绘图学习总结的更多相关文章

  1. H5新特性——--第三方绘图工具库 echarts(canvas)---SVG绘图

    今天学习的内容 3.1:h5新特性---第三方绘图工具库 echarts(canvas) 百度 echarts;d3;two.js;.... 3.2:h5新特性---SVG绘图 3.2:h5新特性-- ...

  2. HTML5_04之SVG绘图

    1.关于Canvas绘制图像: 问题:需要绘制多张图片时,必须等待所有图片加载完成才能开始绘制:而每张图片都是异步请求,彼此没有先后顺序,哪一张先加载完成完全无法预测: 方案: var progres ...

  3. Java Web-servlet、HTTP in servlet和捎带的Java绘图学习

    Java Web-servlet.HTTP in servlet和捎带的Java绘图学习 server applet:运行在服务器端的小程序 动态项目的动态内容的java类依赖于服务器才能运行,由to ...

  4. SVG相关学习(一)SVG基础

    SVG 相关学习 SVG SVG 指可伸缩矢量图形 (Scalable Vector Graphics) SVG viewBox <svg width="500" heigh ...

  5. svg的学习

    svg的学习 1,初步了解 1,大致看了一下svg的简介,在图形的操作和展示上有很大的优势,例如不会失精:灵活的dom操作:很好的兼容性(IE需要下载插件).so,是一门值得深究的前端课程: 2,看了 ...

  6. HTML5 十大新特性(五)——SVG绘图

    相对于canvas绘图,SVG是一种绘制矢量图的技术.全称叫做Scalable Vector Graphics,可缩放的矢量图,在2000年就已经存在,H5把它纳入了标准标签库,并进行了一些瘦身.需要 ...

  7. JavaScript权威设计--jQuery,Ajax.animate,SVG(简要学习笔记二十)[完结篇]

    1.$和jquery在全局命名空间中定义的唯一两个变量.   2.jquery是工厂函数,不是构造函数.他返回一个新创建的对象.   3.jquery的四种调用方式:     <1>传递C ...

  8. ggplot绘图学习笔记

    0.查看R的系统帮助文档 标度 scale breaks, labels, limits, labs dose <- c(20, 30, 40, 45,60) drugA <- c(16, ...

  9. Android Drawable绘图学习笔记(转)

    如何获取 res 中的资源 数据包package:android.content.res 主要类:Resources Android SDK中的简介:Class for accessing an ap ...

随机推荐

  1. 用git上传本地文件到github

    1.在自己的github账号下新建仓库--------得到github仓库地址 2.本地安装git---在将要克隆的文件夹下 右击点击Git Bash Here 3.输入命令 $ git clone ...

  2. oracle数据库表实现主键自增功能

    有关oracle中自增序列sequence+触发器trigger:实现数据表TABDATA_LIVE_CYCLE中的主键id的自增. CREATE SEQUENCE TABDATA_LIVE_CYCL ...

  3. ASP.Net Controls 用法大全

    The FindControl method of the System.Web.UI.Control class appears simple enough to use. In fact, the ...

  4. params修饰符

    http://msdn.microsoft.com/zh-cn/library/w5zay9db.aspx params 关键字可以指定采用数目可变的参数的方法参数. 可以发送参数声明中所指定类型的逗 ...

  5. java 导出blob图片到excel

    实现功能,导出当前页面显示员工的图片,核心代码已给出,仅供参考, 如需转载请注明出处http://www.cnblogs.com/wangjianguang/p/7852060.html 随便再扯2句 ...

  6. 使用AspectCore动态代理

    前言 最近越来越多的同学关注到AspectCore,并且提出不少中肯的建议,其中最多的提议是希望能够看到更多的关于AspectCore使用方式的文章和Demo.那么在这篇文章里,我们就来聊聊Aspec ...

  7. 解决No enclosing instance of type * is accessible

    写一个内部类,并在构造函数中初始化时,遇到报错,搜索问题后发现,有网友出现过类似的问题,下面这个是说的浅显明白的,并确实解决了问题.于是,以下内容照搬过来,不再多费键盘了. public class ...

  8. 如何用while循环输出十行十列变色★☆

    输出十行十列星星 k = 0 #设置一个终止变量 while k < 10: i = 0 #设置一个满十换行变量 while i < 10: print('★',end='') i += ...

  9. JAVA基础3——常见关键字解读(1)

    常见的JAVA中的关键字 static static静态变量 静态变量:使用static关键字定义的变量.static可以修饰变量和方法,也有static静态代码块.被static修饰的成员变量和成员 ...

  10. 最强离线安装MySQL_8.0.2方法

    最强离线安装MySQL_8.0.2方法,一次就能安装成功. 按照此方式,离线安装MySQL五分钟都花不到,节省了大量的宝贵时间. 前戏,假设你已经从MySQL官网中获取了下面这个压缩包: 解压之后变成 ...