使用OpenGL绘制 shapefile文件 完成最基本的gis操作
主要内容概述
(视频教程已经发布:http://edu.csdn.net/course/detail/3422)
(http://edu.csdn.net/course/detail/3420)
1.解析shapefile(.shp)文件。‘
2.将经纬度数据按照墨卡托投进行投影(调用proj.4库)完成。
3.将数据用OpenGL的方式进行绘制。
上述3方面只是完成初步的绘制,对于要完成一个复杂的地理信息系统还有很大的差距,
下面介绍我设计的简单的地理信息框架(用于交流,进步)。先上个图,根据图来说更加易懂。

其中地图框架中包含多个物理地理图层,是真实存在的图层,所有在该图层下的数据都会被绘制到图层上(即一张图片)。
物理图层中包含了多个逻辑图层(Layer),是为了方便应用层使用而设计的逻辑图层,用于将地图要素进行分类管理
使用,最后Layer中包含的是真正的地图要素数据,是真正绘制使用的数据。
在实际的应用中,可以把影像数据作为一个物理图层,将矢量要素数据作为一个物理图层,最后将两个图层合成输出。
当然在实际应用中,我增加了一个图层,即实时绘制层,即将距离测量,面积测量,角度测量等做在该层,这样在地图刷新的
时候重新绘制的数据不多,提高程序的性能。
先上一个图,我目前做的简单的gis框架(只是满足我目前的需求,主要的特点就是速度快)。如下图所示。

初步的完成上面的框架设计后,我得到了上面的结果,在这想与大家分享的是OpenGL在处理多边形填充区域的时候比较麻烦,我将矢量线和面做了两个
逻辑图层,这样做可以选择显示线和面两中模式。在完成这个效果图的时候为了追求效率,遇到最大的问题是绘制文字,众所周知OpenGL没有绘制文字
的功能,需要自己做,其用到了我前面的随笔,有兴趣的可以自行参考。
为了做标会功能,在做界面花费了我很多精力,为了让软件具备跨平台的目的(可以再Andriod手机平台上用),界面我采用OpenGL封装了一个轻量级的
界面库(这个很不值得),网上也有很多开源的界面库,比如Mygui,FastUI,CEGUI等,我都有用过,要不在效率上满足不了我的要求,要么占用较大的内存,
最后自己只有自己写了,上图。

编辑各种常用的图形界面如下:

最后,我增加了一个曲线模板,即可以把比较好的样式保存成模板,想用的使用直接拖出来就直接可以应用。
如下所示。

完成了。后续如果大家觉得还好,我会继续写,并把代码分享出来。
使用OpenGL绘制 shapefile文件 完成最基本的gis操作的更多相关文章
- Shapefile文件中的坐标绘制到屏幕时的映射模式设置
pDC->SetMapMode(MM_ANISOTROPIC ); //首先选择MM_ANISOTROPIC映射模式,其它映射模式都不合适 pDC->SetWindowExt( max(a ...
- [Modern OpenGL系列(三)]用OpenGL绘制一个三角形
本文已同步发表在CSDN:http://blog.csdn.net/wenxin2011/article/details/51347008 在上一篇文章中已经介绍了OpenGL窗口的创建.本文接着说如 ...
- OpenGL绘制自由落体小球
OpenGL绘制自由落体小球 一. 程序运行的软硬件环境 本次设计在window10系统下进行,运用C++进行编写,在CodeBlocks环境下使用OpenGL进行设计. 所需环境配置分为2部分 ...
- python-geopandas读取、创建shapefile文件
作者:fungis 描述:一个热带生活.乐于分享.努力搬砖的giser 交流邮箱:fungis@163.com shapefile是GIS中非常重要的一种数据类型,在ArcGIS中被称为要素类(Fea ...
- Python绘制PDF文件~超简单的小程序
Python绘制PDF文件 项目简介 这次项目很简单,本次项目课,代码不超过40行,主要是使用 urllib和reportlab模块,来生成一个pdf文件. reportlab官方文档 http:// ...
- opengl绘制正弦曲线
利用opengl绘制正弦曲线 ,见代码: #include <windows.h> //#include <GLUT/glut.h> #include <GL/glut. ...
- shapefile文件
基本信息编辑 ESRI公司的Shapefile文件是描述空间数据的几何和属性特征的非拓扑实体矢量数据结构的一种格式. 内容编辑 一个Shapefile文件最少包括三个文件: 主文件(*.shp).-- ...
- OpenGL绘制简单场景,实现旋转缩放平移和灯光效果
本项目实现了用OpenGL绘制一个简单场景,包括正方体.球体和网格,实现了物体的旋转.缩放.平移和灯光效果.附有项目完整代码.有具体凝视.适合刚開始学习的人熟悉opengl使用. 开发情况 开发环境V ...
- 使用wcf编写坐标字符串生成shapefile文件,在iis发布供前端调用
项目有一需求,需要由坐标字符串(格式:x,y,点名)生成shapefile,由于在前台开发类似功能比较麻烦而且也不适用,最终决定使用WCF来实现,不借助现有GIS软件,基于GDAL实现. 实现过程如下 ...
随机推荐
- spring 3.X与jdk 1.8不兼容
1.报错(部分) 2.解决 虽然Spring的jdk要求如下,但是spring 3与jdk1.8不兼容(使用的是spring 3.2) 在eclipse将jdk版本下调.这里将JDK调到1.7(在ec ...
- (线段树)Balanced Lineup --POJ --3264
链接: 对于POJ老是爆,我也是醉了, 链接等等再发吧! http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82832#problem/G 只 ...
- IDEA14/Eclipse+Tomcat7热部署,jrebel6破解与eclipse配置
换了最新的eclipse,以前很多的插件都用不了,对于web开发的人来说,jrebel这种防重启神器必须要配备,防止修改类名.java文件.配置文件后的tomcat重启. 首先给一个下载地址: htt ...
- 后台返回的json数据传到前端页面并在页面的表格中填充
web前端页面: <table id="myTable" cellpadding="1" cellspacing="0" border ...
- Spring容器中bean的生命周期以及关注spring bean对象的后置处理器:BeanPostProcessor(一个接口)
Spring IOC 容器对 Bean 的生命周期进行管理的过程: 1.通过构造器或工厂方法创建 Bean 实例 2.为 Bean 的属性设置值和对其他 Bean 的引用 3.将 Bean 实例传递给 ...
- [javascript library]使用js实现页面刷新后依然保留表单填写的数据
详情请见于该链接:http://sisyphus-js.herokuapp.com/
- 让cxGrid像Excel那样高亮显示选区的行号列标
http://www.oschina.net/code/snippet_54100_1102 Developer Express的cxGrid控件是一个相当有特色的数据栅格组件,支持自动分组.卡片式显 ...
- matlab 降维工具箱
Matlab Toolbox for Dimensionality Reduction 降维方法包括: Principal Component Analysis (PCA) • Probabili ...
- Python学习-40.Python中的迭代
在上一篇中,我们使用了生成器来创建了一个可遍历的对象.在其中,我们使用了yield关键字. Python我也正在学习中,因此对yield的本质我并不熟悉,但是,在C#中,yield关键字则是语法糖,其 ...
- 阉割版BBBlack安装Debian
开门见山,直入主题 咸鱼入手3块阉割ARM板,经过快递近6天运输到手,不过价格便宜 东西下面这样的(借了咸鱼的图): 发现这块板是阉割版的国外beagleboard.org型号为BeagleBone ...