前面介绍了mapshaper的输入/输出命令,本节介绍mapshaper的核心内容:编辑命令。编辑命令有很多,下面一一介绍。
1. -clip<裁剪>
移除裁剪范围外的要素或部分要素。有如下参数:
source:数据源,通过裁剪多边形的文件名或图层id指定裁剪的多边形要素数据集;
bbox=<xmin,ymin,xmax,ymax>:通过bbox指定裁剪的范围,删除bbox范围外的要素或部分要素;
remove-slivers:移除由裁剪产生的极小长条形多边形;
其他可选项:name和target。
#示例: 使用land-area.shp裁剪usa_counties.shpmapshaper usa_counties.shp -clip land-area.shp -o2. -dissolve<合并>
以指定的属性合并一组要素,若没有指定属性字段,则合并所有要素。对于多边形图层,-dissolve 在合并相邻多边形时会删除公共边界;对于点图层,-dissolve 合并后得到一组点的质心;-dissolve 不支持线图层。
<field> :合并依赖的属性名称;
weight= :(针对点图层)指定属性名称或JS表达代表各点在生成质心中的权重。例如,如下命令估算美国人口分布的质心:
mapshaper census_tracts.shp -points -dissolve weight=POPULATIONplanar:(针对点图层)在计算合并后的质心时,将十进制的度坐标当作平面直角坐标看待。默认情况下,mapshaper在3D空间中计算经纬度点的质心);calc=:在合并后的图层中使用构建的JS函数来创建属性,详情参见下面的示例,也可参考 -calc支持的一系列函数;
sum-fields=:合并时求和的字段名称,多个用逗号分隔;
copy-fields=:合并时复制(保留)的字段,多个用逗号分开;字段值来源于待合并的一组要素中第一个要素的值;
其他可选项:name= 和 target=
# 示例:以属性STATE合并要素mapshaper counties.shp -dissolve STATE -o states.shp# 示例: 以属性STATE合并要素,同时计数要素个数、总人口、最大人口和最小人口mapshaper counties.shp -dissolve STATE calc='n = count(), total_pop = sum(POP), max_pop = max(POP), min_pop = min(POP)'3. -dissolve2<合并>
与dissolve类似,但可以用来合并相邻或重叠的多边形(考虑拓扑关系),若多边形不相交且数据量很大,使用dissolve。
4. -each
将JS表达式应用于图层中的每个要素,用来创建、更新和删除数据项。数据属性向本地属性一样使用,其他要素级的属性作为只读属性通过this获取。
建议:当使用bash shell(Mac和linux)时,用单引号(' ')将JS表达式括起来以免shell表达式中的"!”和其他特殊字符。在WIndows中使用命令语句时,用双引号(" ")将JS表达式括起来。
<exPRession>:应用于每个要素的JS表达式;
where=:用于筛选要素子集的二级JS表达式;
target=:目标图层;
this属性:除非特殊说明,否则this属性只能读取;
以下适用于所有图层类型:
this.id:要素的id(数组型,从0开始);
this.properties:要素属性(可以像本地变量一样读写);
以下只适用于点要素图层:
this.coordinates:一个或多个由[x,y]构成的数组;
this.x: 点的X坐标,若几何对象为空则为null,若为多个点的要素,则返回第一个点的X坐标;
this.y: 点的Y坐标或null;
以下只适用于多边形要素图层:
this.area:多边形要素进行任何简化后的面积;
this.originalArea:多边形要素没有进行简化前的面积;
this.centroidX :质心的X坐标;
this.centroidY: 质心的Y坐标;
this.innerX:内心的X坐标;
this.innerY: 内心的Y坐标;
以下适用于多边形和线要素图层:
this.partCount:要素由几部分构成,单部件要素为1,多部件要素 >1,没有要素(null)为0;
this.isNull:如果要素没有几何要素返回true;
this.bounds:要素的外接多边形坐标数组,[xmin, ymin, xmax, ymax]的形式;
this.width:bbox的宽度;
this.height:bbox的高度;
说明:1)对于多部件的多边形,计算的质心是最大环的质心,且不考虑环中的空洞;2)除未投影多边形的面积利用球面几何以平方米为单位计算外,其他多边形的几何属性均以平面几何为基础进行计算。
示例:
# 创建STATE_FIPS和AREA两个字段mapshaper counties.shp -each 'STATE_FIPS=COUNTY_FIPS.substr(0, 2), AREA=this.area'# 删除STATE_NAME和GEOID两个字段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)'# 为每个要素指定一个新的数据项mapshaper states.shp -each 'this.properties = {FID: this.id}'5. -erase<擦除>
移除落在多边形范围内的要素或部分要素。
<source>:包含移除多边形的文件或图层,以文件名或图层id代表移除多边形;
bbox=<xmin,ymin,xmax,ymax>:通过bbox指定擦除的范围,删除bbox范围内的要素或部分要素;与 -clip bbox= 类似;
remove-slivers:移除由擦除产生的极小长条形多边形;
其他可选项:name和target。
#示例: 删除usa_counties.shp中在lakes.shp范围内的要素mapshaper usa_counties.shp -erase lakes.shp -o6. -explode<打散>
将多部件要素拆分成几个独立的要素。
7. -filter<过滤要素>
使用boolean类型的JS表达式移除不满足条件的要素。
<expression>:结果为true或false的JS表达式,与 -each的使用场景一致;
remove-empty:删除几何要素为空的要素,可以单独使用或与expression组合使用;
其他可选项: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<过滤属性>删除属性表中的属性,保留列出的属性,多个属性之间用逗号分隔。
其他可选项:<fields> target=
# 示例: 删除states.shp中的属性,只保留FID和NAMEmapshaper states.shp -filter-fields FID,NAME9. -filter-islands<过滤孤岛/环>移除小的独立的环状多边形或孤岛。
<min-area>=:移除小面积的孤岛设置的阈值;
<min-vertices>:移除节点数量少的孤岛设置的阈值;
<remove-empty>:删除几何对象为空的要素。
10. -filter-silvers<过滤面积>
通过面积过滤多边形小碎片。
min-area=:移除的面积阈值;
remove-empty:删除几何对象为空的要素。
11. -graticule<格网>
创建以经度0度为中心、覆盖全球的格网图层。
12. -innerlines<共享边界>
创建由共享边界构成的线装图层,没有属性数据。
其他可选项: name= 和 target=
# 示例: 提取两个州共享的边界mapshaper states.shp -filter 'STATE=="OR" || STATE=="WA"' -innerlines -o未完待续...
新闻热点
疑难解答