# ShpViewer **Repository Path**: notplus/ShpViewer ## Basic Information - **Project Name**: ShpViewer - **Description**: No description available - **Primary Language**: Visual Basic - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2019-11-09 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 项目说明 本项目为ESRI公司shapefile文件(*.shp)的查看器。 >ESRI Shapefile(shp),或简称shapefile,是美国环境系统研究所公司(ESRI)开发的空间数据开放格式。当前,该文件格式已经成为了地理信息软件界的开放标准,这表明ESRI公司在全球的地理信息系统市场的重要性。Shapefile也是重要的交换格式,能够在ESRI与其他公司的产品之间进行数据互操作。 shp文件中存储了各种几何实体,具体请参考[ESRI公司官方文档](https://www.esri.com/library/whitepapers/pdfs/shapefile.pdf) 主要实现功能: 1. 读取shp文件 2. 解析shp文件 3. 绘制shp文件目标 4. 处理鼠标交互事件 ## 项目流程 1. 读取shp文件 2. 解析shp文件,得到几何目标的**类型**、**经纬度坐标(系列)** 3. 通过坐标变换,将经纬度目标转换为屏幕坐标,按目标类型在屏幕指定区域绘制 4. 处理鼠标交互事件,包括滚轮=>缩放、拖拽=>平移 ## 设计思路(c++供参考) 对*.shp文件进行解析,存储至shpshape对象中,存储形式有两种,一种为每个文件一棵共有的四叉树,另一种为shpshape类中std::vector ele_list。 paintWidget 类实现绘图事件,并处理鼠标事件。对于鼠标事件,paintWidget类处理,更新当前绘图窗口所绘制图形的经纬度范围和缩放量、偏移量,更新后调用shpshape类的render函数进行绘制。 缩放、平移等操作更新当前视图下经纬度范围,在四叉树中寻找含有该范围的最小节点,从节点中shape对象的指针调用render函数。 ## 项目预期效果 ![20191109220917.png](https://images.gitee.com/uploads/images/2019/1111/174645_9e118aac_5204770.png) ## 任务分发 1. shp文件的读取和解析(200行c++代码量) 2. 三种基本类型的图形绘制(点线面)及GUI设计 3. 四叉树数据结构的应用 --tang 4. 鼠标交互事件的处理 5. 架构与多态实现OOP --liu