最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

基于MapBasic的城市部件数据档案管理工具的开发与应用

IT圈 admin 27浏览 0评论

2024年4月3日发(作者:甲月杉)

龙源期刊网

基于MapBasic的城市部件数据档案管理工

具的开发与应用

作者:陈虹 危双丰

来源:《科技资讯》2013年第21期

摘 要:本文从北京市东城区城市监督管理中心对于城市部件数据档案管理的需求出发,

基于城市部件空间数据库,利用MapBasic语言进行二次开发扩展MapInfo系统功能,设计实

现了城市部件数据档案管理工具,完全满足东城区城市监督管理中心的要求,极大地方便了城

市监督员的部件管理工作。

关键词:数字城管 城市部件 档案管理 MapBasic 二次开发

中图分类号:TP3 文献标识码:A 文章编号:1672-3791(2013)07(c)-0039-02

“数字城管”建设作为城市管理工作信息化的标志,采用万米单元网格管理法和城市部件、

事件管理法相结合的方式,应用、整合多项数字城市技术,创建城市管理监督中心和指挥中心

两个轴心的管理体制,再造城市管理流程,从而实现精确、敏捷、高效、全时段、全方位覆盖

的城市管理模式。

为了开展上述工作,北京市东城区按照行政区域划分管理权限,从纵向层面,将东城区的

管理区域划分为四个层面:街道办事处、社区居委会、监督员责任区、万米单元网格。其中街

道办事处10个,社区居委会126个,监督员责任区92个、万米单元网格1593个。东城区城

市部件按照城市管理功能划分,共分为六大类一共60种,城市部件的大类包括:公用设施

类、道路交通类、市容环境类、园林绿化类、房屋土地类及其他类。根据统计东城区部件总数

为168339个,此外还有各种参照物、兴趣点、地址等数据,整个东城区城市部件的管理任务

落实到92个监督员身上,每个监督员平均要管理1800多个城市部件。为了让每个监督员做到

对自己辖区范围的部件种类、部件标识码及部件所在的万米单元网格编码心中有数,能对城市

部件进行迅速查找和定位,建立一套城市部件档案势在必行。

鉴于东城区城市监督管理中心使用的是MapInfo系统,因此本文选用MapInfo的二次开发

语言MapBasic对MapInfo系统进行功能扩展,基于城市部件空间数据库,设计了城市部件数

据档案管理工具,完全满足东城区城市监督管理中心的要求。

1 程序设计方案

1.1 设计思路

龙源期刊网

城市部件数据档案管理工具的功能要求主要包括:用户可以根据街道办事处名称、社区居

委会名称、监督员责任区名称、或万米单元网格编码对该区域的部件进行查询统计;计算该查

询区域内各类部件的总数及该查询区域内各部件的详细信息;将查询的结果最终保存为xls格

式的数据。

其中的查询采用MapBasic空间查询算法,查询面对象中包含的点对象。根据对现有数据

的分析,可以知道街道办事处、监督员管理层面、社区居委会、万米单元网格都是面对象,它

们之间有如下的空间关系:万米单元网格社区居委会街道办事处。监督员工作层面是个比较特

殊的图层,每个监督员层面由一个或两个社区居委会组成,但“王府井”和“站东街”两个社区居

委会例外,由于“王府井”和“站东街”这两个居委会面积较大,因此在监督员管理层面中这两个

社区居委会分别被划分成两个监督员层面“王府井东”、“王府井西”和“站东街南”、“站东街

北”,所以进行算法设计时主要按照空间查询的思想,对“王府井”和“站东街”进行特殊处理。

部件对象是点对象。对落在街道办事处、监督员管理层面、社区居委会、万米单元网格的区域

的部件对象进行查询就是所谓空间查询。在MapInfo中查询统计结果无法直接保存为xls的数

据格式,需要将结果保存为MapInfo能输出的txt文本格式,然后将这些文本格式的数据批量

转成xls格式的文本。

1.2 程序实现

(1)创建对话框部分。在对话框设置中,用户可以选择查询对象,既可对部件对象查

询,也可对门址、参照物、兴趣点查询,这两类数据的属性结构是完全不同的,因此必须分别

进行查询。在查询前必须让用户能选择街道办事处、监督员工作层面、社区居委会和万米单元

网格图层,可让用户查询某一街道,某一社区、某一监督员管理区域甚至可以精确到某一万米

单元网格的,可以选择需要查询的部件种类,这样查询设计可以满足用户的查询需求。查询对

话框如图1。

Dialog Width 175 Height 290

Title "统计窗口"

Calling Dialog_Sub

Control GroupBox

Title "选择查询对象"

Position 5,5 Width 165 Height 35

Control RadioGroup

Title "&部件查询;&地址查询"

龙源期刊网

ID 6

Value 1

Position 10 ,15 Width 50

calling RadioGroup_Sub

Control StaticText

Position 70,15

Width 100

Height 30

Control GroupBox

Title "表"

Position 5,40 Width 165 Height 70

Control StaticText

Title "街道"

Position 10,50

Control PopupMenu

Title From Variable jd_tablist

ID 12

Position 54,48 Width 110

Calling jdTab_sub

Control StaticText

Title "监督员"

Position 10,65

龙源期刊网

Control PopupMenu

Title From Variable jdy_tablist

ID 13

Position 54,63 Width 110

Calling jdytab_Sub

(2)街道办事处、社区居委会、监督员责任区、万米单元网格空间关系的查询代码。正

如前面分析的这四个图层关系如下:万米单元网格社区居委会街道办事处系,所以用Mapbasic

语言的within语句就能将这三者的关系体现出来。监督员管理层面和社区居委会的空间管理有

点特殊。可以以用Partly Within来表示这两者的关系。根据这四者之间的关系,编写了如下代

码:

If check_sq=true then

If check_jdy=true Then

Select 社区居委会 From sq_Tab

'Where所属管理社区=jdy_list(ReadControlValue(7))

Where Obj Partly Within Any(Select Obj from jdy_tab

Where Alias1=jdy_list(ReadControlValue(7)))

Into Sel

Else

Select 社区居委会 From sq_Tab

'Where 所属街道=jd_list(ReadControlValue(1))

Where Obj Within Any(Select Obj From jd_tab

Where Alias2=jd_list(ReadControlValue(1)))

Into Sel

End If

龙源期刊网

Else

Alter control 2

Title ""

call wg_sub

Exit Sub

End If

(3)查询结果显示。在用户选择好需要查询的管理区域和部件类型后,需要将所有的查

询统计结果保存为tab格式的数据。创建tab格式的表,并对结果进行统计输出的代码如下:

sq_count =TableInfo(sel,TAB_INFO_NROWS)

Redim sq_list(0)

If sq_count=0 Then

Redim sq_list(1)

Alter Control 2

Title From variable sq_list

Else

Fetch First From sel

Do

sq_Nm=sel.社区居委会

If sq_Nm"" Then

i=UBound(sq_list)+1

Redim sq_list(i)

sq_list(i)=sq_Nm

End If

龙源期刊网

Fetch Next From sel

Loop Until EOT(sel)

If ReadControlValue(6)=1 Then

Tab_Nm=PathToTableName$(FileSaveAsDlg("",ExpressStr,"Tab","保存..."))

If Tab_Nm="_" Then

Goto cleanlist

End If

Create Table Tab_nm

(标识码 char(16),名称 char(30),单元网格 char(14))

Type DBF

For k=1 To UBound(Seltab_list)

TabNm=Seltab_list(k)

alias3=TabNm+".所在单元网格"

alias5=wg_tab+".网格编码"

If TabNm"" then

Select标识码,名称,Right$(所在单元网格,5)From TabNm,wg_tab

Where alias3=alias5 And wg_code=ExpressStr

Order By 所在单元网格,标识码

Into sel

Insert into Tab_Nm Select * From sel

commit table Tab_Nm

End if

龙源期刊网

Next

Filename1=Tab_nm+"统计结果"+".txt"

Filename2=Tab_nm+".txt"

Select * From Tab_Nm

Order By 单元网格,标识码

Into bujian

Export bujian

Into Filename2

Type "ASCII" Titles

' Overwrite

Select名称"部件名称",count(*)"部件总数" From Tab_Nm

Group by 名称

Order By col2

Into bujiantongji

Export bujiantongji

Into Filename1

Type "ASCII" Titles

' Overwrite

End If

如图2,为查询统计表;图3为查询结果表。

2 结语

以上程序在MapBasic环境下,进行编译和运行,打开图层进行相应的操作可以实现各程

序功能,本程序增加了MapInfo的系统功能,可提高工作效率,使用方便,对管理人员来说,

龙源期刊网

能做到对每个管理区域的部件种类和个数心中有数。批量保存功能可以将查询结果批量保存为

txt文本格式,在word中打开后使用宏命令对结果打印输出,制作成小册子,让监督员随身携

带,便于及时查阅。

参考文献

[1]陈平.网格化城市管理新模式[M].北京:出版:北京大学出版社,2000.

[2]王晓武.MapBasic程序设计[M].北京:电子工业版社,2006.

[3]刘光.地理信息系统二次开发教程语言篇[M].北京:清华大学出版社,2003.

2024年4月3日发(作者:甲月杉)

龙源期刊网

基于MapBasic的城市部件数据档案管理工

具的开发与应用

作者:陈虹 危双丰

来源:《科技资讯》2013年第21期

摘 要:本文从北京市东城区城市监督管理中心对于城市部件数据档案管理的需求出发,

基于城市部件空间数据库,利用MapBasic语言进行二次开发扩展MapInfo系统功能,设计实

现了城市部件数据档案管理工具,完全满足东城区城市监督管理中心的要求,极大地方便了城

市监督员的部件管理工作。

关键词:数字城管 城市部件 档案管理 MapBasic 二次开发

中图分类号:TP3 文献标识码:A 文章编号:1672-3791(2013)07(c)-0039-02

“数字城管”建设作为城市管理工作信息化的标志,采用万米单元网格管理法和城市部件、

事件管理法相结合的方式,应用、整合多项数字城市技术,创建城市管理监督中心和指挥中心

两个轴心的管理体制,再造城市管理流程,从而实现精确、敏捷、高效、全时段、全方位覆盖

的城市管理模式。

为了开展上述工作,北京市东城区按照行政区域划分管理权限,从纵向层面,将东城区的

管理区域划分为四个层面:街道办事处、社区居委会、监督员责任区、万米单元网格。其中街

道办事处10个,社区居委会126个,监督员责任区92个、万米单元网格1593个。东城区城

市部件按照城市管理功能划分,共分为六大类一共60种,城市部件的大类包括:公用设施

类、道路交通类、市容环境类、园林绿化类、房屋土地类及其他类。根据统计东城区部件总数

为168339个,此外还有各种参照物、兴趣点、地址等数据,整个东城区城市部件的管理任务

落实到92个监督员身上,每个监督员平均要管理1800多个城市部件。为了让每个监督员做到

对自己辖区范围的部件种类、部件标识码及部件所在的万米单元网格编码心中有数,能对城市

部件进行迅速查找和定位,建立一套城市部件档案势在必行。

鉴于东城区城市监督管理中心使用的是MapInfo系统,因此本文选用MapInfo的二次开发

语言MapBasic对MapInfo系统进行功能扩展,基于城市部件空间数据库,设计了城市部件数

据档案管理工具,完全满足东城区城市监督管理中心的要求。

1 程序设计方案

1.1 设计思路

龙源期刊网

城市部件数据档案管理工具的功能要求主要包括:用户可以根据街道办事处名称、社区居

委会名称、监督员责任区名称、或万米单元网格编码对该区域的部件进行查询统计;计算该查

询区域内各类部件的总数及该查询区域内各部件的详细信息;将查询的结果最终保存为xls格

式的数据。

其中的查询采用MapBasic空间查询算法,查询面对象中包含的点对象。根据对现有数据

的分析,可以知道街道办事处、监督员管理层面、社区居委会、万米单元网格都是面对象,它

们之间有如下的空间关系:万米单元网格社区居委会街道办事处。监督员工作层面是个比较特

殊的图层,每个监督员层面由一个或两个社区居委会组成,但“王府井”和“站东街”两个社区居

委会例外,由于“王府井”和“站东街”这两个居委会面积较大,因此在监督员管理层面中这两个

社区居委会分别被划分成两个监督员层面“王府井东”、“王府井西”和“站东街南”、“站东街

北”,所以进行算法设计时主要按照空间查询的思想,对“王府井”和“站东街”进行特殊处理。

部件对象是点对象。对落在街道办事处、监督员管理层面、社区居委会、万米单元网格的区域

的部件对象进行查询就是所谓空间查询。在MapInfo中查询统计结果无法直接保存为xls的数

据格式,需要将结果保存为MapInfo能输出的txt文本格式,然后将这些文本格式的数据批量

转成xls格式的文本。

1.2 程序实现

(1)创建对话框部分。在对话框设置中,用户可以选择查询对象,既可对部件对象查

询,也可对门址、参照物、兴趣点查询,这两类数据的属性结构是完全不同的,因此必须分别

进行查询。在查询前必须让用户能选择街道办事处、监督员工作层面、社区居委会和万米单元

网格图层,可让用户查询某一街道,某一社区、某一监督员管理区域甚至可以精确到某一万米

单元网格的,可以选择需要查询的部件种类,这样查询设计可以满足用户的查询需求。查询对

话框如图1。

Dialog Width 175 Height 290

Title "统计窗口"

Calling Dialog_Sub

Control GroupBox

Title "选择查询对象"

Position 5,5 Width 165 Height 35

Control RadioGroup

Title "&部件查询;&地址查询"

龙源期刊网

ID 6

Value 1

Position 10 ,15 Width 50

calling RadioGroup_Sub

Control StaticText

Position 70,15

Width 100

Height 30

Control GroupBox

Title "表"

Position 5,40 Width 165 Height 70

Control StaticText

Title "街道"

Position 10,50

Control PopupMenu

Title From Variable jd_tablist

ID 12

Position 54,48 Width 110

Calling jdTab_sub

Control StaticText

Title "监督员"

Position 10,65

龙源期刊网

Control PopupMenu

Title From Variable jdy_tablist

ID 13

Position 54,63 Width 110

Calling jdytab_Sub

(2)街道办事处、社区居委会、监督员责任区、万米单元网格空间关系的查询代码。正

如前面分析的这四个图层关系如下:万米单元网格社区居委会街道办事处系,所以用Mapbasic

语言的within语句就能将这三者的关系体现出来。监督员管理层面和社区居委会的空间管理有

点特殊。可以以用Partly Within来表示这两者的关系。根据这四者之间的关系,编写了如下代

码:

If check_sq=true then

If check_jdy=true Then

Select 社区居委会 From sq_Tab

'Where所属管理社区=jdy_list(ReadControlValue(7))

Where Obj Partly Within Any(Select Obj from jdy_tab

Where Alias1=jdy_list(ReadControlValue(7)))

Into Sel

Else

Select 社区居委会 From sq_Tab

'Where 所属街道=jd_list(ReadControlValue(1))

Where Obj Within Any(Select Obj From jd_tab

Where Alias2=jd_list(ReadControlValue(1)))

Into Sel

End If

龙源期刊网

Else

Alter control 2

Title ""

call wg_sub

Exit Sub

End If

(3)查询结果显示。在用户选择好需要查询的管理区域和部件类型后,需要将所有的查

询统计结果保存为tab格式的数据。创建tab格式的表,并对结果进行统计输出的代码如下:

sq_count =TableInfo(sel,TAB_INFO_NROWS)

Redim sq_list(0)

If sq_count=0 Then

Redim sq_list(1)

Alter Control 2

Title From variable sq_list

Else

Fetch First From sel

Do

sq_Nm=sel.社区居委会

If sq_Nm"" Then

i=UBound(sq_list)+1

Redim sq_list(i)

sq_list(i)=sq_Nm

End If

龙源期刊网

Fetch Next From sel

Loop Until EOT(sel)

If ReadControlValue(6)=1 Then

Tab_Nm=PathToTableName$(FileSaveAsDlg("",ExpressStr,"Tab","保存..."))

If Tab_Nm="_" Then

Goto cleanlist

End If

Create Table Tab_nm

(标识码 char(16),名称 char(30),单元网格 char(14))

Type DBF

For k=1 To UBound(Seltab_list)

TabNm=Seltab_list(k)

alias3=TabNm+".所在单元网格"

alias5=wg_tab+".网格编码"

If TabNm"" then

Select标识码,名称,Right$(所在单元网格,5)From TabNm,wg_tab

Where alias3=alias5 And wg_code=ExpressStr

Order By 所在单元网格,标识码

Into sel

Insert into Tab_Nm Select * From sel

commit table Tab_Nm

End if

龙源期刊网

Next

Filename1=Tab_nm+"统计结果"+".txt"

Filename2=Tab_nm+".txt"

Select * From Tab_Nm

Order By 单元网格,标识码

Into bujian

Export bujian

Into Filename2

Type "ASCII" Titles

' Overwrite

Select名称"部件名称",count(*)"部件总数" From Tab_Nm

Group by 名称

Order By col2

Into bujiantongji

Export bujiantongji

Into Filename1

Type "ASCII" Titles

' Overwrite

End If

如图2,为查询统计表;图3为查询结果表。

2 结语

以上程序在MapBasic环境下,进行编译和运行,打开图层进行相应的操作可以实现各程

序功能,本程序增加了MapInfo的系统功能,可提高工作效率,使用方便,对管理人员来说,

龙源期刊网

能做到对每个管理区域的部件种类和个数心中有数。批量保存功能可以将查询结果批量保存为

txt文本格式,在word中打开后使用宏命令对结果打印输出,制作成小册子,让监督员随身携

带,便于及时查阅。

参考文献

[1]陈平.网格化城市管理新模式[M].北京:出版:北京大学出版社,2000.

[2]王晓武.MapBasic程序设计[M].北京:电子工业版社,2006.

[3]刘光.地理信息系统二次开发教程语言篇[M].北京:清华大学出版社,2003.

发布评论

评论列表 (0)

  1. 暂无评论