一个关于Mapinfo数据和数据库的问题

来源:百度知道 编辑:UC知道 时间:2024/05/14 05:57:37
我用VB6.0编程。
通过编程实现Mapinfo数据中的mif数据的显示,不要用别的插件或者是开发控件。我在附件中放了两个mif文件,其中存储的是几条线的信息。
要求是,第一个功能是通过编程把mif文件中的空间数据导入Access数据库中。第二是把数据库中的空间数据显示出来。
我一个同学是这样做的,先把mif数据转入TXT文件,
再把TXT文件中的空间数据导入数据库,显示的时候是把Access中的空间数据导入TXT文档中,再空间数据显示出来。
老师的要求是把MIF文件中的空间数据直接导入数据库中,显示时在直接提取显示,数据库的连接使用ADO连接的方法。
那位大侠帮我一下,有什么思路,代码,或者资料都成,最好是资料。
我的邮箱是dsfdsf123@yahoo.com.cn

1 Callback

在我们的程序中集成MapInfo应用后,MapInfo能够自动地向客户程序发送信息。例如,在应用程序中,当地图窗口发生变化时,MapInfo将调用客户端程序通知发生变化的窗口的句柄。当发生某一事件导致MapInfo调用客户端程序的这种方法称为Callback(回调)。

在下列情况中,Callback允许MapInfo发送消息给客户应用程序:

·用户使用定制工具与MapInfo窗口进行交互

例如,用户点击并拖动鼠标在MapInfo的地图窗口上画线时,MapInfo能够把用户选择的各点坐标消息发送给应用程序。

·用户选择菜单命令

例如,如果应用程序定制了MapInfo的快捷菜单(即用户右击时弹出的菜单),当用户从快捷菜单中选择了定制的命令后,MapInfo就会把这个菜单事件通知给应用程序。

·地图窗口发生变化

当用户改变地图窗口内容(如添加或删除图层,平移地图时),MapInfo就会将发生变化的窗口句柄告知应用程序(这类似于apasic自身的句柄过程:WinChangedHandler。)?

·MapInfo中状态栏的内容发生变化

2 在P中实现MapInfo的callback

为了使用MapInfo的callback,应用程序必须能作为DDE服务器或OLE自动化服务器。VC++,V,Delphi等开发工具对OLE自动化服务的支持都很好,开发起来很方便。但P对OLE自动化服务的支持不够理想,笔者和周围的许多同行试了很多方法都未能实现Callback。是不是在P里就不能使用MapInfo的Callback呢?通过查阅了大量的文献,终于找到了一个方法实现了Callback。其原理如图1所示。

图1 在P中实现MapInfo的callback的原理图

实现步骤如下:

打开P的库画板,新建一个P库并命名为Ole[CD#*3]Callack.pbl;定义一个立即数变量:integer handle;在库中创建一个不可见自定义用户对象:nuo[C