最近应公司的需要开发一个GIS系统,由于以前使用MapInfo公司的MapX开发过程序,自信应该使用最新的MapXTreme和Visual Studio2008来进行开发没问题,很快从MapInfo官方网站下载了最新的试用版MapXtreme,准备开始开发,没想到首先这东西就给我来了个下马威,原来在MapX下用得好好的地图文件,就是无法加载到地图中。使用MapXtreme2008自带的Workspace Manager程序加载原来的gst文件时出现以下提示:
这个对话框是相当的不友好!除了告诉我出错之外,没给出任何对解决问题有帮助的信息!反复试验均是如此,逐个图层加载时发现只有一个图层能加载上。起先怀疑难道是MapX5.0能用的Tab文件与MapXTreme能用的Tab文件不兼容?可是为什么有的Tab文件能加载有的就不能加载?后来翻到MapXtreme自带的示例程序,其中有一个MapLoader程序,拿它来加载GeoSet时总算有了点提示!
但是各位,从这个对话框我们能看出些什么信息呢?为了能发现点什么,我用记事本打开了这个Tab文件,它其实也就是一个文本,其内容如下:
!table
!version 300
!charset WindowsSimpChinese
Definition Table
Type NATIVE Charset "Neutral"
Fields 18
FID Decimal (15, 0) ;
FNode Decimal (15, 0) ;
TNode Decimal (15, 0) ;
Length Float ;
Name Char (60) ;
PopName Char (30) ;
District Char (27) ;
Attribute Char (11) ;
Code Char (30) ;
Speed Char (30) ;
Limit Char (100) ;
Toll Char (20) ;
Doorplate Char (250) ;
CName Char (254) ;
EName Char (60) ;
Update Date ;
Source Integer ;
GUID Char (32) ;
虽然以前并不了解Tab文件内部的含义,不过从内容也可以猜测,这应该是类似于表中的字段定义,前面是字段名,后面是数据类型。根据提示信息Invalid identifier(date),我找到倒数第三行确实有个Date这单词。难道MapXTreme不支持Date数据类型吗?反正别无他法我就死马当活马医吧!索性把Date改成DateTime试试,结果还是出错。我索性把这个字段删除,字段数量也减1,保存后再加载,是不再出上面的提示框了,出来另一个对话框提示诸如数据源数据与定义不一致的信息。这也是可以想像的,毕竟不可能就这么把字段定义删除了还能得到正确结果的。那么还有什么办法呢?我差点要打电话找提供数据给我的人大骂他一顿了,为这个问题搞了一上午还是百思不得其解!
生气之余还是没办法,只有冷静下来分析那少得可怜的错误信息——Found[;] while searching for [set]。等等!这个句式怎么那么熟悉呢?难道是……SQL语句?SQL语句中更新语法不就是Update XXX Set XXX=XXX吗?该不会在MapXtreme打开Tab文件时还把这里面的定义当SQL语句解析了?如果真是这样的话肯定有问题,毕竟Update是关键字,我们现在相当于把Update当字段名定义了(估计提供者提供这个字段的意思是最后更新日期)。果真如此,我只需……我马上用记事本将倒数第三行的Update Date;改为LastUpdate Date;保存,加载……OK!That's great!终于不再出现那种恶心的对话框了!
总结了下(虽然还是没有深入了解MapInfo的Tab文件格式,但毕竟解决了问题):早期的MapX版本,对Tab文件的处理不如MapXTreme中加载Tab文件的方式“先进”,“先进”在哪具体还不清楚,但是它确实用SQL语法的解析来应用到Tab文件加载中了,为什么这么做可能另有原因,需要加紧学习MapXtreme的引擎,不过这要求我们在建立或处理用于MapXtreme引擎的Tab文件时一定要注意字段的命名,不要和SQL语句中的关键字发生冲突!只要稍微注意一下这种问题应该还是可以避免的。当时若有高手在旁指点迷津,也许根本就不会花费那么大精力去分析解决这个小问题了。因此将这个经历写出来,希望对和我一样的MapXtreme初学者有所帮助,不至于象我这样几乎抓狂了……
本文介绍了解决MapXTreme加载特定Tab文件时遇到的问题。通过更改字段名避免与SQL关键字冲突,成功实现了地图文件的加载。
1096

被折叠的 条评论
为什么被折叠?



