MapBasic常见问题及解答.doc_第1页
MapBasic常见问题及解答.doc_第2页
MapBasic常见问题及解答.doc_第3页
MapBasic常见问题及解答.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MapBasic-常见问题解答1. MapBasic的程序在Professional下调试完成,如何移植到Runtimes上?l 利用 mapbasic 开发的 Professional 环境下的应用程序,要运行在runtime 环境下,应当在你的程序中增加 Menu Bar Show 命令,以使你的应用程序的菜单显示出来。在利用其它语言如,Visual Basic,Visual C+,Delphi等以Ole Automation方式开发应用程序时,Mapinfo Professional 环境下的程序要运行在Mapinfo Runtime 环境下,应当将创建Mapinfo 对象的语句重写,以Visual Basic 为例,在Mapinfo Professional环境下:Dim Mapinfo as objectSet Mapinfo = Createobject(Mapinfo.Application)在Mapinfo Runtime环境下:Dim Mapinfo as objectSet Mapinfo = Createobject(Mapinfo.Runtime).2.为什么我在MapBasic程序中利用Commandinfo(CMD_INFO_X)和Commandinfo(CMD_INFO_Y)获得的点击处的经纬度坐标值,其小数点后总是4位,如何才能提高其精度?l 你可以利用 Format$(CommandInfo(CMD_INFO_X), ,#.#) Format$(CommandInfo(CMD_INFO_Y), ,#.#) 将坐标精度提高到小数点后6位。3 如何创建字体?l 创建字体的语句如下:Create Text into Window Frontwindow() Hello! (10,10)(20,20) Font MakeFont(Helvetica, 1, 12, BLACK, WHITE)上句中,12指所要创建的字体的大小,(x,y)指定字符串的左下及右上角位置。将来显示出来的字符的实际大小只由(x,y)来控制。4. 如何改变地图单位?l commandinfo()和objectgeography()都可用来获取当前地图窗口中的特定点的坐标,但是对于非地球投影的地图应当注意一个问题:如果当前地图为地球投影则两个函数获取的为经纬度坐标,其与status bar上显示的坐标一致。但当前地图为非地球投影时,则应当利用:set coordsys nonearth units m bounds(0,0)(10,10)来设置当前地图的投影,否则利用上述的两个函数时会得出不正确的坐标信息。另外,还要注意的另一个问题是:commandinfo()只能用在用户自己定义的过程中,不能用在Mapinfo的系统过程中(例如,Selchangedhandler()),否则得到的并不是坐标信息,而是该对象在数据库中的记录号。但objectgeography() 却没有此问题。5如何设置窗口投影与坐标体系?l 仅以无大地坐标为例:在程序中必须使用下面的语句:Set CoordSys NonEarth Units m Bounds (0,0)(1000,120)它是设置MapBasic编程的坐标系的。6. 如何利用几个点来绘制折线?l 利用 Create Pline statement 是可以解决您的问题的。例句如下。Create Pline into window frontwindow() 5 (10,20)(20,10)(20,30)(40,60)(50,70)7. 如何利用Mapbasic实现选择多个区域?l 这个问题我想很简单,选择区域和选择点、线等地物对象是一样的。只要有多个区域同时满足相同的条件,则一条选择语句自然会将所有满足该条件的区域都选中。 例如,Select * from China where Total_Pop_Proj = 30000000 会将所有人口数大于等于30000000的城市全部先选中。8. 如何利用Mapbasic实现动态改变数组的大小? dim a(10) as integer for i=1 to 10a(i)=i next redim a(20) for i=11 to 20 a(i)=inext9如何实现选择区域内的所有对象的选择?l Select * from table where obj within (select obj from table)说明: table 是所要选择的地物对象所在的表,table 是新创建的选择工具所在的表。10. 如何让数据库在找到一条记录后,停止搜索?用户自己建立了一个Mapinfo 表,其中存储了一万多个常用汉字的编码(按照汉语拼音的顺序进行编码)。想利用 select 语句来对给定的任意汉字搜索其编码,但当要搜索的汉字很多时,用户发现其速度很慢。能否有什么办法让Mapinfo 在找到某个汉字的编码之后,即停止对数据库的遍历。l 这个问题的解答:1利用 MapBasic 的 Select 语句是无法控制对数据库的遍历的。每执行一次Select,即遍历一次数据库。2改进办法:利用While.Wend 可以让Mapinfo 在找到一条记录后,即可让数据库指针指向数据库的最后一条记录(Fetch last from.)。但是利用While.Wend循环分支其速度,可能比Select 要慢,而且当所要查找的记录处于数据库的最后一条记录时,同样要对数据库遍历一次。唯一的办法就是,对汉字的编码进行预先设计。比如,可以在对汉字进行编码时,将其拼音的第一个字母也考虑进去,这样在搜索时,可以根据第一个拼音字母对数据库指针的位置预先进行设置,这样可以让Mapinfo少搜索很多记录。在找到一条记录后,再利用Fetch last from.让数据库指针指向数据库的最后一条记录。这样对数据库的搜索速度会快得多。11. 如何选择cosmetic layer中的对象?我们在使用Select * From Cosmetic1时报错: 文件#0没有配准,无法访问,是何道理?l 在Mapbasic窗口中执行Select * from cosmetic1 会出现此提示对话框,但当用户在MapBasic程序中执行此语句时(或Select * from windowinfo(frontwindow(),win_info_table)),是不会出现此提示的。12. Mapbasic和连接表的问题发生如下错误, 是什么原因?MapBasic部分:763764 删除临时表765 Delete From lorgan_tmp766 Commit Table lorgan_tmp Interactive767768 保存Selection到临时表769 Insert Into lorgan_tmp Select * From Selection770 Commit Table lorgan_tmp Interactive771说明: lorgan_tmp为链接表补充: 当Selection中记录的个数少时, 无此错误出现.l 此问题的解答:Include c:program filesmapinfomapbasicmapbasic.defInclude c:program filesmapinfomapbasicmenu.defdim i,j,k as integerclose all interactiveServer Link Table Select * from Authors Using DSN=db;DBQ=C:tempdb1.mdb Into Authors1 File C:tempAuthors1.TABOpen Table C:tempAuthors1.TAB InteractiveBrowse * From Authors1Open Table C:te

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论