开发CAD和GIS绘图系统有些区别,自己试着分析一下。

  ♠ 首先CAD图形绘制主要管理图形,因此会有一个抽象的Geometry对象,软件维护一个Geometry对象的集合。如果以图层来管理几何图形,则是每个图层维护一个Geometry对象集合。

    Canvas——Layers——Geometrys

  点、线、面对象都继承自Geometry,并且有各自的Style属性。

  对于点有颜色、大小等属性;线有线型、线宽、颜色、实线/虚线等属性;面有线型、线宽、填充颜色、线框颜色、填充样式等属性。这样Style形成了一个继承层次。

  ♠ 其次GIS图形绘制,首先GIS绘图系统维护一个Map对象,并且按照图层(Layer)的方式来组织,图层可以分为矢量和栅格图层,每个图层包含要素集FeatureClass和Render属性。

             |——FeatureClass

    Map——Layers——|

             |——Renderer

  FeatureClass与具体的数据源建立联系,Renderer对象是数据的着色方式,有唯一值着色、有简单着色和分级着色等几种方式。

  FeatureClass包含Feature要素,Feature要素的Shape属性是一个Geometry对象。点、线、面等都继承自Geometry。

  Renderer对象是包含一个或多个Symbol对象。对于不同的图层类型(点、线、面)有不同的Symbol,对应不同的符号,这样Symbol也形成一个继承层次。

  ♠  这里分析一下捕捉的机制,图形绘制系统的捕捉功能非常有用。上面一分析看出CAD系统的捕捉功能相对GIS系统实现要容易许多。因为对于绘图画板,只需要将Geometry对象集合遍历进行计算即可。很容易获取Geometry对象集合,而GIS系统则相对复杂。下面说说复杂的原因:GIS系统是维护者图形和属性数据的,刚才分析Feature对象是有一个Shape属性的,但是他同时还包含很多的字段Field列,每一条Feature对应属性表的一条记录。而且由于FeatureClass或者属性表一般都采用关系数据表的方式进行属性数据的管理,没有像CAD系统那样把几何图形和属性数据都一次性加载到内存,而是采用FeatureCusor的方式来读取记录,类似于C++的遍历器iterator。毕竟GIS是要管理海量数据的,一次性全部加入内存也是不现实的。所以每次获取FeatureLayer的FeatureClass,再通过FeatureCusor获取要素。(这么一分析,第一次加载显示的时候就调用了FeatureClass加载了全部的要素啊,以后查询什么的仍是通过FeatureCusor来获取要素啊?)

  为了实现捕捉并且高效的捕捉,必须在移动地图的过程中动态维护一个集合,该集合只对当前视图范围的几何对象进行遍历和运算,寻找中点、节点、垂足等点位。

  ♠  分析一下选择机制,Canvas和Map都有一个Selection属性,是object对象集合,用来存储被选择的几何对象或者要素。并且绘制系统以不同的机制重新绘制这些对象,一般是高亮(改变颜色)和加粗线框结合的方式。

CAD和GIS绘制图形分析的更多相关文章

  1. Android绘制优化(一)绘制性能分析

    前言 一个优秀的应用不仅仅是要有吸引人的功能和交互,同时在性能上也有很高的要求.运行Android系统的手机,虽然配置在不断的提升,但仍旧无法和PC相比,无法做到PC那样拥有超大的内存以及高性能的CP ...

  2. 在Android中使用OpenGL ES进行开发第(三)节:绘制图形

    一.前期基础知识储备笔者计划写三篇文章来详细分析OpenGL ES基础的同时也是入门关键的三个点: ①OpenGL ES是什么?与OpenGL的关系是什么?——概念部分 ②使用OpenGLES绘制2D ...

  3. Matlab 语谱图(时频图)绘制与分析

    Matlab 语谱图(时频图)绘制与分析 语谱图:先将语音信号作傅里叶变换,然后以横轴为时间,纵轴为频率,用颜色表示幅值即可绘制出语谱图.在一幅图中表示信号的频率.幅度随时间的变化,故也称" ...

  4. CSS 魔法系列:纯 CSS 绘制图形(心形、六边形等)

    <CSS 魔法系列>继续给大家带来 CSS 在网页中以及图形绘制中的使用.这篇文章给大家带来的是纯 CSS 绘制五角星.六角形.五边形.六边形.心形等等. 我们的网页因为 CSS 而呈现千 ...

  5. html5 Canvas绘制图形入门详解

    html5,这个应该就不需要多作介绍了,只要是开发人员应该都不会陌生.html5是「新兴」的网页技术标准,目前,除IE8及其以下版本的IE浏览器之外,几乎所有主流浏览器(FireFox.Chrome. ...

  6. html5 canvas 笔记一(基本用法与绘制图形)

    <canvas> 元素 <canvas id="tutorial" width="150" height="150"> ...

  7. WPF2D绘制图形方法

    我们先看看效果如何: xaml文件: <Window x:Class="WPF2D绘制图形方法.MainWindow" xmlns="http://schemas. ...

  8. Cacti 是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具

    Cacti 是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具. mysqlreport是mysql性能监测时最常用的工具,对了解mysql运行状态和配置调整都有很大 ...

  9. 11-UIKit(Storyboard、View的基本概念、绘制图形、UIBezierPath)

    目录: 1. Storyboard 2. Views 3. View的基本概念介绍 4. 绘制图形 5. UIBezierPath 回到顶部 1. Storyboard 1.1 静态表视图 1)Sec ...

随机推荐

  1. 在Delphi中编写res文件

    delphiimagedosinterfaceborland脚本先用记事本编写一个rc的文件. 如内容为: _Comms RCData Comms.jpg Comms.jpg为图片名称, 然后在这个r ...

  2. error C2065:!错误:未定义标识符“pBuf);”

    error C2065: “pBuf):”: 未声明的标识符 错误原因:第二个括号)使用的是中文符号!还有最后那个分号! 改回来就好了~ 原错误: 修正后错误消失:

  3. Visual Studio各版本一览!

    上图红线标识处为常用版本,最经典的是VC++ 6.0,专为早期C++开发设计.红框标识处是其内部版本,如VS2008,其内部版本为vc9.0,注意查找区分! 目前,最新版本的VS2017已经发布,很大 ...

  4. 【java】java内存模型 (1)--基础

    并发编程模型的分类 在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体).通信是指线程之间以何种机制来交换信息.在命令式编程中,线程之间的通信 ...

  5. Java课后思考题

    1.简述path和classpath的区别. path:path环境变量是系统环境变量中的一种,它用于保存一系列可执行文件的路径,每个路径之间以分号分隔.当在命令行窗口运行一个可执行文件时,操作系统首 ...

  6. MVC3--View层

    Razor二义性: 1,当view层中出现   邮件格式时候比如   anbylau2130@qq.com 这种情况Razor将会出现多义性 可以使用@@来转义为一个@字符, 如:<p>y ...

  7. ios 6以后,UILabel全属性

    一.初始化 1 UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(40, 40, 120, 44)]; 2       3 [s ...

  8. int()

    int() 用于将一个对象转换为整数,可转换的对象如下: In [1]: int(') # 将纯数字的字符串转换为整数 Out[1]: 10 In [2]: int(10.6) # 将浮点数转换为整数 ...

  9. 如何使用微信小程序制作banner轮播图?

    在前端工程师的工作中,banner是必不可少的,那缺少了DOM的小程序是如何实现banner图的呢?如同其他的框架封装了不同的banner图的方法,小程序也封装了banner的方法,来让我一一道来: ...

  10. (三)微信小程序之发送服务通知(模板消息)

    1.后端获取AccessToken返回给微信端 微信小程序端请求后端得到AccessToken   2.后端获取openid返回给微信端   微信小程序端登录请求后端得到openid   3.发送消息 ...