在MapInfo Professional中有三个投影概念分别用于不同的对象(实际上MapInfo将投影和坐标系混在了一起,所以这里的投影包括坐标系投影选择对话框内的所有选项),这三个投影分别是表投影、会话投影和视图投影.

表投影实际上是表本身的投影设置,尽管投影在经纬度坐标系的地图存储中没有什么意义,但是在打开数据的时候总是需要一种默认的投影方式进行打开,这个默认的方式本身就是表投影,当然,一旦打开成地图,那么表投影就成了默认的视图投影。因为数据本身的存储也和采用什么坐标系和投影方式有一定的关系,因此,表投影还是非常重要的。影响表投影的操作有两个,一个是在建立新表的时候,构建表结构时需要选择的投影方式,这个投影一旦选择将不可再更改,所以在做矢量化的时候一定注意;另一个是在菜单 选项-》参数设置-》地图窗口-》缺省投影-》表投影,在点击此按钮之后进行选择的投影将成为新建表时默认的投影选项,如果你经常绘制工程图,那么设置默认成非地球坐标系应该是比较方便的。

会话投影是一种内置的坐标系转换机制,它允许你采用不同的坐标系和投影去获得同一个点的坐标,比如这个表本身是高斯克吕格投影,坐标值采用的是平面直角坐标系,单位是米,但是现在需要获得经纬度的数值,可以通过将会话投影设置为经纬度的投影方式,就可以通过CentroidX()、CentroidY()获取经纬度坐标值了。会话投影的更改可以通过MapBasic语句Set CoordSys来改变,也可以通过菜单 选项-》参数设置-》地图窗口-》缺省投影-》会话投影进行改变,即使生效,只不过语句修改是一次性的,菜单对话框将成为professional中默认的。另外,会话投影的改变不影响地图的显示。详细请参考MapBasic帮助文档中有关Set CoordSys语句一段。
视图投影是经常用到的。我们知道矢量数据本身不具有固定的投影,可以根据需要将他们动态调整为各种投影方式。通过菜单 地图-》选项-》投影进行修改。由于这个比较简单,就不做太多叙述了。


以上是网上找到相关资料,不过今天用了以后才发现,不是这么回事,MAPBASIC 写完的代码,读取地方坐标如:501699.9760 ,298524.3716 用CentroidX()、CentroidY()获取的坐标是 4.23423,6.32345 这样格式,那是哪里出了问题呢?

改表投影,会话投影,视图投影,问题依旧。

经过一段时间的研究(5小时),发现由于代码使用不当造成的问题,但是又不知道错的位置,一不做二不休,干脆关于坐标和单位的定义,全部定义上,发现好使了
    Set Map XY Units “m”
    Set CoordSys NonEarth Units “m” Bounds (XXXXX,XXXXX)(XXXXX,XXXXX)
    Set  Distance Units “m”
    Set  Paper Units “mm”
    Set Map CoordSys LayOut Units “m”

     总结了一下,觉得最关键的语句还是定义会话投影,如果不定义会话投影,MAPINFO自带的默认投影对程序读取地方坐标不利。