Abstract: This article will try to use examples to introduce some useful mapshaper commands, so that everyone can have a brief understandin...
This article will try to use examples to introduce some useful mapshaper commands, so that everyone can have a brief understanding of mapshaper.
Get help using mapshaper
# View all commands supported by mapshaper
mapshaper -h
# View help for using specific commands
mapshaper -h simplify
As shown in the figure:
Get Dataset Information
# Obtain the information and field list of the dataset
mapshaper mystery_ data.json -info
# Calculate certain statistical fields
mapshaper provinces.shp -calc 'min(INCOME)' -calc 'median(INCOME)' -calc 'max(INCOME)'
As shown in the figure:
Convert between file formats
# Convert all shp data in the directory into Geojson
mapshaper *.shp -o format=geojson
#Convert a CSV file with latitude and longitude into a GeoJSON point type
mapshaper locations.csv -points x=lng y=lat -o format=geojson
As shown in the figure:
Simplify polygons and polylines
# Simplify by 10%
mapshaper counties.shp -simplify 10% -o out.shp
### Cut polygon, line, and point layers using polygon layers
mapshaper states.shp -clip land_area.shp -o clipped.shp
Make polygon layers erase polygon, line, and point layers
mapshaper land_areas.shp -erase water_bodies.shp -o erased.shp
Blend Polygons
# Merge multiple polygons in a feature layer into a single polygon
mapshaper states.shp -dissolve -o country.shp
Connect an external data table to a feature layer
# Connect CSV to SHP file
# Tip: FIPS: str is used to prevent FIPS fields from being converted to numeric type data. Here, it can be forcibly specified as a string
mapshaper states.shp -join demographics.csv keys=STATE_FIPS,FIPS field-types=FIPS:str -o joined.shp
# Connect Dbf to shp file
mapshaper states.shp -join states2.dbf keys=STATE,STATE -o joined.shp
Edit Property Sheet
# Add fields to shp data (JS syntax)
mapshaper counties.shp -each "STATE_FIPS=CNTY_FIPS.substr(0, 2), AREA=$.area"
Chain Command Call
Example:
# 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
Is it particularly like lodash?
Using Layers
Most mapshaper commands apply to data features. A layer is a collection of features with the same geometric type and a consistent set of data attributes (or without data attributes). Mapshaper supports polygon, polyline, and point layers, and for all of these types, a single feature may contain a geometric shape, multiple shapes, or no shapes (i.e., empty/empty geometry).
The easiest way to use mapshaper is to import a single level feature, edit it, and save it to a file:
mapshaper counties.shp -filter '$.isNull === false' -o counties_notnull.shp
The 0.2.0 version introduces support for multiple layers and a new syntax for selecting which layers a command should target -target<layers>
.
Commands use commas to separate one or more layers.
Most commands support the target=<layer(s)>
option.
The following examples show how to import a province boundary layer,
create a new layer that contains only shared boundaries,
simplify geometry, and save both layers as GeoJSON files.
In this example,
-innerlines
invokes the command with two options:+
Create a new layer instead of replacing the target layer,
name=lines
Rename the new layer.
The output is two files, out/provinces.json and out/lines.json.
mapshaper provinces.shp \
-simplify 20% \
-innerlines + name=lines \
-target provinces,lines \
-o format=geojson out/
When importing TopoJSON files, mapshaper treats each named object as a separate layer. The following example shows how to import the TopoJSON file states, extract Hawaiian features, and save them as GeoJSON files.
Calling -filter target=states
applies the command to the layer named states,
and uses -o
to save the file.
mapshaper usa.topojson \
-filter 'STATE == "HI"' target=states \
-o out/hawaii.json format=geojson