550 likes | 699 Views
实 习 七 总 结 任务与目标. 江苏省人口专题地图 若干 江苏省人口统计图. 必要的准备工作. 检查乡镇数据错误:重复数据、张冠李戴数据 通过 SQL 查询获得县市人口统计数据,作为县市分区统计地图的专题数据. 注意事项. 表示方法的选择要科学 图面视觉要美观 结果保存为工作空间. 第五章 GIS 产品开发. GIS 产品开发的一般步骤 MapBasic 编程设计. 第一节 GIS 产品开发的一般步骤. GIS 产品开发可以分为四个主要步骤:. 前期准备阶段. 系统设计阶段. 系统开发施工阶段. 系统运行及维护阶段. 前期准备阶段.
E N D
实 习 七 总 结任务与目标 • 江苏省人口专题地图若干 • 江苏省人口统计图
必要的准备工作 • 检查乡镇数据错误:重复数据、张冠李戴数据 • 通过SQL查询获得县市人口统计数据,作为县市分区统计地图的专题数据
注意事项 • 表示方法的选择要科学 • 图面视觉要美观 • 结果保存为工作空间
第五章 GIS产品开发 GIS产品开发的一般步骤 MapBasic编程设计
第一节 GIS产品开发的一般步骤 GIS产品开发可以分为四个主要步骤: 前期准备阶段 系统设计阶段 系统开发施工阶段 系统运行及维护阶段
前期准备阶段 • 立项 • 调研 • 可行性分析:经济、技术、法律、用户 • 用户需求分析 • 可利用资源、开发成本、开发进度、预期效益评估 • 制定开发计划
系统设计阶段 • 系统设计是GIS工程的技术核心 • 总体设计 / 概要设计 • 详细设计 对概要设计中每个模块要完成的工作进行具体的描述 • 提供设计说明书
系统开发施工阶段 • 数据库的建立 • 软件开发 • 试运行、测试、调整 • 撰写产品使用说明书
系统运行及维护阶段 • 产品投入正式使用
MapBasic编程设计 • 程序设计的一般规则 • MapBasic 基础 • MapBasic 菜单设计 • MapBasic 对话框设计 • MapBasic 按钮条设计 • 窗口 用户界面主要内容
程序设计的一般规则 • 源程序文档化 命名-名副其实 注释-清楚明了 视觉-层次分明 • 数据说明规范化 • 语句结构简单、直观
第二节 MapBasic 基础 • MapBasic 主要特色 • MapBasic 开发环境 • MapBasic 语言结构
MapBasic语言结构 • 程序结构 • 变量 • Define及Include语句 • 表达式 • 流程控制 • 过程
变 量 • 变量的概念:在程序运行过程中将要发生变化的量 • 变量命名规则 • 变量类型 • 变量的定义
MapBasic开发环境 • MapBasic程序编辑(编辑器) 生成后缀名为mb的文件,其大小限制为64K。 • MapBasic程序编译(编译器) 生成后缀名为mbx的可执行文件 • 连接多个模块成一个项目(链接器) • 联机帮助
MapBasic主要特色 • 功能强大,MapBasic提供了380多种函数和命令语句(联机帮助)。 • 与其他应用程序链接 • 扩展MapInfo功能,定制MapInfo的界面 • 具有更强大的数据存取功能 • 一种类Basic语言,简单易学 MapBasic在线帮助 MapInfo的MapBasic交互命令窗口
Define 与Include语句 • Define语句让你可以定义一个容易记忆的标识符,在编译时这个标识符被它的实际值所替代。 语法:Define identifier definition • Include语句:用以说明某文本文件为MapBasic程序的一部分。程序编译时,该文本文件的全部内容将被全部插入到程序源文件中。 语法:Include "filename"
Mapbasic支持的变量类型 • SmallInt 整型(2个字节)(-32767至+32767) • Integer 整型(4个字节) (-2147483647 至+2147483647) • Float 浮点型(8个字节) • String 可变长字符串(最多可有32767个字符) • String*length 固定长字符串(最多可有 32767个字符) • Logical 逻辑型(TRUE或FALSE) • Date 日期型(MM/DD/YYYY) • Object 图形对象
MapBasic对各种变量的声明 • Global name as string(全局变量) • Dim x,y as float(局部变量) n as integer start_date(10) as date • Redim(扩充数组变量的长度) • Type…End Type(用户数据类型) • Undim x,y
变量命名规则 • 每个变量名最多可以包含31个字符,可以包含字母、数字及多种符号 • 变量名不能含有空格 • 变量名不可以用数字开头,必须以字母、_、~ 号开头 • 可以包含$ , % , & , ! , # , and @,但只能作为结束字符 • Mapbasic的关键字不能作为变量名:add,alter,call,dim,do,global,get,set……
表达式 表示若干常量、变量及函数之关系的式子 • 数学运算符:+、-、*、/、\、mod、^等 • 字符串运算符+(&)、Like等 • 日期运算符:+、- • 比较运算符=、<>、<、>=、Between…And…等 • 逻辑运算符And、Or 、Not 等 • 地理运算符(图形操作符):
图形操作符 • Contains第一个对象包含第二个对象的中心 • Contain Part第一个对象包含第二个对象的一部分 • Contain Entire第一个对象包含整个第二个对象 • Within第一个对象的中心在第二个对象内 • Partly Within第一个对象的一部分在第二个对象内 • Entirely Within第一个对象的完全在第二个对象内 • Intersects两个对象在某处相交
流 程 控 制 • 循环语句: 1. For…(Exit For)...Next 2. Do…Loop 3. While…Wend • 分支语句: 1. If…Then 2. Do Case 3. Goto • 其它流程控制语句: 1. End Program 2. Terminate Application 3. End Mapinfo
While…Wend语句 While condition statement_list Wend
Do……Loop语句 语法一 Do statement_list Loop [ { Until | While } condition ] 语法二 Do [ { Until | While } condition ] statement_list Loop
过 程 • 定义一个过程 • Declare sub • sub…End Sub • 调用过程 • Call • 退出过程 • Exit Sub • 主过程 • Main
过 程 示 例 declare sub main declare sub report_sub sub main Alter Menu id 3 'id 3 = "Query" Add "Weekly Report" Calling report_sub end sub sub report_sub Note " Welcome to Report!" end sub
For…Next 与If…Then 语句 Open Table applpath+"world" as world dim nrows,n as integer dim Max_pop,Min_pop as float Max_pop=0 Min_pop=2000000000 nrows=tableinfo(world,tab_info_nrows) for n=1 to nrows fetch rec n from world if Max_pop<world.pop_1994 then Max_pop=world.pop_1994 else if Min_pop>world.pop_1994 then Min_pop=world.pop_1994 end if end if next
主过程定义 程 序 结 构 Sub Main Dim var_name As var_type other statements End Sub Sub sub_proc Dim … other statements End Sub Function fname Dim … other statements End Function Include "filename“ Declare sub sub_proc Declare Function fname Define identifier definition Global var_name As var_type Dim var_name As var_type 其它 过程定义 全局级声明 自定义函数
Do Case 语句 do case commandinfo(CMD_INFO_MENUITEM) case 1 select * from world where continent="asia"into 亚洲 map from 亚洲 max case 2 select * from world where continent="africa" into 非洲 map from 非洲 max end case
第三节 MapBasic 菜单设计 一.事件驱动模式 1. 鼠标点击等 ——产生事件 例:当用户选择了一个菜单项时,我们说用户已经产生了一个菜单选择事件(Menu choose event);而当用户关闭了一个窗口时,我们说用户产生一个窗口关闭事件 2.执行事件处理程序 ——事件被驱动 例:若用户产生一个菜单选择事件,应用程序可能需要显示一个对话框; 若用户产生一个窗口关闭事件,应用程序可能需要对一个菜单项灰化或隐藏整个菜单。
二.菜单术语 Menu Bar Menu Menu Item
三、 编辑菜单条(Menu Bar) 1.创建菜单条 create menu bar as "分类查询", "条件查询", "分类统计", "统计图", "专题地图" 2.在菜单条上添加一个菜单 Alter Menu bar Add " maps" 3.在菜单条上删除菜单 Alter Menu Bar Remove " help" 4.恢复MapInfo原菜单条 Create Menu Bar as Default
四、菜单(Menu)编辑 1.创建菜单 Create Menu " maps" As "Layer Control" Calling 801 2.添加菜单项 Alter Menu " table" Add "Color Coded Maps " Calling 307 3.删除菜单项 Alter Menu id 1 Remove 104 4.改变菜单项状态 Alter Menu Item 1610 text "目标"
第四节 MapBasic 对话框设计 一、 MapInfo 对话框形式 二、 对话框语法 三、 对话框控件类型 四、 对话框变量传递
二 、对话框语法 Dialog 语句 Dialog [ Title title ] [ Width w ] [ Height h ] [ Position x , y ] [ Calling handler ] Control control_clause [ Control control_clause . . . ]
Dialog Title "根据地块类型查找" Control StaticText Title "请输入地块类型:" Control EditText Into s_LandType Control OkButton Title "查找" Position 30,30 Control CancelButton Title "取消" Position 90,30
三、对话框控件类型 • 命令按钮(Button)。包括一般命令按钮和OK按扭、Cancel按钮。它是最普通的对话框控件,每个对话框都至少有一个命令按钮。通过命令按钮可以让完成某一操作。 • 静态文本框(StaticText)。通常提供一些文字说明,给用户提示,是一个非交互式控件。 • 编辑文本框(EditText)。让用户直接在此区域输入一些信息。
单选按钮集(RadioGroup)。用来显示选项,每次只能选择一组选项中的一个,也就是说,当用户选择了某一选项,在该组的其它选项将自动失效。单选按钮集(RadioGroup)。用来显示选项,每次只能选择一组选项中的一个,也就是说,当用户选择了某一选项,在该组的其它选项将自动失效。 • 组合框(GroupBox)。将完成某一功能的按钮用矩形框圈起来,并用文字加以描述,只是起一个分隔的作用。 • 检查框(CheckBox)。通常用来提供Yes/No或True/False选项,可以用检查框来提供多项选择,从而在其中选择一项或多项。
列表框(ListBox)和多项列表框 (MultiListBox)。通常提供一组信息,让用 户选择其中的一项或者多项。 • 弹出式按钮(PopupMenu)。 是一个右边带下箭头的按钮,当用户单击按钮时,将弹出一个文本列表,供用户选择。 • 线型、填充图案、符号、字体选择按钮。 MapInfo为图形对象专门提供的几个按钮,以便用户选择所需的图文式样(线型、填充图案、符号和字体),供绘图之用。
GroupBox BrushPicker penPicker StaticText CheckBox EditText RadioGroup Button
Popupmenu Listbox
请看示例程序 Prog11.mb
四、 对话框变量传递 Into s_LandType ReadControlValue()函数 If CommandInfo(CMD_INFO_DLG_OK) Then Call subSeach(s_LandType) End If Control OkButton Title “查找” Position 30,30 Calling OkHandler
Sub SearchDialog Dim s_LandType As String … Dialog Title “根据地块类型查找” Control StaticText Title “请输入地块类型:” Control EditText Into s_LandType ID 12 Control OkButton Title “查找” Position 30,30 Calling OkHandler Control CancelButton Title “取消” Position 90,30
If CommandInfo(CMD_INFO_DLG_OK) Then Call subSeach(s_LandType) End If End Sub Sub OkHandler If ReadControlValue(12)=”” Then Note “请在编辑文本框中输入一地块类型!” Dialog Preserve End If End Sub
第五节 MapBasic 按钮条设计 一、 按钮条类型 二、 创建按钮条 三、 改动按钮条
一、按钮条类型 • 触发式按钮(PushButton),当用户单击一个触发式按钮时,按钮会弹回来,执行相应的处理程序。例如:图层控制按钮。 • 开关式按钮(ToggleButton),当用户单开关式按钮时,按钮变成两种状态的一种,按下或没按下。例如:图例窗口显示/隐藏按钮。 • 工具按钮(ToolButton),当用户单击工具按钮时,一个工具将处于激活状态,并将始终保持这种状态直到用户选择了另外一个工具。例如:放大工具处于激活状态,并且用户在地图窗口、浏览窗口或布局窗口单击时,才会作出响应。
二、 创建按钮条 Create ButtonPad "Utils" As PushButton HelpMsg “显示查询对话框”Calling button_sub_proc Icon MI_ICON_ZOOM_QUESTION ToolButton HelpMsg “新画一条路线”Calling tool_sub_proc Icon MI_ICON_CROSSHAIR DrawMode DM_CUSTOM_LINE