前面介紹了mapshaper的輸入/輸出命令,本節(jié)介紹mapshaper的核心內(nèi)容:編輯命令。編輯命令有很多,下面一一介紹。
1. -clip<裁剪>
移除裁剪范圍外的要素或部分要素。有如下參數(shù):
source:數(shù)據(jù)源,通過(guò)裁剪多邊形的文件名或圖層id指定裁剪的多邊形要素?cái)?shù)據(jù)集;
bbox=<xmin,ymin,xmax,ymax>:通過(guò)bbox指定裁剪的范圍,刪除bbox范圍外的要素或部分要素;
remove-slivers:移除由裁剪產(chǎn)生的極小長(zhǎng)條形多邊形;
其他可選項(xiàng):name和target。
#示例: 使用land-area.shp裁剪usa_counties.shpmapshaper usa_counties.shp -clip land-area.shp -o2. -dissolve<合并>
以指定的屬性合并一組要素,若沒(méi)有指定屬性字段,則合并所有要素。對(duì)于多邊形圖層,-dissolve 在合并相鄰多邊形時(shí)會(huì)刪除公共邊界;對(duì)于點(diǎn)圖層,-dissolve 合并后得到一組點(diǎn)的質(zhì)心;-dissolve 不支持線圖層。
<field> :合并依賴的屬性名稱;
weight= :(針對(duì)點(diǎn)圖層)指定屬性名稱或JS表達(dá)代表各點(diǎn)在生成質(zhì)心中的權(quán)重。例如,如下命令估算美國(guó)人口分布的質(zhì)心:
mapshaper census_tracts.shp -points -dissolve weight=POPULATIONplanar:(針對(duì)點(diǎn)圖層)在計(jì)算合并后的質(zhì)心時(shí),將十進(jìn)制的度坐標(biāo)當(dāng)作平面直角坐標(biāo)看待。默認(rèn)情況下,mapshaper在3D空間中計(jì)算經(jīng)緯度點(diǎn)的質(zhì)心);calc=:在合并后的圖層中使用構(gòu)建的JS函數(shù)來(lái)創(chuàng)建屬性,詳情參見(jiàn)下面的示例,也可參考 -calc支持的一系列函數(shù);
sum-fields=:合并時(shí)求和的字段名稱,多個(gè)用逗號(hào)分隔;
copy-fields=:合并時(shí)復(fù)制(保留)的字段,多個(gè)用逗號(hào)分開(kāi);字段值來(lái)源于待合并的一組要素中第一個(gè)要素的值;
其他可選項(xiàng):name= 和 target=
# 示例:以屬性STATE合并要素mapshaper counties.shp -dissolve STATE -o states.shp# 示例: 以屬性STATE合并要素,同時(shí)計(jì)數(shù)要素個(gè)數(shù)、總?cè)丝凇⒆畲笕丝诤妥钚∪丝趍apshaper counties.shp -dissolve STATE calc='n = count(), total_pop = sum(POP), max_pop = max(POP), min_pop = min(POP)'3. -dissolve2<合并>
與dissolve類似,但可以用來(lái)合并相鄰或重疊的多邊形(考慮拓?fù)潢P(guān)系),若多邊形不相交且數(shù)據(jù)量很大,使用dissolve。
4. -each
將JS表達(dá)式應(yīng)用于圖層中的每個(gè)要素,用來(lái)創(chuàng)建、更新和刪除數(shù)據(jù)項(xiàng)。數(shù)據(jù)屬性向本地屬性一樣使用,其他要素級(jí)的屬性作為只讀屬性通過(guò)this獲取。
建議:當(dāng)使用bash shell(Mac和linux)時(shí),用單引號(hào)(' ')將JS表達(dá)式括起來(lái)以免shell表達(dá)式中的"!”和其他特殊字符。在WIndows中使用命令語(yǔ)句時(shí),用雙引號(hào)(" ")將JS表達(dá)式括起來(lái)。
<exPRession>:應(yīng)用于每個(gè)要素的JS表達(dá)式;
where=:用于篩選要素子集的二級(jí)JS表達(dá)式;
target=:目標(biāo)圖層;
this屬性:除非特殊說(shuō)明,否則this屬性只能讀取;
以下適用于所有圖層類型:
this.id:要素的id(數(shù)組型,從0開(kāi)始);
this.properties:要素屬性(可以像本地變量一樣讀寫);
以下只適用于點(diǎn)要素圖層:
this.coordinates:一個(gè)或多個(gè)由[x,y]構(gòu)成的數(shù)組;
this.x: 點(diǎn)的X坐標(biāo),若幾何對(duì)象為空則為null,若為多個(gè)點(diǎn)的要素,則返回第一個(gè)點(diǎn)的X坐標(biāo);
this.y: 點(diǎn)的Y坐標(biāo)或null;
以下只適用于多邊形要素圖層:
this.area:多邊形要素進(jìn)行任何簡(jiǎn)化后的面積;
this.originalArea:多邊形要素沒(méi)有進(jìn)行簡(jiǎn)化前的面積;
this.centroidX :質(zhì)心的X坐標(biāo);
this.centroidY: 質(zhì)心的Y坐標(biāo);
this.innerX:內(nèi)心的X坐標(biāo);
this.innerY: 內(nèi)心的Y坐標(biāo);
以下適用于多邊形和線要素圖層:
this.partCount:要素由幾部分構(gòu)成,單部件要素為1,多部件要素 >1,沒(méi)有要素(null)為0;
this.isNull:如果要素沒(méi)有幾何要素返回true;
this.bounds:要素的外接多邊形坐標(biāo)數(shù)組,[xmin, ymin, xmax, ymax]的形式;
this.width:bbox的寬度;
this.height:bbox的高度;
說(shuō)明:1)對(duì)于多部件的多邊形,計(jì)算的質(zhì)心是最大環(huán)的質(zhì)心,且不考慮環(huán)中的空洞;2)除未投影多邊形的面積利用球面幾何以平方米為單位計(jì)算外,其他多邊形的幾何屬性均以平面幾何為基礎(chǔ)進(jìn)行計(jì)算。
示例:
# 創(chuàng)建STATE_FIPS和AREA兩個(gè)字段mapshaper counties.shp -each 'STATE_FIPS=COUNTY_FIPS.substr(0, 2), AREA=this.area'# 刪除STATE_NAME和GEOID兩個(gè)字段mapshaper states.shp -each 'delete STATE_NAME, delete GEOID'# 字段重命名mapshaper states.shp -each 'STATE_NAME=NAME, delete NAME'# 打印NAME屬性mapshaper states.shp -each 'console.log(NAME)'# 為每個(gè)要素指定一個(gè)新的數(shù)據(jù)項(xiàng)mapshaper states.shp -each 'this.properties = {FID: this.id}'5. -erase<擦除>
移除落在多邊形范圍內(nèi)的要素或部分要素。
<source>:包含移除多邊形的文件或圖層,以文件名或圖層id代表移除多邊形;
bbox=<xmin,ymin,xmax,ymax>:通過(guò)bbox指定擦除的范圍,刪除bbox范圍內(nèi)的要素或部分要素;與 -clip bbox= 類似;
remove-slivers:移除由擦除產(chǎn)生的極小長(zhǎng)條形多邊形;
其他可選項(xiàng):name和target。
#示例: 刪除usa_counties.shp中在lakes.shp范圍內(nèi)的要素mapshaper usa_counties.shp -erase lakes.shp -o6. -explode<打散>
將多部件要素拆分成幾個(gè)獨(dú)立的要素。
7. -filter<過(guò)濾要素>
使用boolean類型的JS表達(dá)式移除不滿足條件的要素。
<expression>:結(jié)果為true或false的JS表達(dá)式,與 -each的使用場(chǎng)景一致;
remove-empty:刪除幾何要素為空的要素,可以單獨(dú)使用或與expression組合使用;
其他可選項(xiàng):name 和 target。
#示例: 從usa_counties.shp中選擇 STATE字段中包含 ME、VT、NH、MA、CT、RT的要素,并輸出為ne_counties.shpmapshaper usa_counties.shp -filter '"ME,VT,NH,MA,CT,RI".indexOf(STATE) > -1' -o ne_counties.shp8. -filter-fields<過(guò)濾屬性>刪除屬性表中的屬性,保留列出的屬性,多個(gè)屬性之間用逗號(hào)分隔。
其他可選項(xiàng):<fields> target=
# 示例: 刪除states.shp中的屬性,只保留FID和NAMEmapshaper states.shp -filter-fields FID,NAME9. -filter-islands<過(guò)濾孤島/環(huán)>移除小的獨(dú)立的環(huán)狀多邊形或孤島。
<min-area>=:移除小面積的孤島設(shè)置的閾值;
<min-vertices>:移除節(jié)點(diǎn)數(shù)量少的孤島設(shè)置的閾值;
<remove-empty>:刪除幾何對(duì)象為空的要素。
10. -filter-silvers<過(guò)濾面積>
通過(guò)面積過(guò)濾多邊形小碎片。
min-area=:移除的面積閾值;
remove-empty:刪除幾何對(duì)象為空的要素。
11. -graticule<格網(wǎng)>
創(chuàng)建以經(jīng)度0度為中心、覆蓋全球的格網(wǎng)圖層。
12. -innerlines<共享邊界>
創(chuàng)建由共享邊界構(gòu)成的線裝圖層,沒(méi)有屬性數(shù)據(jù)。
其他可選項(xiàng): name= 和 target=
# 示例: 提取兩個(gè)州共享的邊界mapshaper states.shp -filter 'STATE=="OR" || STATE=="WA"' -innerlines -o未完待續(xù)...
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注