VCF格式电子海图投影文件的生成

目前国内的电子海图除S-57格式的电子海图外,还有VCF格式电子海图,也就是shape格式电子海图。VCF格式电子海图是由国内官方出版机构出版的,包括一个map.rec控制文件和46组shape文件(.shp、.shx、dbf)。shape文件结构简单,而且是GIS老大ESRI公司推出的格式,能在arcgis软件上得到很好的支持。但由于VCF电子海图并未提供arcgis软件所需的投影文件,因此在使用VCF电子海图时,例如在arcmap中加载VCF数据是没有空间控制信息的,如果只是浏览一幅图,尚且将就,如果同时打开两幅或多幅图,就会使图形叠加在一起。解决方案就是为VCF电子海图数据添加投影文件。也许你会说,arcmap提供了投影定义工具呀,但那个工具第一要求用户要非常精通海图的数学基础,第二,那个工具只能为坐标数据为投影实地坐标定义投影文件,而面对vcf这种本图坐标的数据文件就明显无能为力了。我相信实现这一功能对于ESRI公司来说太容易了,可惜ESRI公司也不会关注VCF格式电子海图用户遇到的问题。

1. ArcGIS平台数据坐标系

1.1 坐标系

ArcGIS平台的坐标系实际上是传统测绘的地图投影,它们可为地球表面上某一特定地点或区域提供共同的沟通基础。使用坐标系最关键的问题有两个:一是要了解使用的是何种投影;二是将正确的坐标系信息与数据集相关联。ArcGIS平台的坐标系将坐标系分成两种类型:地理坐标系和投影坐标系。

地理坐标系包括角度测量单位、本初子午线和基准面(基于旋转椭球体)。可通过其经度和纬度值对点进行引用。经度和纬度是从地心到地球表面上某点的测量角。通常以度或百分度为单位来测量该角度。

投影坐标系在二维平面中进行定义。与地理坐标系不同,在二维空间范围内,投影坐标系的长度、角度和面积恒定。投影坐标系始终基于地理坐标系,而后者则是基于球体或旋转椭球体的。

1.2 坐标系的定义

本文不对ArcGIS平台的坐标系的定义的工具和过程进行描述,仅对与本文主题相关的问题进行说明。当为已存在的地理数据增加坐标系定义时,如果数据坐标为图上坐标时,或者说已存数据是在投影后又经历了缩放和平移的结果。此时ArcGIS平台提供的交互式投影参数定义就不能满足要求。

1.3 坐标系的使用

Arcmap导入数据是将数据与表达数据框建立联系:

  • 如果数据框已定义坐标系,后续载入的数据会被动态的投影到相应的框架,从而自动将数据集与其他数据集集成。
  • 如果新建数据框未定义坐标系,当首次导入(加载)数据时,数据框以导入数据的坐标系为数据框坐标系。后续载入的数据会被动态的投影到相应的框架,从而自动将数据集与其他数据集集成。
  • 无论数据框是否定义坐标系,当尝试向 ArcMap 添加未定义坐标系数据时将收到此警告消息:“以下添加的数据源缺少空间参考信息。虽然可以在 ArcMap 中绘制这些数据,但不能投影。”

由于未明确坐标系数据不能投影,因此无法与其它数据集成使用,也不能正确的查询、量测,极大限制了数据的深度挖掘与使用。需要定义一个空间参考,才能在 ArcGIS 中有效地使用数据。

如果数据集没有空间参考,则无法轻松地集成它们。需要定义一个空间参考,使其在 ArcGIS 中有效地使用。空间参考或坐标系是元数据。它描述了数据已经使用的坐标框架。

2. MVCF电子海图简介

2.1 MVCF电子海图的组织结构

2003年,我国以国军标的方式正式颁布了中国电子海图格式标准,即GJB4887-2003《军用数字海图数据交换格式》。MVCF文件以图幅为单位组织,采用目录结构,目录名即为数字海图的编号,由标识符加图号组成,数据文件包括元数据文件、图形文件、索引文件和属性文件等四种文件。其中,元数据文件由制图编辑通过工具手动生成;图形文件、索引文件和属性文件由ARCGIS软件直接生成,即shape格式文件。

在海图系统中,海图的平面直角坐标是地理实体在地球椭球体上的空间坐标(三维)经地图投影映射到二维平面得到的。海图的平面坐标分为“本图坐标”和“实地坐标”两种,“本图坐标”是指空间坐标经地图投影成平面坐标后,进行比例缩放,并以本图左下角为原点,单位为厘米。“实地坐标” 是指空间坐标经地图投影成的平面坐标,不进行比例缩放,一般以赤道和零子午线的交点为原点(随投影变化),单位为米。海图一般采用墨卡托投影,但实际发布时如用户不提出要求,空间坐标均使用“本图坐标”,这就使ArcGIS用户无法在ArcGIS软件中直接正常使用MVCF电子海图数据,特别是多幅海图拼接时,由于没有投影信息,造成数据全部重叠在一起,无法应用。很多用户通过对图形文件的坐标数据经过投影反解成地理坐标(经纬度)解决这一问题,但是由于用户自行对数据的处理缺少质量控制,数据的准确性难以得到保证,存在一定的安全隐患。

2.2 MVCF电子海图元数据文件

MVCF电子海图的元数据文件名为map.rec,记录海图的控制信息,其中包含有对应图幅的实地坐标信息,是MVCF电子海图在ARCGIS平台上使用的关键信息文件。该文件内容由 23个数据项组成,每项数据为一行,以文本文件方式保存。

各项数据顺序及示例如表1所示:

表 1元数据文件

数据项名

示例数据

图号

13381

图名

册子水道及金塘水道

投影方式

墨卡托

基准纬度

30

比例尺分母

35000

南图廓纬度

29.5235

北图廓纬度

30.0535

西图廓经度

121.4103

东图廓经度

122.0208

大地坐标系

CGCS2000

数据格式

COVERAGE

数据坐标

本图坐标

数据坐标原点

29.5235,121.4103

数据坐标单位

厘米

高程基准面

1985国家高程基准

高程单位

深度基准面

理论最低潮面

深度单位

资料说明

海域主要采自2011、2009、2007年测量资料,陆地采自1984年版地形图,并根据2012年版资料修正。

出版日期

2012年7月

版次

第5版

出版部门

中国人民解放军海军司令部航海保证部

通告改正

部通告2014-172

3. ArcGIS墨卡托投影文件及参数解析

ArcGIS的投影文件定义了空间数据的数学基础,与shape数据文件同名,后缀为prj,以纯文本格式存贮。ArcGIS针对空间数据的参考属性分为地理坐标系统和投影坐标系统,如果空间数据以地理坐标(地理经纬度)形式存贮,则投影文件只需描述地理坐标系统,如果空间数据是以投影坐标形式存存贮,则投影文件包括两部分内容,即地理坐标系和投影参数。由于ArcGIS的帮助文档并没有对投影参数进行详细描述,但提供了投影定义工具,本文以墨卡托投影实例对投影参数进行形式解析,如图2所示,墨卡托投影定义主要有四个投影参数,线性单位和地理坐标系。其中:

中央经线(Central_Meridian):墨卡托投影计算中水平坐标的起算经线。

基准纬线(Standard_Parallel_1):墨卡托投影在这一纬度线上比例尺与图幅比例尺相等,也称“真实比例纬度”。

东偏移量(False_Easting):中央经线距投影数据原点的距离,单位与投影坐标数据一致。

北偏移量(False_Northing):赤道(零纬度)距投影数据原点的距离,单位与投影坐标数据一致。

线性单位:指投影数据的长度单位。

每单位米数:每个单位长度代表公制米数。

地理坐标系一般不需要用户自定义,只要从系统提供的坐标系统中选择就可以。

图 1 ArcMAP投影文件生成

4. MVCF电子海图投影文件的生成

MVCF电子海图数据采用墨卡托投影“本图坐标”系统,要正确的生成投影文件,必须要根据元数据文件的信息确定符合ArcGIS要求的投影参数。首先可以明确的是MVCF电子海图是以本图左下角点(西图廓经度与南图廓纬度交点)为原点,中央经线可以选择本图“西图廓经度”或零子午线;基准纬线与本图“基准纬线”一致;东偏移量是指中央经线距原点的水平距离,中央经线在原点以东为正值,以西为负值,单位为厘米;北偏移量是指赤道(零纬度)距投影数据原点的距离,赤道在原点以南为负值,以北为正值,单位为厘米;线性单位为厘米,每单位米数是指图上1厘米代表实地长度米数,也就是电子海图比例尺分母除以100。根据上述分析,东(北)偏移量需要进行投影计算:

东偏移量=(中央经线水平投影坐标-本图原点水平投影坐标)/每单位米数

北偏移量=(0-本图原点垂直投影坐标)/每单位米数

每单位米数=比例尺分母/100

图 2 投影文件生成流程

由于ArcGIS提供的投影定义工具中,当指定线性单位后,每单位米数不能修改,因此可以先由该工具生成一个投影文件模板,然后用文本编辑器进行修改。但这种方法只适用于单个数据文件,对于MVCF电子海图来说,每幅图几十个图层都需要投影文件,需要进行复制、改名也是很繁琐的。第二种方法是编写批处理工具,本文给出该工具流程图,用户只需指定MVCF电子海图路径,工具会自动读取电子海图元数据文件,并生成全部投影文件。以下为MVCF格式电子海图13381“册子水道及金塘水道”的投影文件内容,各图形数据文件内容一致,只是文件名不同。

PROJCS["WGS_1984_World_Mercator",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator"],PARAMETER["False_Easting",0.000000],PARAMETER["False_Northing",-8584.276826],PARAMETER["Central_Meridian",121.684167],PARAMETER["Standard_Parallel_1",30.000000],UNIT["Centimeter",350.000000]]

5. 投影文件的使用

当在ArcMap中加载未添加投影文件的MVCF电子海图数据时,系统会提示“以下添加的数据源缺少空间参考信息,虽然可以在ArcMap中绘制这些数据,但不能投影”

图 3无投影文件多幅数据重叠

为MVCF电子海图添加投影文件后,ArcMap会自动与数据框架坐标系统匹配,数据坐标显示正确,加载多幅数据时,数据相对关系正确(见图4)。

图 4 有投影文件多幅数据叠加,关系正确

6. 结论

经验证,MVCF格式电子海图,在采用本文所述方法为各图形文件生成正确的投影文件后,可在ArcGIS平台上正确使用,各图幅数据在同一制图框架内相对位置正确,弥补了MVCF电子海图数据完整性的缺陷。

VCF电子海图投影文件的生成相关推荐

  1. Aspose.Word企业案例:Lewin Technology 使用 Aspose.PDF for .NET 开发了电子 PDF 文件生成和打印系统

    关于Lewin Technology Lewin Technology 是中国山东省应用创新的主力企业.Lewin Technology 专注于互联网.移动互联网.融合通信等多个产品领域的信息应用系统 ...

  2. ETC电子发票台账工(生成Excel报表)

    ETC电子发票台账 电子发票介绍 工具特点: 使用方法: ETC电子发票批量打印功能 电子发票介绍 什么是电子发票?为什么国家要大力推进电子发票的应用?电子发票是信息时代的产物,同普通发票一样,采用税 ...

  3. vue文件快速生成模板代码

    vue文件快速生成模板代码 输入 vue 按 tab 键

  4. python读取文件名存到list_python读取文件名称生成list的方法

    下面为大家分享一篇python读取文件名称生成list的方法,具有很好的参考价值,希望对大家有所帮助.一起过来看看吧 经常需要读取某个文件夹下所有的图像文件. 我使用python写了个简单的代码,读取 ...

  5. svn增量打包部署_利用svn的补丁文件打包生成增量文件

    下面的代码是maven版本 1. 创建patch.txt增量文件 保存到 文件目录下 比如 E:\aa\patch.txt 2. 编写java代码 package utils; import java ...

  6. r.java没有生成_r.java文件没有生成

    最近几天学习android ,学习时候难免要导入一些示例,目的为了更加了解android各种API用法,顺便也可以学习下别人代码的写法.可是导入android源码后,基本都有错误,R.java也不会自 ...

  7. jni头文件自动生成

    写一个测试代码,大概如下 1 package aa.bb; 2 3 public class TestClass { 4 5 public native void aaaBBB(); 6 } 在项目的 ...

  8. roslyn生成html,Visual Studio 2017 bin \ roslyn文件在生成期间被锁定

    Visual Studio 2017 bin \ roslyn文件在生成期间被锁定 我正在运行VS2017版本26430.13,每次尝试构建Web项目时,都会收到错误,拒绝访问bin \ roslyn ...

  9. PHP代码为什么不能直接保存HTML文件——PHP生成静态页面教程

    1.服务器会根据文件的后缀名去进行解析,如果是HTML文件则服务器不会进行语法解析,而是直接输出到浏览器. 2.如果一个页面中全部都是HTML代码而没有需要解析的PHP语法,则没有必要保存为PHP文件 ...

最新文章

  1. python - classs内置方法 solt
  2. 微信小程序中base64转换成图片;uni-app小程序base64转图片;微信小程序base64文件转图片;微信小程序base64图片转图片
  3. 【转】ABP源码分析四十:ZERO的Application和Tenant
  4. 图论 —— 生成树 —— 最小瓶颈路
  5. mongodb数组操作符
  6. 肺功能曲线图怎么看_QQ或将推出已读功能?!你怎么看?| 微博报
  7. xxs漏洞危害_PHP开发中经常遇到的Web安全漏洞防御详解
  8. 正则表达式基本语法规范
  9. ubuntu nginx配置虚拟主机,目录
  10. matlab车流量检测,求解释代码,一段交通车流量检测的代码
  11. composer killed while updating or install
  12. 苹果手机投屏win10电脑
  13. 新一配:创建数据透视表时的注意事项【转载】
  14. 天使投资人刘峻:腾讯的七条命 |捕手志
  15. stm32闪存的理解
  16. JAVA+appium+夜神模拟器实现APP爬虫
  17. 20175208 张家华 实验四《Android开发基础》实验报告
  18. 两个女孩全程不带现金,只付加密货币几乎游遍大半个国家是一种什么体验?...
  19. 1996届瑞安市计算机学校,1996届校友
  20. 基准测试 计算机,用于 Windows、安卓和 iOS 系统的 3DMark 基准测试

热门文章

  1. c++使用malloc来做内存分配创建链表
  2. 不动的大图书馆 第一期
  3. Oracle各版本驱动下载
  4. 轻松打造图文并茂的Word文档(转)
  5. Java基础之读取键盘录入
  6. 项目Alpha冲刺(团队)-第十天冲刺
  7. 网络攻击之WebShell
  8. Java数组赋值的方法
  9. 2016年12月六级翻译
  10. SqlServer本地数据库迁移到服务器