MapInfo地图查询的简单实现

GIS高阶开发。
【以我做的gis系统GIS_socialPolice为例,讲解是如何实现一个互动操作的,因为,当你了解了如何与地图实现互动,你就掌握了地图的应用原理】
首先,我们想对地图上的数据元进行操作,就必须知道它的位置,而位置无非是通过经纬度坐标来定位的,那么,如何获取经纬度就成了关键点了,
我已经跟你说了咱们是如何通过mapInfo7。0来提取坐标了【即在地图上插入一个图元,标示其经纬度】,那么,在mapInfo建立每个图层时,他就相应的给
我们创建了一个来描述这个图层的图层信息表,在咱们操作地图的时候,大部分时间就是对这个底层的信息表来操作的,说白了,GIS在很大程度上也是一种
对数据库的操作,这个需要你学的时间久了以后,自己慢慢领会。
这样,咱们知道了GIS的操作基本原理以后,具体介绍一下,他的一个实现过程。

1、首先,添加一个触发图标,以提供给用户来操作地图,我们以坐标信息查询为例,这个最为典型,我们来实现一个按人员姓名来查询信息,查询
出该人员以后,然后将其定位在地图上【其它的操作以此类推,基本原理都是在这个获得坐标
信息的基础上,来操作地图的】
2、不妨添加一个按钮,其值设为“查询”,添加一个文本框,提供用户输入所需要查询的信息。
3、在安装MapInfo的路径下有一个MapInfo数据帮助文档,叫“程序员参考手册”,这里提供了一系列对象供我们来操作数据。
4、在这里,我们用到了SearchInfo对象,他是定义在MapInfo。Data命名空间下的对象,我们这样来声明这个对象
 SearchInfo si=MapInfo.Data.SearchInfoFactory.SearchWhere(strWhere);//strWhere为我们查询的条件
 在这里我们需要查询某个人名,所以strWhere=“name like '%'"+strName+"%'"
5、通过SearchInfo对象,我们可以获取地图信息表中的查询对象的实体,我们将其放倒一个IResultSetFeatureCollection对象中。
 这个对象使用来盛放搜索的结果的,这个对象也是定义在MapInfo。Data命名空间下面的。我们这么声明对象,并且把查询的
 数据放倒这个对象中。
 IResultSetFeatureCollection ifs = MapInfo.Engine.Session.Current.Catalog.Search(mapTable, si);
 //mapTable:表示,你是对那个表进行操作的,我们这个表就是通过mapinfo来创建的。
 //si则是,我们步骤4中创建的对象。
6、首先,判断一下这个结果集ifs中是否有元素,ifs。count>0,如果否,则返回空。
7、下面我们来实现如何定位到地图上,首先,将目前地图的选择状态先清空一下,来显示当前刚做的操作。清空状态是这样实现的:
 MapInfo.Engine.Session.Current.Selections.DefaultSelection.Clear();
8、我们把刚才的结果集放到MapInfo提供的Session中:
 MapInfo.Engine.Session.Current.Selections.DefaultSelection。Add(ifs);
9、下面开始查询:我一句一句解释:
 //MIConnection:就像我们C#中的连接字符串
 MIConnection connection = new MIConnection();
 //MICommand像我们C#中的Command对象。
        MICommand command = connection.CreateCommand();
 //给Command的CommandText赋值
        command.CommandText = "Select jd,wd From  " + mapTable + "  Where name like '" + paramInfo + "'";

        connection.Open();
 //创建一个数据集,以盛放我们的结果。
        MIDataReader reader = command.ExecuteReader();
        double[] outInfo = new double[2];
        if (reader.Read())
        {
            outInfo[0] = Convert.ToDouble(reader.GetValue(0));
            outInfo[1] = Convert.ToDouble(reader.GetValue(1));

        }
 //不要忘了释放资源。
        reader.Close();
        command.Dispose();
        connection.Close();
 //这里,我们返回一个数组
        return outInfo;
10、我们第一个数组,来盛放上一步返回的结果:
 double[] sitexy=outInfo;
11、我们要想把数据定位到地图上,无非是获得我们想看的信息的经纬度坐标,然后,把这个信息元移动到地图的中心点,这样也方便用户查看。
 具体操作是这样的。
  setCenter(sitexy[0],sitexy[1],0.17);//这个setCenter()函数的功能就是实现了地图的中心点移动。
  //解释一下参数 的意义:sitexy[0]:表示经度,sitexy[1]:表示纬度,而0。17则表示我们当前把地图放大的倍数。
12:这个函数的实现如下:
    private void setCenter(double x,double y,double level)
    {
 myMap.Center = new DPoint(x, y);     
        myMap.Size = new System.Drawing.Size((int)this.MainMap.Width.Value, (int)this.MainMap.Height.Value);//用指定宽度,高度初始化新的示例
        MapInfo.Geometry.Distance d = new MapInfo.Geometry.Distance(level, myMap.Zoom.Unit);//有效距离类型 距离可以是球面坐标距离或笛卡儿坐标距离。
        myMap.Zoom = d;
    }
    //myMap:MapInfo.Mapping.Map myMap,获得正执行线程上的当前 ISession 实例
   上面12个步骤就是我们一个完整的地图查询信息的过程,还有不懂得地方,可以留言!
  

你可能感兴趣的:(MapInfo地图查询的简单实现)