基于mapbasic的電力線屬性修改
摘要:本文是由mapbasic結(jié)合mapinfo開發(fā)的程序?qū)崿F(xiàn)的。主要是通過點(diǎn)選一段電力線,使與之‘線路名稱’屬性相同的電力線都呈被選中狀態(tài),同時(shí)出現(xiàn)一個(gè)文本窗口,給修改‘線路名稱’屬性提供接口。已有的值在第一個(gè)文本框中顯示出來,第二個(gè)文本框是空白的,輸入新屬性值,點(diǎn)擊確定就可修改全部選中電力線的‘線路名稱’屬性值。與mapinfo本身提供的功能,所進(jìn)行的修改過程來比,速度提高了十幾倍。
關(guān)鍵詞:mapinfo,mapbasic,電力線,屬性
1前言
這個(gè)問題的產(chǎn)生來源于遼中電力項(xiàng)目。該項(xiàng)目是根據(jù)遼中縣農(nóng)電局對遼中地區(qū)電力事業(yè)發(fā)展的需求,對該地區(qū)面積約1635平方公里范圍內(nèi)的66KV、10KV電力線路及供電所和變電所進(jìn)行調(diào)查、測量,最后數(shù)字化1:1萬地形圖。電力專業(yè)數(shù)據(jù)包括66KV和10KV兩種電力線,要對其電壓伏數(shù)、桿塔號(hào)、線路名稱、變電所或供電所名稱進(jìn)行實(shí)地測量調(diào)查,并填寫在數(shù)據(jù)屬性字段中。
在項(xiàng)目編輯過程中,由于作業(yè)方案的改變,要求將電力線的‘線路名稱’屬性值,舉例來說,由‘三億分’改為‘黃臘坨線三億分’;‘三億造紙廠支’改為‘黃臘坨線三億分三億造紙廠支’,也就是注記線路名稱的全稱。該項(xiàng)目共涉及到24個(gè)變電所,5萬個(gè)左右的電桿,象蜘蛛網(wǎng)一樣的線路,并且數(shù)據(jù)已經(jīng)都是按桿位打斷的數(shù)據(jù),同一‘線路名稱’值的線段有很多,看下表1所示的屬性信息就會(huì)明白。
表1
要一個(gè)一個(gè)的修改肯定是不現(xiàn)實(shí)的事,如何能快速、高效的更改這一屬性值,讓我們來看看下面兩種方法的比較,及最終的結(jié)論。
2依靠mapinfo軟件本身的功能修改
Mapinfo本身自帶了一個(gè)sql查詢功能,借助它我們能一次選擇同一‘線路名稱’值的所有線出來,在統(tǒng)一修改其值。具體步驟如下:
、攀顾薷牡谋碜兂煽删庉嫚顟B(tài)。
、朴‘信息查詢’工具或‘新建瀏覽窗口’工具選擇一個(gè)‘線路名稱’值,如:三億分。
、屈c(diǎn)擊菜單‘查詢’SQL選擇,出現(xiàn)一個(gè)‘SQL選擇’對話框,填寫正確的選擇條件,如圖1,就可以選擇所有線路名稱’為東荒地分的電力線出來,同時(shí)出現(xiàn)一個(gè)名為Query1的瀏覽窗口!
圖1
⑷選擇菜單‘表’更新列,出現(xiàn)‘更新列’對話框,填寫正確的選擇條件,如圖2,就可統(tǒng)一更改‘線路名稱’的值為‘黃臘坨線三億分’了!
圖2
3屬性修改的程序?qū)崿F(xiàn)過程
、哦x一個(gè)工具按鈕
createbuttonpad"查詢工具"as
toolbuttoncallingtool_subID1
iconmi_icon_arrow
cursormi_cursor_arrow
drawmodedm_custom_point
helpmsg"在地圖窗口中單擊n單擊一位置"
、贫x一個(gè)修改對話框
dialog'對話框
title"選擇"
controlstatictext
title"點(diǎn)選電力線'線路名稱'"
controledittext
values_vz
controlstatictext
title"替換'線路名稱'"
controledittext
intosearchfor
controlokbutton
title"確定"
ControlCancelButton
title"取消"
、沁x擇所有與選中的‘線路名稱’同值的電力線
fetchreci_row_idfroms_table
s_tn=s_table
s_table=s_table+".線路名稱"
s_vz=s_table
select*froms_tnwhere線路名稱=s_vzintosel
next
⑷修改‘線路名稱’值
ifcommandinfo(cmd_info_dlg_ok)then
ifsearchfor<>""then
updateselset線路名稱=searchfor
dimnobjasobject
dimjasinteger
j=selectioninfo(sel_info_nrows)
dimnasinteger
forn=1toj
select*fromselwhererowid=nintosele1
nobj=sele1.obj
alterobjectnobjinfoobj_info_pen,makepen(1,2,red)
updateselsetobj=nobjwhererowid=n
next
endif
else
gotonpro'點(diǎn)取消鍵就跳到下一個(gè)循環(huán)
endif
到這程序?qū)崿F(xiàn)的‘線路名稱’屬性值修改過程也就完成了。用文字總結(jié)一下就是通過點(diǎn)選一段電力線,使與之‘線路名稱’屬性相同的電力線都呈被選中狀態(tài),同時(shí)出現(xiàn)一個(gè)文本窗口,給修改‘線路名稱’屬性提供接口。已有的值在第一個(gè)文本框中顯示出來,第二個(gè)文本框是空白的,輸入新屬性值,點(diǎn)擊確定就可修改全部選中電力線的‘線路名稱’屬性值。完成一條電力線的修改只需幾秒鐘的時(shí)間。
4、結(jié)束語
上面兩種方法雖然主要的完成過程都有四步,但第二種方法的整個(gè)過程都是程序?qū)崿F(xiàn)的,人工只需點(diǎn)擊一段線輸入新值就可以,比起第一種方法要快上幾十倍。在我們這樣的生產(chǎn)單位,速度與效益是緊密相關(guān)的,在以后的工作中,我會(huì)挖掘更多的方法來提高作業(yè)效率。
參考文獻(xiàn):
[1]地理信息系統(tǒng)二次開發(fā)教程—語言篇/劉光編著.北京:清華大學(xué)出版社,2003