位置==============================================
地球本身不是一个正球体,而是一个极半径略短、赤道半径略长,北极略突出、南极略扁平,近似千梨形的椭球休。
经度和纬度
国际上统一规定以通过英国伦敦格林威治天文台的经线为起始经线(0°),也叫本初子午线。从起始经线开始,向东、西各以180°计算,向东称东经,向西称西经。
所有垂直于地轴的平面与地球椭球面的交线,称为纬线。赤道纬度为零,赤道以北为北纬,以南为南纬,向北向南各分90°。纬度不同的纬线长度不相等。
纬度值相对于赤道进行测量,其范围是 -90°(南极点)到 +90°(北极点)。经度值相对于本初子午线进行测量。其范围是 -180°(向西行进时)到 180°(向东行进时)。
地图投影
地图投影就是将椭球面上的经纬 按照一定的数学法则转移到平面上,建立球面上点(阿尔法,伽马)与平面上点(x,y) 之间的函数关系。地图投影虽然解决了球而与平面之间的矛盾,但在平面上完全无误地表示地球的各部分是不可能的,必然会带来长度、面积、角度等变形。
- 高斯一克吕格投影
- 墨卡托投影
参考:https://www.cnblogs.com/rainbow70626/p/4379615.html
电子地图生成过程
地理信息系统(GIS)
有时又称为“地学信息系统”。它是一种特定的十分重要的空间信息系统。它是在计算机硬、软件系统支持下,对整个或部分地球表层(包括大气层)空间中的有关地理分布数据进行采集、储存、管理、运算、分析、显示和描述的技术系统。
地理信息系统软件
ArcGIS:a(儿话音) ke(轻音) ji(四声) s(轻音)
Maplnfo:https://baike.baidu.com/item/MapInfo/8738110=aladdin
SuperMap GIS(中国的软件):https://baike.baidu.com/item/supermap/536994=aladdin
arcgis有哪些功能 – arcgis是什么_arcgis是做什么的
电子地图生成实例
电子地图存储结构============================
由于电子地图图元为不等长记录,为了提高插入、删除、查找效率,电子地图通常采用索引文件结构,
常用的存储结构有 TAB 和 MIF。
注意是存储结构,不是文件格式。
TAB 格式
TAB 格式是 由 Maplnfo 采用的一种电子地图文件格式,由表结构文件(. TAB) 、属性数据文件(.DAT) 、交叉索引文件(.ID) 、空间数据文件(. MAP) 组成,如图 。
- 表结构文件(. TAB) 定义属性数据文件的结构
- 属性数据文件(. DAT) 存放矢量图形(图元)的属性
- 空间数据文件(. MAP) 存放矢量图形数据和样式信息,为图形对象与数据关联的文件,也可以是纯数据文件。
- 交叉索引文件(. ID) 记录矢最图形在空间数据文件中的位置指针,指针存放顺序与属性数据文件中记录存放顺序一致。
TAB 格式中矢最图形与属性记录之间满足一对一关系 。
MIF 格式
属性文件存储了矢截图形的属性信息,每一行构成一个记录。矢量图形数据文件由文件头和数据组成,文件头主要定义了矢量文件记录的字段,数据则包含了矢量图形数据及样式,每一行构成一个矢量图形。
MIF文件支持的矢量图形有:点(point) 、直线(line)、折线(polyline) 、区域(region) 、圆弧(arc) 、文本(text)、矩形(rectangle) 、圆角矩形(roundedrectangle)、椭圆(ellipse) 等。属性文件的第一个记录必须与矢量图形数据文件中的第一个矢量图形对应,第二个记录与第二个矢量图形对应,依此类推,若记录没有与之对应的矢量图形,必须在图形数据文件中填写”NONE” 以填充。
绘制完成后 mapinfo 把每一个图层保存为相应的图表文件。而每一个表又可以同时转出为*.MIF 和*. MID 两种格式文件。 Mif 文件包含了该图层所有图元的类型、位置、颜色等相关信息, mid 文件包含了 mif 每个图元对应的标注。
这两个文件都为文本性质的文件,用户可以通过相应的文件读写方法实现对文件内容的读写。
电子地图读写
当前应用广泛的电子地图主要是Maplnfo软件系列,该软件系列并不支持在Linux下进行开发只是提供了MIF文件格式,用来对外交换数据,MIF文件里的空问数据以ASCI码方式保存。
直接读取MIF文件,必须要准确识别各数据的类型和含义,工作量大,代码冗长。为简便开发,我们通过Mitab库函数来读取MIF地图文件,联合Qt的 QPainter函数显示地图,程序更加精炼,较好的实现了嵌人式Linux电子地图显示。
Mitab 库
Mitab库基于GIS协会关于简单要素的规范实例 ,OGR库开发,同时它还是一个开源的C++库,主要用来读写Maplnfo的TAB文件和MIF/MID文件。可从 Mitah官 下载到该库,目前最新的版本是1.7。
Mitab 库的使用
以Mitab-1.7.0 在x86 Linux 平台上的使用为例,解压缩mitab-1. 7. 0. tar. gz 软件包,生成mitab-1. 7. 0 目录。
在mitab-1.7.0 目录,运行make 命令,在ogr 、cpl 子目录,生成ogr 、cpl 的静态链接库ogr. a 、cpl. a, 在mitab 子目录,生成mitab 的静态链接库mitab. a 及其动态链接库。mitab 库c++ 接口的头文件为mitab/ mitab. h,C 接口头文件为mitab/capi.h 。在mitab-1. 7. 0 目录,运行make clean 命令则可以清除生成的库文件。
基于Mitab 的电子地图遍历
1.基于C接口的遍历
Mitab 提供了一系列的C语言接口,用于TAB 格式电子地图的遍历,其遍历算法为:
(1)调用mitab_c_open 打开MIF或TAB文件文件,函数会自动识别文件属性;
(1)调用mitab_c_get_field_count 获取矢量图形属性字段个数;
(3)调用mitab_c_next_fcature_id 获取一个矢量图形的标识符;
(4)调用mitab_c_rcad_fcaturc 读取矢量图形;
(5)调用mitab_c_get_field_name 和mitab_c_get_field_as_string获取矢量图形的属性名及值。
(6)调用mitab_c_get_type 和mitab_c_get_parts 获取矢量图形
的类型和组成单元数量(对集合类矢量图形组成单元可不止一个);
(7)调用mitab_c_gct_vcrtcx_count 获取矢量图形每一个单元的结点数量;
(8)调用mitab_c_get_vertex_x 和mitab_c_get_vertex_y 获取结点的坐标;
(9)调用mitab_c_destroy_feature 销毁矢量图形;
(10)跳转(3),直到图层中的所有矢量图形被访问过。
采用以上算法基于x86 Linux 平台编写的示例代码如下。
实例代码:
基于c++ 接口的遍历
Mitab 提供了一系列的c++ 类,用于TAB 格式电子地图的操作,其遍历算法为:
(1)调用IMaplnfoFile::SmartOpen 方法创建IMaplnfoFile 类对象poSrcFile;
(2)调用poSrcFile->GetNextFeatureld 获取矢量图形标识符;
(3)调用poSrcFile->GetFeatureRef 获取TABFeature 类对象poFeature;
(4)调用poFeature->DumpReadable 显示矢量图形信息,包括矢量图形及其属性信息;
(5)跳转到(2),直到图层中的所有矢量图形被访问过。
采用以上算法基于x86 Linux 平台编写的示例代码如下。
实例代码:
总结:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!