麻辣GIS微信平台

更多 GIS 干货

微信关注不错过

「GIS笔记」Mapshaper命令行使用入门

本文会尝试使用示例的方式,介绍一些有用的 mapshaper 命令,让大家可以对 mapshaper 有一个简要的认识。

mapshaper命令行工具安装

参考这篇:《「GIS工具」GISer的小军刀-mapshaper

获取使用 mapshaper 帮助


# 查看mapshaper支持的所有命令
mapshaper -h

# 查看具体命令的使用帮助
mapshaper -h simplify

如图:

获取数据集信息

# 获取数据集的信息及字段列表
mapshaper mystery_data.json -info

# 计算某些统计字段 
mapshaper provinces.shp -calc 'min(INCOME)' -calc 'median(INCOME)' -calc 'max(INCOME)'

如图:

在文件格式之间转换

# 把目录下所有的shp数据转换成Geojson
mapshaper *.shp -o format=geojson

# 把有经纬度的CSV文件转换成GeoJSON的点类型
mapshaper locations.csv -points x=lng y=lat -o format=geojson

如图:

简化多边形、折线

# 简化10%
mapshaper counties.shp -simplify 10% -o out.shp

使用多边形图层剪切多边形、线、点图层

mapshaper states.shp -clip land_area.shp -o clipped.shp

使多边形层擦除多边形、线、点图层

mapshaper land_areas.shp -erase water_bodies.shp -o erased.shp

融合多边形

# 将一个要素图层中的多个多边形融合成一个单多边形 
mapshaper states.shp -dissolve -o country.shp

将外部数据表连接到要素图层

# 将CSV连接到SHP文件 
# 提示: FIPS:str 用于防止FIPS字段被转换成数字类型数据,这里可以强制指定成字符串
mapshaper states.shp -join demographics.csv keys=STATE_FIPS,FIPS field-types=FIPS:str -o joined.shp

# 将Dbf连接到shp文件
mapshaper states.shp -join states2.dbf keys=STATE,STATE -o joined.shp

编辑属性表

# 给shp数据添加字段(JS语法)
mapshaper counties.shp -each "STATE_FIPS=CNTY_FIPS.substr(0, 2), AREA=$.area"

链式命令调用

示例:

# Generate a tract-level Shapefile of populated areas by dissolving census blocks with non-zero population.
mapshaper tabblock2010_36_pophu.shp \
  -each 'TRACT=BLOCKID10.substr(0,11)' \
  -filter 'POP10 > 0' \
  -dissolve TRACT sum-fields=POP10 \
  -o out.shp
# From a county-level Shapefile, generate files for state and national boundaries.
mapshaper counties.shp \
  -dissolve STATE_FIPS name=states \
  -dissolve + name=usa \
  -o out.shp

是不是特别像lodash?

使用图层

大多数 mapshaper 的命令适用于数据要素。而图层是具有相同几何类型和一组一致的数据属性(或没有数据属性)的要素的集合。Mapshaper 支持多边形、折线和点图层,对于所有这些类型,单个特征可能包含一个几何形状、多个形状或没有形状(即空/空几何)。

使用 mapshaper 最简单的方法是导入单层要素,对其进行编辑,然后保存到文件中:

mapshaper counties.shp -filter '$.isNull === false' -o counties_notnull.shp

0.2.0 版本中引入了对多个层的支持以及用于选择命令应针对的层的新语法-target <layers>,命令采用逗号分隔一个或多个图层,大多数命令都支持target=<layer(s)>选项。

以下示例显示了如何导入省份边界图层、创建仅包含共享边界的新图层、简化几何并将两个图层保存为 GeoJSON 文件。在此示例中,-innerlines使用两个选项调用命令:+创建新层而不是替换目标层,name=lines重命名新层。输出是两个文件,out/provinces.json和out/lines.json.

mapshaper provinces.shp \
  -simplify 20% \
  -innerlines + name=lines \
  -target provinces,lines \
  -o format=geojson out/

导入 TopoJSON 文件时,mapshaper 将每个命名对象视为一个单独的层。下面的示例展示了如何导入 TopoJSON 文件states,提取夏威夷的特征并将其保存为 GeoJSON 文件。

调用-filter target=states会将命令应用于名为states的图层,并使用-o保存文件。

mapshaper usa.topojson \
  -filter 'STATE == "HI"' target=states \
  -o out/hawaii.json format=geojson

所有文章

点击查看系列全部文章--> 「更新中」Mapshaper入门学习笔记

相关阅读

麻辣GIS-Sailor

作者:

GIS爱好者,学GIS,更爱玩GIS。

声明

1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。

2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。

手机阅读
公众号关注
知识星球
手机阅读
麻辣GIS微信公众号关注
最新GIS干货
关注麻辣GIS知识星球
私享圈子

留言板(小编看到第一时间回复)