首页 > 学院 > 开发设计 > 正文

mapshaper系列之四 - 编辑命令

2019-11-06 08:50:41
字体:
来源:转载
供稿:网友

    前面介绍了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 -o

2. -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 -o

6. -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未完待续...


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表