ArcGIS编程实现自定义坐标转换的问题

写的内容跟标题可能不是很符合,不知道该如何写这个标题,看内容吧。

我们有一个自己编写的地方平面坐标系到WGS84球面坐标系转换的代码,该代码只是实现空间数据实际存储坐标值的变化,并不是修改地理坐标或投影坐标的定义文件,在ArcGIS中,如果要使用坐标系的功能,必须定义地理坐标系或投影坐标系。

以前在用这个转换类库没有碰到问题,但这次使用碰到问题了,转换后导出的数据坐标不对,因为WGS84坐标值范围很小,所以一开始还没发现,下面说说过程。

1、 原始数据描述

原始数据是存储在mdb中的Personal Geodatabase数据,建了数据集,在数据集上定义了投影坐标系,北京54高斯克吕格北纬20带(6度带),该数据集的数据加载到ArcMap上,Layer的坐标系直接就是上述坐标系。

2、 数据处理过程

(1)从原有的Personal Geodatabase提取空结构保存为File GeoDatabase,就是用ArcGIS 的distribution database工具,用于转换后的数据存储(这个就是我问题的产生来源);

(2)因为我们的坐标转换是基于单点转换的,所以写程序,将点、线、面的每个角点转为WGS84的经纬度值,然后重构图形。点简单(单点和多点),线、面复杂,要考虑多part和内外环的问题

(3)执行程序,写入新的图层;

(4)执行完毕,没有问题,o(∩_∩)o 哈哈;

3、问题来了

(1)一看转换完的数据,跟原来人工加工的区划图和道路网图有明显的偏差,不是很大,确定转换有问题了;

(2)检查了坐标转换类库,检查图形转换程序,检查了原始数据,检查了空结构,没有发现问题,折腾了一天;

(3)最后只能怀疑是原始数据的问题,重新用Personal Geodatabase和File GeoDatabase导了几遍,问题依然,又是一天,其实就死在这里;

4、问题处理

(1)将原有数据全部导出为Shapefile,然后删除prj、sbn、sbx、xml文件,指保留shp、shx、dbf三个文件;

(2)目标数据源空结构也全部采用Shapefile,一样只保留shp、shx、dbf三个文件;

(3)重新执行坐标转换,这回,真的OK了,o(∩_∩)o 哈哈;

(4)将成果Shapefile数据导入到File GeoDatabase中,在File GeoDatabase中的数据集定义了WGS84地理坐标系,数据终于可以用了。

5、问题分析

其实还是不能确定问题的本质,但可以确定跟原始数据有投影坐标系定义,以及目标空结构有坐标系定义造成的,进而可以想到ArcGIS软件,对Shape实际存储的坐标其实并不十分关心(针对坐标系统来讲),在调用ArcObjects接口转换时,可能内部调用了坐标系参数定义,并参与了坐标数据写入时的工作,没有查到详细的说明。突然发现Shapefile还是有用的,因为试过,在Personal Geodatabase和中File GeoDatabase删除投影定义,转换依然不正确。

所以,找到了问题,也知道怎么解决,但不知道具体原因,知其然,不知其所以然吧,但这并不影响我把这事做完,呵呵!

posted @ 2013-03-21 08:28  ampler  阅读(1386)  评论(0编辑  收藏  举报