开发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. DropDownList添加客户端下拉事件操作

    如果要想给 DropDownList 服务器控件添加客户端下拉事件,我们可以强制给它添加 onchange 事件,尽管在控件中没有这个方法的提示.添加完这个事件还不能达到目的,还要设置 AutoPos ...

  2. ftp命令行工具如何 连接 非标准21端口(其他端口)的ftp服务器

    windows: step1:ftp命令进入ftp交互环境 step2:ftp>open ip空格port 然后...

  3. AssetBundle之LoadFromCacheOrDownload()取代"new WWW (url)的作用

    1.为了充分利用缓存功能.2.缓存的资源包完全由文件名和版本号唯一标识,URL所有域名和路径信息在缓存被忽略.3.由于缓存的资源包通过文件名而不是完整的URL来识别,在任何时候资源包被下载,你可以更改 ...

  4. Golang 语言安装

    Ubuntu: 从源代码编译安装 安装gcc工具,因为golang有些功能是使用c写的,所以构建golang的编译是必须的 apt-get install bison gawk gcc libc6-d ...

  5. foreach使用

    1. 读取记录while($row=mysql_fetch_array($result)){$record[]=array(    'title'=>$row['title'], 'body'= ...

  6. vs2013\2015-UML

    1.UML简介Unified Modeling Language (UML)又称统一建模语言或标准建模语言. 简单说就是以图形方式表现模型,根据不同模型进行分类,在UML 2.0中有13种图,以下是他 ...

  7. Vs2010创建WebService

    在Visual Studio 2010中已经找不到直接创建WebService的模板方式了,但下面的方法可心实现: 在 Visual Studio 2010 的新建 Web 应用程序或者 Web 网站 ...

  8. docker 配置文件:/etc/docker/daemon.json

    /etc/docker/daemon.json 是 docker 的配置文件,默认是没有的,需要我们手动创建,可配置项如下: [root@localhost ~]$ vim /etc/docker/d ...

  9. Nginx.conf 配置文件详细说明

    在此记录下Nginx服务器nginx.conf的配置文件说明, 部分注释收集与网络. #运行用户user www-data;    #启动进程,通常设置成和cpu的数量相等worker_process ...

  10. IntersectRect、wcsrchr、CComPtr、GetFileAttributes

    IntersectRect    两矩形相交形成的新矩形 The IntersectRect function calculates the intersection of two source re ...