CAD和GIS绘制图形分析
开发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绘制图形分析的更多相关文章
- Android绘制优化(一)绘制性能分析
前言 一个优秀的应用不仅仅是要有吸引人的功能和交互,同时在性能上也有很高的要求.运行Android系统的手机,虽然配置在不断的提升,但仍旧无法和PC相比,无法做到PC那样拥有超大的内存以及高性能的CP ...
- 在Android中使用OpenGL ES进行开发第(三)节:绘制图形
一.前期基础知识储备笔者计划写三篇文章来详细分析OpenGL ES基础的同时也是入门关键的三个点: ①OpenGL ES是什么?与OpenGL的关系是什么?——概念部分 ②使用OpenGLES绘制2D ...
- Matlab 语谱图(时频图)绘制与分析
Matlab 语谱图(时频图)绘制与分析 语谱图:先将语音信号作傅里叶变换,然后以横轴为时间,纵轴为频率,用颜色表示幅值即可绘制出语谱图.在一幅图中表示信号的频率.幅度随时间的变化,故也称" ...
- CSS 魔法系列:纯 CSS 绘制图形(心形、六边形等)
<CSS 魔法系列>继续给大家带来 CSS 在网页中以及图形绘制中的使用.这篇文章给大家带来的是纯 CSS 绘制五角星.六角形.五边形.六边形.心形等等. 我们的网页因为 CSS 而呈现千 ...
- html5 Canvas绘制图形入门详解
html5,这个应该就不需要多作介绍了,只要是开发人员应该都不会陌生.html5是「新兴」的网页技术标准,目前,除IE8及其以下版本的IE浏览器之外,几乎所有主流浏览器(FireFox.Chrome. ...
- html5 canvas 笔记一(基本用法与绘制图形)
<canvas> 元素 <canvas id="tutorial" width="150" height="150"> ...
- WPF2D绘制图形方法
我们先看看效果如何: xaml文件: <Window x:Class="WPF2D绘制图形方法.MainWindow" xmlns="http://schemas. ...
- Cacti 是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具
Cacti 是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具. mysqlreport是mysql性能监测时最常用的工具,对了解mysql运行状态和配置调整都有很大 ...
- 11-UIKit(Storyboard、View的基本概念、绘制图形、UIBezierPath)
目录: 1. Storyboard 2. Views 3. View的基本概念介绍 4. 绘制图形 5. UIBezierPath 回到顶部 1. Storyboard 1.1 静态表视图 1)Sec ...
随机推荐
- C语言中,为什么字符串可以赋值给字符指针变量
转载于:http://www.cnblogs.com/KingOfFreedom/archive/2012/12/07/2807223.html 本文是通过几篇转帖的文章整理而成的,内容稍有修改: 一 ...
- Javascript定义类(class)的最新方法
极简主义法 3.1 封装 这种方法不使用this和prototype,代码部署起来非常简单,这大概也是它被叫做"极简主义法"的原因. 首先,它也是用一个对象模拟"类&qu ...
- 有限状态机FSM详解及其实现
有限状态机,也称为FSM(Finite State Machine),其在任意时刻都处于有限状态集合中的某一状态.当其获得一个输入字符时,将从当前状态转换到另一个状态,或者仍然保持在当前状态.任何一个 ...
- mybatise 动态sql
1. <if><choose> 动态sql 相当 <if> Java if 满足多个条件 <choose> <when> java ...
- cocos2d 中使用jni C++ 调用 Java 方法
1.简单数据类型样例 如果我们Java中有这么一个open的静态方法,它没有參数,有一个int的返回值.怎么在C++中调用它呢? package cb.CbCCBLE; public class Cb ...
- laravel 使用验证码
1)php.ini需要开两个扩展 extension=php_fileinfo.dllextension=php_gd2.dll 2)使用composer安装类包 composer require m ...
- 使用类/结构体时关于ZeroMomery用法错误
今天同事在写了如下结构体: typedef struct _tagInfo { std::list<int> lst; std::vector<int> nVec; } INF ...
- thinkphp5.0开发规范
命名规范 ThinkPHP5遵循PSR-2命名规范和PSR-4自动加载规范,并且注意如下规范: 目录和文件 目录不强制规范,驼峰及小写+下划线模式均支持: 类库.函数文件统一以.php为后缀: 类的文 ...
- Android之ListView分页数据加载
1.效果如下: 实例如下: 上图的添加数据按钮可以换成一个进度条 因为没有数据所以我加了一个按钮添加到数据库用于测试:一般在服务器拉去数据需要一定的时间,所以可以弄个进度条来提示用户: 点击加载按 ...
- Kotlin——初级篇(一):最详细的环境搭建
众所周知,Kotlin出来已经良久了.Kotlin有着众多优势,不管是用于Android开发中,还是Java开发,都能缩减很大的代码量,大大提高了工作效率.而小生本人也是才从忙碌的个工作中抽身出来,有 ...