FME 坐标系使用(三) ----关于坐标系变换

原文发布时间:2010-08-17

作者:乱马

   对于FME进行坐标系变换,涉及两种不同的变换,一个是基准面(Datum)发生变换,另一个基准面不发生变换。本文对第一种变换进行描述。 

对于基准面发生变换的坐标系变换,在FME Workbench中使用Reprojector函数,在该函数中要分别选择源数据坐标系和目标数据坐标系,确定后,即可进行坐标系的变换。

    

或者对于源数据和目标数据,分别设置坐标系,FME在进行数据转换的时候,就可以自动进行坐标系的变换。 

       

但是如何设置一个用户自定义的坐标系,能在FME的坐标系仓库(Coordinate System Gallery)中选择,然后进行坐标系变换呢。

通常,定义一个坐标系是确定这个坐标系的几个参数----椭球体参数,基准面参数以及投影参数。对于FME的坐标系参数定义涉及两个文件,LocalCoordSysDefs.fmeMyCoordSysDefs.fme。这两个文件都位于FME安装目录下的子目录Reproject下。在LocalCoordSysDefs.fme文件中定义基本的参数----椭球体参数和基准面参数。在文件MyCoordSysDefs.fme中定义投影参数。

 

椭球体的定义:

ELLIPSOID_DEF <ellipsoidName>       

   DESC_NM <descriptive name>        

   SOURCE <source>                  

   E_RAD <equator radius>          \   

   P_RAD <polar radius>

 

参数描述如下:



如果一个椭球体已经在FME里面预先定义了,在以后所有的用到的地方都可以引用,不必重新定义,比如KRASOV,或者XIAN80等。

 

基准面的定义:

DATUM_DEF <datumName>            \

  DESC_NM <descriptive name>    \

 SOURCE <source>               \

 ELLIPSOID <ellipsoid name>    \

 USE <use type>                \

 DELTA_X <x value>             \

  DELTA_Y <y value>             \

  DELTA_Z <z value>             \

  BWSCALE <bwscale>             \

  ROT_X <rotX>                  \

  ROT_Y <rotY>                  \

  ROT_Z <rotZ>

 

参数描述如下:

名称

类型

描述

是否为空

<datumName>

字符串

基准面的名称

No

<descriptive name>

字符串

基准面的描述

Yes

<source>

字符串

椭球体来源(个人或者组织)

Yes

<ellipsoid name>

有效的椭球体名称

引用已定义的椭球体名称

No

<use type>

3PARAMETER

4PARAMETER

6PARAMETER

7PARAMETER

AGD66

AGD84

ATS77

BURSA

CSRS

DHDN

GDA94

HPGN

JGD2K

MOLODENSKY

MULREG

NAD27

NAD83

NZGD2K

NZGD49

WGS72

WGS84

基准面变换中使用的变换类型(变换公式)

 

No

<x value>

浮点数

空间直角坐标系X轴与WGS-84基准面空间直角坐标系X轴的位移量。(单位:米)

No

<y value>

浮点数

空间直角坐标系Y轴与WGS-84基准面空间直角坐标系Y轴的位移量。(单位:米) 

No

<z value>

浮点数

空间直角坐标系Z轴与WGS-84基准面空间直角坐标系Z轴的位移量。(单位:米)

No

<bwscale>

浮点数

7参数转换中的比率(BURSA类型)。(单位:PPM   百万分之)

不是所有类型都需要

<rotX>

浮点数

7参数转换中的X方向的旋转偏移(BURSA类型)。(单位:弧度)

不是所有类型都需要

<rotY>

浮点数

7参数转换中的Y方向的旋转偏移(BURSA类型)。(单位:弧度)

不是所有类型都需要

<rotZ>

浮点数

7参数转换中的Z方向的旋转偏移(BURSA类型)。(单位:弧度)

不是所有类型都需要

当已知一个坐标系的基准面和WGS84基准面之间的变换关系,就可以利用上面形式,把一个坐标系定义出来。

下面是一个以7参数(布尔莎算法)为例的定义:

DATUM_DEF DHDN \  

DESC_NM  “Deutsches Hauptdreicknetz (DHDN)” \  

SOURCE  “German Government”  \  

ELLIPSOID  BESSEL \   

USE  BURSA \  

DELTA_X  582.00000000000 \  

DELTA_Y  105.00000000000 \  

DELTA_Z  414.00000000000 \  

BWSCALE  8.3000000000000 \ 

ROT_X  -1.0400000000000\

ROT_Y  -0.35000000000000\

ROT_Z  3.0800000000000

 

如果一个基准面已经在FME里面预先定义了,在以后所有的用到的地方都可以引用,不必重新定义,比如WGS84BEIJINGXIAN80等(注意,FME预定义的BEIJINGXIAN80定义不是准确的基准面定义,详见前面的博客)。

 

定义中要注意,在LocalCoordSysDefs.fme文件中最后一行是:

INCLUDE MyCoordSysDefs.fme

所有椭球体和基准面的定义,都要在这一行之前。

 

定义完以上两个参数,就可以在MyCoordSysDefs.fme中定义具体的坐标系参数(投影)了。

 

坐标系定义:

COORDINATE_SYSTEM_DEF  <coordsysname>  \

PROJ <projType>                             \

UNIT <unitName>                            \

DT_NAME <datumName>|EL_NAME <ellipName> \

[<parameter> <value>]+                        \

[ DESC_NM <descriptive_name>]               \

[GROUP <group_name>]                       \

[ QUAD <quadrant>]                          \

[ SOURCE <source>]                          \

[ZERO_X <zero_x>]                          \

[ZERO_Y <zero_y>]                          

 

参数描述如下:

名称

类型

描述

是否为空

<coordsysname>

字符串

投影坐标系名称

No

<projType>

字符串

投影类型(如TMLL等。具体见FME帮助)

No

<source>

字符串

坐标系来源(个人或者组织)

Yes

<unitName>

字符串

坐标单位

No

<group_name>

字符串

分组名称,可以在Gallery中进行分类

Yes

<datumName>

字符串

基准面名称,引用已经定义的基准面名称

Yes

<ellipName>

字符串

椭球体名称,引用已定义的名称。椭球体名称和基准面名称必须填写一个。

Yes

<parameter> <value>

字符串+数字

参数+数字(1-24),表示具体参数定义,如中央度线等,取决于投影类型(具体参见FME帮助)。

No

<quadrant>

整型

象限区代码

Yes

<zero_x>

非负数

设定一个X最小值的非零值

Yes

<zero_y>

非负数

设定一个Y最小值的非零值

Yes

 

其中注意的是,投影类型的参数要根据需要定义。下面是个例子:

COORDINATE_SYSTEM_DEF UTM12N83 \

PROJ TM \

UNIT METER \

DT_NAME NAD83 \

GROUP "Custom Group" \

PARM1 -111.0 \

SCL_RED 0.9996 \

ORG_LAT 0.0 \

X_OFF 500000.0 \

Y_OFF 0.0 \

MAP_SCL 1.0 \

ZERO_X 0.001 \

ZERO_Y 0.001


这个定义所选择的基准面为NAD83,投影方式采用的是TMTransverse Mercator),参数包括:PARM1ORG_LATSCL_REDMAP_SCLX_OFFY_OFF(具体投影类型和参数见FME随机帮助)。

 

简单总结一下,如果已知一个坐标系和WGS84坐标系的变换关系(比如7参数),那么就可以把这个坐标系定义到FME中,和其他已经定义的坐标系进行变换。

 

但是,经常性的一个问题是,我们已知2个非WGS84的坐标系的7参数关系,如何在FME定义,并实现转换呢。例如,我们知道某个投影带下的北京54和西安80的之间的7参数,该如何处理呢?

 

这里我们只要通过一个变通的定义方式,完成两组坐标系的定义即可。例如,从北京54到西安807参数是一组值:dxdydzrxryrzbs。先用这组参数定义北京54WGS84的坐标系定义;然后再用0000001这样一组7参数,完成西安80WGS84的坐标系定义。这个方法,不仅在实际中得到很好的应用,而且可以用坐标系变换的公式进行证明,具体证明过程就不详细介绍了。只不过,这样的定义方式,只能用于这两个坐标系之间,而不能用于和其他坐标系的变换。





猜你喜欢

转载自blog.csdn.net/fmechina/article/details/80896070
今日推荐