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# Asp.net 制作一个windows服务
那下面就来说说如何制作一个服务来 实现开机自动启动,每隔一段时间向student表中插入数据. 步骤: 1) 新建项目 ---> Windows 服务 2) 拖放Times控件 工具箱中 ...
- 使用matlab批量处理图像后在指定文件夹存储
使用matlab批量处理图像后在指定文件夹存储 clear;clc;close all; Files=dir('D:\文件及下载相关\文档\MATLAB\postgraduate\Kodak\*.jp ...
- 第四章 Spring.Net 如何管理您的类___对象的初始化方式
在 Spring.Net 中对象初始化的方式分为两种: ① 急切实例化,也就是说 Spring.Net 容器初始化的时候将对象先实例化出来. ② 延迟实例化,也就是说我们在调用 GetObject 方 ...
- [转]ASP.NET MVC 5 -从控制器访问数据模型
在本节中,您将创建一个新的MoviesController类,并在这个Controller类里编写代码来取得电影数据,并使用视图模板将数据展示在浏览器里. 在开始下一步前,先Build一下应用程序(生 ...
- MyException--org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession. ###
org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession. ### The error may ...
- MySQL 密码设置
如何修改 MySQL 密码: [root@localhost ~]$ mysqladmin -uroot password 'newPass' # 在无密码的情况下设置密码 [root@localho ...
- 安卓教程:提取APK程序里图片资源的方法
有些APK程序里的图标.图片很漂亮,在使用程序时你可能会想,如果能把这些漂亮的图标.图片提取出来就好了,其实这是可以办到的,请看教程. 本教程以“电影超人”的APK安装包为例,其它APK程序的提取方法 ...
- combobox组合框
最近在改BUG的时候发现,combobox组合框如果选择的是Dropdown模式在初始化combobox对象时候有如下操作 1.SetDlgItemInt(IDC_WB_FONTSIZECOMBOX, ...
- iOS-代码修改Info.plist文件
解决办法: 1.首先系统的Info.Plist文件是只读文件 并不能 写入.目前我个人是没有办法存入,官方属性 可以看到是readOnly 2.那么我们 就想代码修改Info.Plist文件怎么办呢, ...
- ring0 根据EThread遍历线程
ntdll!_ETHREAD +0x000 Tcb : _KTHREAD +0x200 CreateTime : _LARGE_INTEGER 0xff58b008 +0x208 ExitTime : ...