999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

MapBasic在城市部件數(shù)據(jù)生產(chǎn)中的實踐與應(yīng)用

2013-12-29 00:00:00陳虹危雙豐
科技資訊 2013年20期

摘 要:本文從實踐出發(fā),根據(jù)城市部件數(shù)據(jù)生產(chǎn)流程中出現(xiàn)的問題,使用MapBasic語言進(jìn)行二次開發(fā),擴(kuò)展MapInfo系統(tǒng)的部分功能,極大的提高了城市部件數(shù)據(jù)生產(chǎn)的效率。

關(guān)鍵詞:MapBasic 城市部件數(shù)據(jù)生產(chǎn) Mapinfo 二次開發(fā)

中圖分類號:TP3 文獻(xiàn)標(biāo)識碼:A 文章編號:1672-3791(2013)07(b)-0038-02

MapInfo自身提供的二次開發(fā)環(huán)境MapBasic是Maplnfo平臺上開發(fā)用戶定制程序的理想編程語言。它類似Basic語言,語法規(guī)則和函數(shù)與通用Basic語言極其相似,有一定Basic基礎(chǔ)的人員能很快學(xué)會使用。利用MapBasic編程生成的*.mbx文件能在MapInfo軟件平臺上運行,MapBasic比較適合用于擴(kuò)展MapInfo功能。

本文從實踐出發(fā),根據(jù)城市部件數(shù)據(jù)生產(chǎn)流程中出現(xiàn)的問題,使用MapBasic語言進(jìn)行二次開發(fā),擴(kuò)展MapInfo系統(tǒng)的部分功能。

1 實例介紹

1.1 城市部件點符號工具的制作

在使用MapInfo進(jìn)行數(shù)據(jù)生產(chǎn)時,由于MapInfo自身的局限性,生產(chǎn)作業(yè)人員在作業(yè)時,每使用一類點符號,必須在MapInfo的菜單中提前進(jìn)行設(shè)置,對于點符號種類多,需要經(jīng)常進(jìn)行點符號切換的數(shù)據(jù)生產(chǎn),生產(chǎn)效率很低。此程序的作用在于將符號庫里的符號在工具條中體現(xiàn),使作業(yè)人員所見即所得(如圖1),直接點擊工具條上的按鈕就可以在各符號間進(jìn)行靈活切換,極大的提高了生產(chǎn)效率和準(zhǔn)確率。

此程序的關(guān)鍵點在于,將符號庫TrueType字體文件中的符號轉(zhuǎn)化成工具條上的圖標(biāo)。使用CorelDraw打開符號庫TrueType字體文件,將需要的符號分別保存為18*16、26*24,兩個不同大小的位圖文件(*.bmp),創(chuàng)建一個DLL動態(tài)鏈接庫,或使用一個已有的DLL動態(tài)鏈接庫,在Visual Studio平臺中打開該動態(tài)鏈接庫,將準(zhǔn)備好的18*16、26*24的位圖文件成對導(dǎo)入到DLL中,至此,一個MapBasic的圖標(biāo)庫完整建立了。實現(xiàn)代碼如下:

Include "icons.def"

include "mapbasic.def"

Declare Sub Main

Declare Sub draw_via_button

Sub Main

Create ButtonPad "工具條" As

ToolButton

Calling draw_via_button

ID 149

Icon 149 File "ICO32.DLL" ‘創(chuàng)建圖標(biāo)文件

HelpMsg "\n公交站亭"

ToolButton

Calling draw_via_button

ID 151

Icon 151 File "ICO32.DLL"

HelpMsg "\n交通標(biāo)志牌"

.…..

Width 2

show

End Sub

Sub draw_via_button

dim sym_maker As Symbol

dim ObjPt As object

dim x1 As Float

dim y1 As Float

dim FtWin as integer

dim MapId as integer

dim MapNm as string

dim FtID as integer

dim Tlid as integer

FtWin=FrontWindow()

MapId=MapperInfo(FtWin,MAPPER_INFO_EDIT_LAYER)

If MapId>0 then

MapNm=LayerInfo(FtWin,MapId,LAYER_INFO_NAME)

Else

Note "請將圖層設(shè)為可編輯!"

Exit Sub

End If

Tlid=CommandInfo(CMD_INFO_TOOLBTN)

Do Case Tlid

Case 149

FtId=74

Case 151

FtId=80

.......

End Case

x1=CommandInfo(CMD_INFO_X)

y1=CommandInfo(CMD_INFO_Y)

sym_maker=MakeFontSymbol(FtId,BLACK,12,"bujian07",0,0)

Create Point into Variable ObjPt(x1,y1) Symbol sym_maker

End sub

1.2 合并圖層

在城市部件生產(chǎn)過程中,數(shù)據(jù)需要分給不同的作業(yè)員進(jìn)行處理,處理完的數(shù)據(jù)又需要重新合并。如果碰到數(shù)據(jù)量比較大,需要合并的圖層多時,很費時間。這時,將圖層合并進(jìn)行批處理,會極大的提高工作效率。下面的代碼,說明了多層圖層的合并,怎樣進(jìn)行批處理。

Sub Main

Create Menu "批處理表" As

"合并圖層" Calling batch_packtable

Alter Menu Bar Add "批處理表"

End Sub

Sub batch_packtable

'''循環(huán)控制變量

Dim i As integer

Dim TabNum As integer''一次打開的表的數(shù)量

Dim TabName As string''存取表名的變量

Dim NameList(1) As string

Dim ListNum As integer'' 初始表名數(shù)組大小

Run Menu Command M_File_Open

TabNum =NumTables()

ListNum=UBound(NameList)''得到數(shù)組的大小

ReDim NameList(TabNum)

'''循環(huán)訪問得到表的名字

For i=1 to TabNum ' TabName=TableInfo(i,TAB_INFO_NAME)

NameList(i)=TabName

Next

For i=1 to TabNum '''循環(huán)訪問得到表的名字

TabName=NameList(i)

Open Table"D:\合并圖層.tab" as 合并圖層

Insert Into 合并圖層

select * from TabName

Close table TabName

commit table 合并圖層

Close Table 合并圖層

Next

1.3 新增部件添加流水號

城市部件數(shù)據(jù)是一種不斷變化的數(shù)據(jù),每年都有新增、刪除和變更。對新增的城市部件數(shù)據(jù)需要按照地理數(shù)據(jù)建設(shè)標(biāo)準(zhǔn)加上流水號,城市部件流水號是唯一的,新增的城市部件流水號必須在往年的基礎(chǔ)上增加,使用mapbasic的功能,找到往年流水號中的最大值,將新增部件的流水號在此基礎(chǔ)上增加,就不會出現(xiàn)號碼重復(fù)的情況,從而保證的標(biāo)識碼的唯一性。下面用程序說明怎樣給新增部件添加流水號。

include "MENU.def"

include "mapbasic.def"

Declare Sub Main

Declare Sub separate_table

Sub Main

Create Menu "部件批處理" As

"加標(biāo)識碼" Calling separate_table

Alter Menu Bar Add "部件批處理"

End Sub

Sub separate_table

Dim i,j,k As integer ''循環(huán)控制變量

Dim NameList(1) As string''記錄新增的部件代碼

Dim Col_Num As Integer ''查詢結(jié)果記錄數(shù)

Dim TableName As String ''創(chuàng)建表名

Dim Filespecname as String''部件存儲路徑

Dim MaxID as String ''記錄某類部件最大流水號

Open Table "D:\部件批處理\合并.tab" As 合并

Open Table "D:\部件批處理\新增.tab" As 新增

Select * From 新增 Where 標(biāo)識碼=""

Group By 部件代碼 Into Selection

Col_Num=SelectionInfo(SEL_INFO_NROWS)

If Col_Num=0 Then''如果沒有找到標(biāo)識碼為空的記錄

Note "標(biāo)識碼為空的記錄數(shù)為0!"

Exit Sub

End If

ReDim NameList(Col_Num)

Fetch First From Selection

For i=1 to Col_Num ''循環(huán)訪問得到標(biāo)識碼為空的部件代碼,一類標(biāo)識碼為空的部件只存儲一次

NameList(i)=Selection.部件代碼

Fetch Next From Selection

Next

For i=1 to Col_Num

Select * From 合并 Where 部件代碼=NameList(i)

Order By 標(biāo)識碼 Into 標(biāo)識碼排序表

If TableInfo(標(biāo)識碼排序表,TAB_INFO_NROWS)=0 then

Print "部件代碼為"+NameList(i)+"沒有最大標(biāo)識碼!"

Else

Fetch Last From 標(biāo)識碼排序表

MaxID=標(biāo)識碼排序表.標(biāo)識碼'''獲得該類中最大的標(biāo)識碼號

Select * From 新增 Where 部件代碼=NameList(i) And 標(biāo)識碼="" Into Selection '''找到該類中沒有標(biāo)識碼的全部記錄

k=SelectionInfo(SEL_INFO_NROWS)

'Print "當(dāng)前部件圖層"+NameList(i)+"最大標(biāo)識碼為"+MaxID+"共有"+k+"為空的記錄!"

Dim LeftStr As String '''標(biāo)識碼由兩部分組成,部件代碼+流水號

Dim RightStr As String

Dim IDStr As String

LeftStr=Left$(MaxID,10) ''獲得該類部件的部件代碼

For j=1 To k

RightStr="000000"+Str$(Val(Right$(MaxID,6))+j)

IDStr=LeftStr+right$(Rightstr,6)

Update Selection Set 標(biāo)識碼=IDStr

Where RowID=j

Next

Commit Table 新增

End If

Next

End Sub

1.4 修改表結(jié)構(gòu)

在北京市東城區(qū)網(wǎng)格化城市管理信息系統(tǒng)建設(shè)中,城市部件數(shù)據(jù)結(jié)構(gòu)經(jīng)常變換,特別是原崇文區(qū)和原東城區(qū)合并成一個行政區(qū)劃后,由于之前兩個區(qū)城市部件數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)不同,需要按照新的標(biāo)準(zhǔn)統(tǒng)一在一起。城市部件有96種,每種部件存放在一個表中,共96張表,每張表中有14個屬性字段需要修改。一個一個手動修改,需要大量時間并極容易出錯,使用mapbasic中的修改字段的功能,對96張表進(jìn)行批處理,就可以提高工作效率和準(zhǔn)確度。

以原東城區(qū)為例,說明mapbasic怎樣批量修改數(shù)據(jù)結(jié)構(gòu)。

Include "mapbasic.def"

Declare Sub main

Sub Main

Dim MapCount as Integer

Dim i,j,n ,k as Integer

Dim MapNm as String

Dim colNum as Alias

i=FrontWindow()

If WindowInfo(FrontWindow(),Win_INFO_TYPE)<>WIN_MAPPER Then

Note "請打開地圖窗口!"

Exit Sub

End If

MapCount=MapperInfo(i,MAPPER_INFO_LAYERS)

If MapCount>0 then

Do while MapperInfo(i,MAPPER_INFO_LAYERS)>0

MapNm=LayerInfo(i,1,LAYER_INFO_NAME)

Alter Table MapNm(Rename 標(biāo)識碼 ObjCode, 名稱 ObjName,主管部門代碼 DeptCode1,主管部門名稱 DeptName1,權(quán)屬部門代碼 DeptCode2,權(quán)屬部門名稱 DeptName2,維護(hù)部門代碼 DeptCode3,維護(hù)部門名稱 DeptName3,所在單元網(wǎng)格 BGCode,狀態(tài) ObjState,初始時間 ORDate,變更時間 CHDate,數(shù)據(jù)來源 DataSource ,備注 Note)

Loop

End If

End Sub

2 結(jié)語

以上程序在MapBasic環(huán)境下,進(jìn)行編譯和運行,打開圖層進(jìn)行相應(yīng)的操作可以實現(xiàn)各程序功能,本程序增加了MapInfo的系統(tǒng)功能,可提高工作效率,使用方便。

參考文獻(xiàn)

[1] 王曉武.MapBasic程序設(shè)計[M].北京:電子工業(yè)版社,2000.

[2] 關(guān)健.Maplnfo系統(tǒng)功能擴(kuò)展幾例[J].城市勘測,2005(4):35-37.

[3] 王曉東,趙全磊,吳建民.MapBasic在Maplnfo功能擴(kuò)展中的應(yīng)用[J].測繪通報,2007(8):51-54.

[4] 劉光.地理信息系統(tǒng)二次開發(fā)教程.語言篇[M].北京:清華大學(xué)出版社,2003.

主站蜘蛛池模板: 黄色网址免费在线| 久久无码av三级| 久久精品免费国产大片| 大学生久久香蕉国产线观看 | 高h视频在线| 欧美日韩中文国产| yy6080理论大片一级久久| 一级一级特黄女人精品毛片| 性视频久久| 四虎永久免费地址在线网站 | 国产精品网拍在线| 日韩国产亚洲一区二区在线观看| 亚洲精品午夜天堂网页| 亚洲有无码中文网| 亚洲日本韩在线观看| 亚洲中文字幕手机在线第一页| 国产超碰在线观看| 国产极品嫩模在线观看91| 2021最新国产精品网站| 国产人成在线视频| 老司国产精品视频91| 无码中文AⅤ在线观看| av在线无码浏览| av手机版在线播放| 小说 亚洲 无码 精品| 国产成人精品视频一区二区电影| 国产爽歪歪免费视频在线观看| 国产另类乱子伦精品免费女| 欧美激情,国产精品| 亚洲无码91视频| 国产熟女一级毛片| 亚洲制服丝袜第一页| 999国产精品永久免费视频精品久久| 91外围女在线观看| 久久这里只有精品66| 亚洲国产成熟视频在线多多| 精品精品国产高清A毛片| 日韩中文无码av超清| 国产无码在线调教| 久久不卡国产精品无码| 欧美日韩福利| 奇米影视狠狠精品7777| 久草视频福利在线观看| 欧美人与性动交a欧美精品| 国产精品第三页在线看| 播五月综合| 欧美劲爆第一页| 2020国产精品视频| 国产九九精品视频| 成人综合网址| 中国美女**毛片录像在线| 国产喷水视频| 无码'专区第一页| 天天爽免费视频| 热这里只有精品国产热门精品| 午夜精品区| 狠狠色香婷婷久久亚洲精品| 久久综合五月婷婷| 久热99这里只有精品视频6| 高清精品美女在线播放| 国产高清在线精品一区二区三区| 亚洲中文字幕在线观看| 欧美精品伊人久久| 久一在线视频| 国产精品视频导航| 亚洲精品第一在线观看视频| 国产午夜小视频| 国产成人精品日本亚洲77美色| hezyo加勒比一区二区三区| 国产精品浪潮Av| 日韩一区二区在线电影| 中文字幕伦视频| 91色国产在线| 欧美亚洲欧美| 久无码久无码av无码| 亚洲一级色| 国产色网站| 国产精品香蕉| 真实国产乱子伦高清| 天天躁夜夜躁狠狠躁图片| 白浆免费视频国产精品视频| 99热这里只有精品免费国产|