WGIS的字段計(jì)算器(Field Calculator)跟其他桌面GIS軟件的字段計(jì)算器類似徐块,計(jì)算器的規(guī)則遵循Javascript的語(yǔ)法規(guī)則哎垦。
1.為什么使用字段計(jì)算器
字段計(jì)算器可以批量對(duì)數(shù)據(jù)表進(jìn)行操作耍攘,是一種非辰嘧溃快速高效的計(jì)算工具癞谒。這個(gè)跟Excel的公式類似啊掏,不過(guò)公式的寫法略有不同梗搅。比如我們有上千條數(shù)據(jù)內(nèi)容需要更新禾唁,而這些更新是基于其他字段就可以自動(dòng)識(shí)別的,那么无切,利用字段計(jì)算器就可以在1秒之內(nèi)(或很短時(shí)間內(nèi))計(jì)算完所有的結(jié)果荡短,而不用靠人工逐一去驗(yàn)證計(jì)算。
2. 工具入口
在圖層列表頂部哆键,我們可以找到入口:
或者在屬性表中掘托,我們可以點(diǎn)擊下面示意圖片中的計(jì)算器圖標(biāo)來(lái)打開字段計(jì)算器。
打開之后籍嘹,下圖中:
紅色序號(hào)1位置可以設(shè)置需要編輯的圖層數(shù)據(jù)闪盔;
序號(hào)2處可以快速插入我們所需要的字段;
序號(hào)3處可以選擇需要進(jìn)行計(jì)算的字段辱士;
序號(hào)4處是公式或語(yǔ)句的編寫窗口泪掀;
序號(hào)5處是編寫完成后的操作按鈕。
3. 基本規(guī)則
計(jì)算器使用JavaScript (以下簡(jiǎn)稱JS) 作為計(jì)算腳本颂碘;
出于安全考慮异赫,某些與安全相關(guān)的函數(shù)和語(yǔ)句將被禁止,如console.log()头岔、var塔拳、function等等;
您可以訪問到的WGIS數(shù)據(jù)接口:
使用 $f 來(lái)表示某一行數(shù)據(jù)峡竣;
用$f["name"] 或$f.name 來(lái)表示該行數(shù)據(jù)中名為name的字段靠抑。
數(shù)學(xué)運(yùn)算:加減乘除分別用+、-适掰、*颂碧、/荠列,JavaScript的常見運(yùn)算符可以參考這里。
WGIS還內(nèi)置了一些常用的JS函數(shù)供大家快速選擇:
4.使用方法舉例
舉例1:字符拼接
下面的語(yǔ)句表示名為name的字段稚伍,等于city字段后面加上zone字段弯予。如果city和zone字段都是數(shù)字格式,那么name將得到一個(gè)數(shù)字个曙,如果city和zone都是字符格式锈嫩,那么name將得到兩個(gè)字符串的拼接。
我們令 name =
$f["city"]+$f["zone"]
即:
計(jì)算結(jié)果:
namecityzone
北京市A區(qū)北京市A區(qū)
上海市B區(qū)上海市B區(qū)
舉例2:數(shù)學(xué)運(yùn)算
JS的加減乘除運(yùn)算符分別為+垦搬、-呼寸、*、/
加法:a+b
減法:a-b
乘法:a*b
除法:a/b
取余數(shù):a%b
混合運(yùn)算:(a+b)/c-d
其他數(shù)學(xué)運(yùn)算公式猴贰,可以在WGIS內(nèi)置的數(shù)學(xué)函數(shù)選擇框中查看对雪,鼠標(biāo)滑過(guò)會(huì)有相關(guān)提示:
舉例3:數(shù)字精度計(jì)算
(1)取整
下面的語(yǔ)句表示了一個(gè)簡(jiǎn)單的數(shù)學(xué)計(jì)算過(guò)程。將price和number的數(shù)字進(jìn)行相乘米绕,然后賦值給sum瑟捣。
我們令 sum =
parseInt($f["price"]*$f["number"])
計(jì)算結(jié)果:
pricenumbersum
0.251251
4.2612312
(2)四舍五入
注意:parseInt函數(shù)僅取整,并非四舍五入栅干。如需四舍五入迈套,可以使用Math.round()函數(shù)。
Math.round($f["price"]*$f["number"])
(3)保留兩位小數(shù)
如果需要保留兩位小數(shù)碱鳞,則:
Math.round($f["price"]*$f["number"]*100)/100
計(jì)算結(jié)果
pricenumbersum
0.251251.26
4.2612312.78
除了Math.round()方法外桑李,還可以用下面的代碼實(shí)現(xiàn)上面的功能。
注意:JS的toFixed()得到的是字符串窿给,如果需要轉(zhuǎn)換為數(shù)字贵白,需使用parseFloat()方法。
parseFloat(parseFloat($f["price"]*$f["number"]).toFixed(2))
舉例4:字符截取和替換
稍微復(fù)雜的字符處理:截取前5個(gè)字崩泡,并將所有的“北京”替換為“上航模”。
注:$f.address等價(jià)于$f["address"]
我們令 name =
$f.address.substr(0,5).replace("北京","上海")
舉例5:條件判斷
根據(jù)type類型來(lái)判斷該城市是否為地級(jí)市角撞,并分別輸出不同的文本圈浇。
注:$f.type等價(jià)于$f["type"]
我們令 note =
$f.type==="地級(jí)市"?($f.name+"是一個(gè)地級(jí)市"):($f.name+"不是一個(gè)地級(jí)市")
關(guān)于條件運(yùn)算符的規(guī)則:條件?成立時(shí)執(zhí)行的語(yǔ)句:不成立時(shí)執(zhí)行的語(yǔ)句。也就是說(shuō)?前面是一個(gè)布爾判斷靴寂,如果結(jié)果為true,執(zhí)行?后面召耘、:前面的語(yǔ)句百炬;如果結(jié)果為false,則執(zhí)行:后面的語(yǔ)句污它。
計(jì)算結(jié)果:
nametypenote
廊坊市地級(jí)市廊坊市是一個(gè)地級(jí)市
青州市縣級(jí)市青州市不是一個(gè)地級(jí)市
需要更多示例剖踊?
您可以留言寫下您的需求庶弃,我們看到后會(huì)針對(duì)需求撰寫新的示例。