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个步骤就是我们一个完整的地图查询信息的过程!


相关文章
|
1天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
11天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
5天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
459 198
|
3天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
516 157
|
3天前
|
数据采集 消息中间件 人工智能
跨系统数据搬运的全方位解析,包括定义、痛点、技术、方法及智能体解决方案
跨系统数据搬运打通企业数据孤岛,实现CRM、ERP等系统高效互通。伴随数字化转型,全球市场规模超150亿美元,中国年增速达30%。本文详解其定义、痛点、技术原理、主流方法及智能体新范式,结合实在Agent等案例,揭示从数据割裂到智能流通的实践路径,助力企业降本增效,释放数据价值。
|
9天前
|
人工智能 自然语言处理 安全
国内主流Agent工具功能全维度对比:从技术内核到场景落地,一篇读懂所有选择
2024年全球AI Agent市场规模达52.9亿美元,预计2030年将增长至471亿美元,亚太地区增速领先。国内Agent工具呈现“百花齐放”格局,涵盖政务、金融、电商等多场景。本文深入解析实在智能实在Agent等主流产品,在技术架构、任务规划、多模态交互、工具集成等方面进行全维度对比,结合市场反馈与行业趋势,为企业及个人用户提供科学选型指南,助力高效落地AI智能体应用。
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
546 43

热门文章

最新文章