MapInfo地图查询的简单实现

简介: GIS高级开发【以我做的gis系统GIS_socialPolice为例,讲解是如何实现一个互动操作的,因为,当你了解了如何与地图实现互动,你就掌握了地图的应用原理】首先,我们想对地图上的数据元进行操作,就必须知道它的位置,而位置无非是通过经纬度坐标来定位的,那么,如何获取经纬度就成了关键点了。

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 = "Selectjd,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 = newSystem.Drawing.Size((int)this.MainMap.Width.Value,(int)this.MainMap.Height.Value);//用指定宽度,高度初始化新的示例
        MapInfo.Geometry.Distance d = newMapInfo.Geometry.Distance(level, myMap.Zoom.Unit);//有效距离类型 距离可以是球面坐标距离或笛卡儿坐标距离。
        myMap.Zoom = d;
    }
    //myMap:MapInfo.Mapping.Map myMap,获得正执行线程上的当前 ISession 实例

   上面12个步骤就是我们一个完整的地图查询信息的过程!


相关文章
openlayers+geoserver+wms实现空间查询,属性查询
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gisdoer/article/details/81530228 openlayer...
3511 0
|
XML JSON 数据可视化
怎么获取echarts需要的geoJson数据去渲染地图:以广州市白云区24镇街为例(内附资源)
怎么获取echarts需要的geoJson数据去渲染地图:以广州市白云区24镇街为例(内附资源)
438 0
怎么获取echarts需要的geoJson数据去渲染地图:以广州市白云区24镇街为例(内附资源)
|
数据可视化 定位技术
怎么获取echarts需要的geoJson数据去渲染地图:以广州市白云区24镇街为例(内附资源)2
怎么获取echarts需要的geoJson数据去渲染地图:以广州市白云区24镇街为例(内附资源)
408 0
怎么获取echarts需要的geoJson数据去渲染地图:以广州市白云区24镇街为例(内附资源)2
多种特殊echars图表实现的方式记录
多种特殊echars图表实现的方式记录
119 0
|
定位技术
SwiftUI—使用MapKit里的地图视图
SwiftUI—使用MapKit里的地图视图
376 0
SwiftUI—使用MapKit里的地图视图
|
数据可视化 BI Python
快速绘制动态排序图 — Pyecharts 高级组件 Timeline 实现!
之前写过一篇关于Python 制作 动态排序图的教程,里面利用的是 Matplotlib 中的 animation 函数,文章内容可参考动态排序图的详细制作教程,动态排序图的最终部分效果如下:
快速绘制动态排序图 — Pyecharts 高级组件 Timeline 实现!
|
定位技术
openlayers4+geoserver wfs实现空间分析、属性查询
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gisdoer/article/details/79500449 openlayers4,geoserver wfs实现空间分析、属性查询 http://www.
1889 0