内容发布更新时间 : 2024/11/18 1:49:12星期一 下面是文章的全部内容请认真阅读。
程序开发在制作耕保图中的应用
齐志飞 温庆东
1
2
(1. 南通市测绘院有限公司, 江苏 南通 226006;
2.山东省青州市规划与国土资源局土地勘测规划站, 山东 青州 262500)
摘 要: 本文阐述了在耕保图制作中利用程序开发提高生产效率、解决典型问题若干经验与方法。 关键词:耕保图 MapInfo
一、引言
南通市率先提出了基本农田保护标准化、信息化的思路,并以实践完成了南通地区3区六县市的基本农田保护工作。笔者参加了2004年基本农田保护图件与数据的前期加工与制作,就如何提高生产效率、解决典型问题,从生产一线的角度来表述一些经验与方法。南通市基本农田保护图件采用MapInfo的Tab格式,笔者的主要开发工具是Mapbasic和Delphi。
二、工作思路
1.建立代码、文件的索引关系,形成程序框架,将需要执行的操作放入框架内,形成批量处理。 2.索引文件格式:
镇名1,镇代码1 镇名2,镇代码2 镇名3,镇代码3 …… …… 镇名N,镇代码N
三、关于表的操作
表是组成地图数据的重要单位,建立符合技术设计要求的表,将为后期地图数据的合成提供基础。表的加工做得快速到位,将为后续工作节省时间。 1.表的拼合
某一行政区划的地图是组成其更高级别区域的部分,经常会遇到地图拼合的问题。单靠人工拼合,
仅仅其中一块或几块有错,都可能造成重新返作效率。例如南通某县所有数十个镇,上万块现拼合,所有基本农田保护面块的拼合等,图-1(a)行界面。算法流程如图-1(b):
界面显示: 由用户选择合并的表的类型 Open file \镇代码.txt\ While not eof(\镇代码.txt\读取镇代码及镇名 由镇代码及镇名计算数据表的文件名 打开数据表 是第一个数据表? 是 建立总数据表 否 插入到总数据表 工,影响工状图斑的为程序运
关闭数据表 Close file \镇代码.txt\ 将总表显示到地图窗口
图-1(a) 图-1(b) 算法中关键步骤是“插入到总数据表”,用Mapbasic描述为:
insert Into TotalTabName select * from layername ''插入到总数据表
2.表的批量更新 (1)界桩保护人添加
界桩是基本农田保护块的边界标识,由专人保护。为界桩添加保护人,可通过建立保护人索引表来实现,如在建立镇名、镇代码索引的基础上,建立村民、村代码、与界桩保护人的索引表,例如:
村代码1,村名1,界桩保护人1 村代码2,村名2,界桩保护人2 …… ……
村代码N,村名n,界桩保护人N
村索引表建立后,便可以文本文件方式集中录入保管人,避免了多次打开图件,避免了按界桩逐个添加引起的随机错漏。 (2)字段值单位更换
例如原土地利用图件中面积单位为亩,此次基本农田保护信息化统一单位为公顷。镇索引关系建立后,运行一次程序即可以批处理方式更新所有镇的土地利用图件的面积单位。 3.表的检查
数据加工与制作必然涉及数据质量的问题,为此对加工前的数据检查与加工后的质量控制都是必须的。例如土地利用的地类是重要的信息,应保证其完整; 再如唯一确定行政区划的行政代码、保护块内的唯一确定界桩的编号等,显然是不可重复的。解决此类问题的原理并不复杂,只需用程序对相应字段分组排序,然后遍历即可。该方式避免了人工排查的不彻底性。程序运行结果如图-2(a), 算法主要部分如图-2(b)所示:
select * from tablename Where Str$(obj)=\select mbbsm from Qpoint group by Mbbsm into Qmbbsm open file \fetch first from Qmbbsm while not eot (Qmbbsm) Curmbbsm=Qmbbsm.mbbsm for i=1 to MaxDh select * from QPoint Where QPoint.mbbsm=val(CurMbbsm) and dh=i if selectioninfo(sel_info_nrows)<>0 and selectioninfo(sel_info_nrows)<>1 then write #1,CurMbbsm & \第\点重\
图-2(a) 图-2(b)
4.表的属性数据修改: 新旧编号转换等
随着国家对地图、土地利用等标准的不断完善,数据加工与制作也经常遇到新旧编码、编号的转换问题。本次任务也涉及了如2位转3位地类码、1:1万分幅图新旧编号转换等情况。此类问题可建立以文本文件或数据库表方式建立新旧对照表,对应更新。 5.表的批量图形编辑、地物对象操作 Open file \镇代码.txt\ While not eof(\镇代码.txt\读取镇代码及镇名 由镇代码及镇名计算数据表的文件名 打开图斑层 选中图斑层所有要素 将图斑层选中要素设为切割目标 打开保护块层 执行切割操作 另存切割后的图斑层为面积检核层 关闭图斑层 Close file \镇代码.txt\ 图形编辑往往是数据制作中最大量、最重要的步骤,此步骤若能缩短工期将对整个任务的完成都有积极的意义。此类问题如文本统选统改,线、面的样式修改等,地物对象操作如分解、切割,可通过将操作相应的代码放入程序框架内执行实现。
例如,用户想将某表中的使用同一线样式的线(line)和表(PLine)对象统一修改为使用另一种线样式, 图-3(a)列出了关键代码: if not(Str$(selection.obj)=\or Str$(selection.obj)=\ exit sub end if objPLstyle=styleattr(objectinfo(selection.obj,obj_info_pen), PEN_PATTERN) select * from table_name where Str$(obj)=\ or Str$(obj)=\