使用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实现. 实现过程如下 ...
随机推荐
- 201709021工作日记--Volley源码解读(四)
接着volley源码(三)继续,本来是准备写在(三)后面的,但是博客园太垃圾了,写了半天居然没保存上,要不是公司这个博客还没被限制登陆,鬼才用这个...真是垃圾 继续解读RequestQueue的源码 ...
- 企业计划体系的变迁:从ERP到APS再到SCP
规划是供应链运作的大脑.几十年来,规划从MRP发展到到ERP到APS再到SCP,经历了从部分到全局,从静态到动态,从企业到供应链的发展历程.供应链的效率取决于规划.规划不到位,任何执行都是事后挽救. ...
- 菜鸟——springboot+mybatis+maven
网上找了很多资料,学习如何搭建springboot,由于刚刚接触springboot,不是很熟练,通过参考网上别人搭建的例子,自己也搭建了一个简单的springboot+mybaits+maven 网 ...
- 今天犯了一个StringBuilder构造函数引起的二逼问题。
在.Net里,StringBuilder的构造函数有很多,最常用的是无参的构造函数,默认分配16个字符的空间.其次就是填写StringBuilder空间的带一个Int32的构造函数,这个在优化代码的时 ...
- C#使用Linq对DataGridView进行模糊查找
针对DataGridView中已进行过数据绑定,即已向DataGridView中添加了一些数据,可以结合Linq查询,并让匹配查询的行高亮显示,如下图: 具体实现如下: [csharp] ...
- Android的基础知识点
一.Intent的2种启动方式 1.显示启动: setClass(“包名”,“启动的Activity.class”); XML文件中启动Activity 2.隐示启动: setAction(" ...
- 读DEDECMS找后台目录有感
本文作者:红日安全团队——Mochazz 早上看了先知论坛的这篇文章:解决DEDECMS历史难题–找后台目录 不得不说作者思路确实巧妙,作者巧妙的利用了Windows FindFirstFile和织梦 ...
- (3)Oracle基础--表
· 认识表 Oracle中的表都是存储在表空间中,具有以下特点: <1> 数据的基本存储单元 <2> 二维结构 行:又称为‘记录’ 列:又称为‘字段或域’ <3&g ...
- 消息队列 MQ 入门理解
功能特性: 应用场景: 消息队列 MQ 可应用于如下几个场景: 分布式事务 在传统的事务处理中,多个系统之间的交互耦合到一个事务中,响应时间长,影响系统可用性.引入分布式事务消息,交易系统和消息队列之 ...
- JAVA是是如何处理字符的。
String s = "fs123fdsa";//String变量 byte b[] = s.getBytes();//String转换为byte[] String t = new ...