
GISCLI数据可视化【免费下载链接】mapshaperTools for editing Shapefile, GeoJSON, TopoJSON and CSV files项目地址https://gitcode.com/gh_mirrors/ma/mapshaper点击查看免费下载本篇技术指南以 Mapshaper 官方 Basics 示例文档 为骨架汇总了 GIS 日常工作中最常用的一批短配方格式转换、属性连接join、简化simplify、溶解dissolve、投影projection、分类着色与 Web 导出等。你读完本文将掌握在 Mapshaper 命令行与 Web 控制台中快速探查数据集、按条件过滤与聚合、把 CSV 连接到 Shapefile、为 Web 地图生成精简且拓扑正确的 TopoJSON以及用命令文件command file把整套处理流水线参数化、可复现地跑起来。每个配方都附带仓库源码与测试中的实现细节方便你对照 命令参考 进一步深挖。说明本文示例主要面向 Web 应用 的 Console ——先加载数据再逐条运行下面的命令文件名、图层名与字段名均为示意请替换为你自己的数据。命令名统一保留前导-这种写法在 Web 控制台与 CLI 中都适用且命令序列在第一条命令之后也需要它。若要在命令行运行大多数示例只需在命令序列前加上mapshaper input-file、在序列后加上-o output-file。命令与选项的完整语法见 命令参考-each、-filter、calc等命令所用 JS 表达式的上下文见 JavaScript 表达式指南。一、数据探查动手处理前的第一步打印数据集摘要-info-info会打印几何类型、要素数量、CRS若已知、包围盒以及每个属性字段的名称与类型——这是快速回忆这个文件里到底有什么的最快方式。CLI 下还可以加save-toinfo.json把结果以 JSON 形式落盘便于脚本消费。从源码看getLayerInfo()与getAttributeTableInfo()等函数见 mapshaper-info.mjs负责拼装这些信息save-to选项则会调用文件导出模块写盘。参考文档中-info还支持保存为图层默认名为info与name选项见 命令参考。在指定图层上运行命令-info targetcounties命令默认作用于当前选中的图层用target指名其他图层或用target*让命令作用于每一个图层。target还接受图层编号第一个图层为 1以及逗号分隔的名称/编号列表名称中可含*通配符见 命令参考 的 Common options。按字段分组统计要素数-drop geometry \ -dissolve STATE calcN count(), POP sum(POP)溶解 calc子句是对数据进行聚合的惯用法这里-drop geometry把结果变成一张纯属性表可直接导出为 CSV。二、过滤与选取只留下你关心的要素保留满足条件的要素-filter CONTINENT Asia POP 1e7-filter保留表达式返回true的要素。JS 表达式中this指向当前要素字段可直接按名引用this.id是要素的数字 id从 0 开始。过滤时保留原始图层-filter POP 100000 namelarge_places标志把结果存为新图层而非替换当前图层配合name给新图层起个有意义的名字。这是 Mapshaper 派生图层的惯用方式命令参考 中与name被列为许多命令的通用选项。保留包围盒内的要素-clip bbox-10,35,30,60四个 bbox 数值依次为xmin,ymin,xmax,ymax使用图层自身的坐标系。-clip保留框内部分想保留框外部分则用-erase bbox...。按某属性取前 N 条要素-sort POP descending \ -filter this.id 50-sort POP descending按人口从大到小排序要素的数字 id 从0开始因此this.id 50恰好保留前 50 条。丢弃空几何要素-filter remove-emptyremove-empty标志删除几何缺失或为空的要素。类似的remove-empty标志同样出现在-filter-islands、-filter-slivers等命令中并有对应测试覆盖如 filter-slivers-test.mjs。三、编辑属性字段添加派生字段-each STATE_FIPS COUNTY_FIPS.substr(0, 2), AREA_KM2 round(this.area / 1e6, 1)-each对每个要素运行一条 JS 表达式给裸字段名赋值即创建或更新该字段。round(x, 1)是 Mapshaper 的取整辅助函数此处保留 1 位小数。在未投影的经纬度数据上this.area返回平方米除以1e6即换算为平方公里。重命名并筛选字段-rename-fields POPULATIONPOP,MEDIAN_INCOMEMEDIAN_INC \ -filter-fields STATE,COUNTY,POPULATION,MEDIAN_INCOME-rename-fields接受新名旧名的成对参数-filter-fields只保留列出的字段且按列出顺序排列——非常适合整理 CSV 导出结果。保留 CSV 中的前导零string-fieldsFIPS,STATEFIPSMapshaper 默认会把任何看起来像数字的 CSV 列解析为数值从而悄悄丢掉 FIPS、ZIP 等标识列的前导零。在 Web 应用中导入 CSV 时在Advanced options字段里填入string-fieldsFIPS,STATEFIPS在 CLI 中则通过-i传入mapshaper -i counties.csv string-fieldsFIPS,STATEFIPS。string-fields*可匹配全部字段测试 delim-import-test.mjs 中专门覆盖了保护字符串格式数字与string-fields*匹配所有字段两种场景。四、数据连接Join按键连接 CSV 与 Shapefile-join demographics keysSTATE_FIPS,FIPS运行连接前需同时加载目标图层与 CSV。keysA,B表示用目标的A字段匹配源表的B字段。若源键是 FIPS、ZIP 这类带前导零的代码请用string-fieldsFIPS导入 CSV让06匹配06而不是被解析成6。只想从源表取几列时加fieldsFIELD_A,FIELD_Bfields*复制全部字段fields空列表则不复制任何字段命令参考。空间连接为点打上所在多边形的属性-join precinct_polygons省略keys时-join会根据涉及的几何类型退化为空间连接上例中每个点继承包含它的多边形的属性。可用fieldsPRECINCT_ID,DIVISION只保留指定列。-join的完整选项还包括where按条件过滤源记录、prefix给连接字段加前缀、largest-overlap、min-overlap-pct、max-distance点对点以及force允许目标表字段被源表覆盖等详见 命令参考。多对一连接 聚合-join crimes calcN count(), AVG_SEVERITY mean(SEVERITY)多边形到多点polygon-to-many-points的连接可以用calc把匹配到的多条源记录汇总成每个目标要素上的一个或多个新字段。calc里可用的函数与-calc相同。五、简化Simplification为 Web 简化多边形图层-simplify 5% keep-shapes \ -clean-simplify 5%使用默认的加权 Visvalingam 算法保留 5% 的原始顶点keep-shapes防止简化把小多边形整个抹掉-clean则清理激进简化引入的拓扑错误。TopoJSON 输出通常比同等 GeoJSON 小 2–5 倍在 Export 对话框选择 TopoJSON或在 CLI 中用-o formattopojson provinces.topojson。简化算法的实现细节可在 simplify 目录下查看。多文件共享拓扑简化-simplify 10%在 Web 应用导入多个文件时在Advanced options里加combine-filesMapshaper 会先把输入合并为一个数据集再构建弧段拓扑——这样图层间共享的顶点在简化后依然共享州/县边界不会出现缝隙或重叠。修复拓扑错误-clean-clean会吸附近似重复的顶点、清除多边形之间微小的缝隙与重叠并修复自相交的线是任何空间操作前安全的第一步。必要时可用gap-width或snap-interval微调。六、聚合Aggregation溶解到父级地理单元-dissolve STATE-dissolve把命名字段取值相同的相邻多边形合并为一个。溶解的同时计算分组统计量-dissolve STATE calcN count(), POP sum(POP), MEDIAN_INC median(MEDIAN_INC)calc同样适用于-dissolve。可用的命名函数包括count、sum、mean、median、mode、min、max、quartile1/2/3、iqr、quantile、collect、every、some、first、last它们与-each共享同一个要素级上下文。点数据溶解为人口加权质心-dissolve STATE_FIPS weightPOPULATION把共享STATE_FIPS值的点分组溶解为每组一个加权质心。weight接受字段名或 JS 表达式省略分组字段时所有点会溶解为一个质心。七、空间操作从一个图层中擦除另一图层-erase lakes-erase删除目标图层中落在源图层多边形内部的部分常用于遮掉水域、公园等不计入区域。反向操作是-clip保留内部。提取内部边界-innerlines-innerlines把多边形之间的共享边界输出为一条线图层通常用于在样式化地图上给内部边界加描边。想同时保留外边界与内边界改用-lines。生成覆盖图层的六边形网格-grid typehex interval10km namehex-grid typehex cols40 namehex-grid生成覆盖目标包围盒的规则网格支持square、square2、hex、hex2、rhombus、rhombus2、triangle、triangle2、cairo等类型。用interval直接设定单元边长或用cols、rows、cells设定近似网格分辨率cell-scale可让单元相对中心缩放rotate可绕目标包围盒中心旋转。生成的网格可配合空间连接-join interpolatePOPULATION用插值后的计数数据来着色。合并兼容图层-merge-layers targetOR,WA,CA,AK namepacific_states-merge-layers把几何类型兼容的多个图层合并为一个若各图层属性字段不一致加force让 Mapshaper 用空值填充缺失字段。八、重投影投影到命名 CRS-proj robinson-proj接受 EPSG 编码EPSG:3857、PROJ 字符串projtmerc lon_0...或短别名wgs84、webmercator、robinson、albersusa。细节见 Projections 指南。Mapshaper 内置了丰富的投影实现包括蝴蝶投影、Dymaxion、Lee 四面体投影等自定义投影见 crs 目录。匹配另一文件的投影-proj matchbasemapmatch读取另一图层或.prj文件的 CRS并把目标投影到与之匹配的坐标系——在组装需要共享同一坐标系统的多个数据集时非常方便。九、分类与样式分位数分类到颜色渐变-classify save-asfill quantile classes6 color-schemeOranges-classify把类别索引或派生值这里是用色值写入命名字段。默认是顺序分位数分类也可以切换为equal-interval、nice、categorical或non-adjacent。CLI 下运行mapshaper -colors可列出内置配色方案。为导出添加 SVG 样式-style stroke#444 stroke-width0.5 fillnone \ -style whereRANK 0 stroke#000 stroke-width1.5-style把 SVG 呈现属性写到每个要素上where形式允许按条件设置样式。准备就绪后导出为 SVG即可用于印刷或 Web 布局。-style支持的样式值既可以是字面量也可以是 JS 表达式命令参考。十、输出与格式转换Shapefile 与 GeoJSON 互转Web 应用点 Export 按钮选择 GeoJSON 或 Shapefile 即可。CLI 下输出格式由文件扩展名推断mapshaper input.shp -o input.geojson mapshaper input.geojson -o input.shp也可用format强制指定格式如-o formattopojson out.json。写出 Shapefile 时Mapshaper 会同时生成.shp、.shx、.dbf与.prj若未给出输出文件名输出文件将沿用目标图层名。量化 TopoJSONWeb 应用点 Export 按钮选择 TopoJSON。TopoJSON 输出默认启用量化——Mapshaper 会根据数据坐标范围自动选取量化级别。量化把坐标舍入到网格上从而大幅缩小文件体积默认级别可用quantization覆盖如quantization1e5。配合-simplify与 TopoJSON 的共享弧编码量化输出通常比同等 GeoJSON 小 2–5 倍。输出为 ndjsonmapshaper big.geojson -o ndjson big.ndjson换行分隔的 JSONNewline-delimited JSON对 jq、BigQuery、DuckDB 这类面向行的工具更友好——每行一个 Feature没有外层 FeatureCollection。这主要是 CLI 工作流。按字段切分图层为多个文件mapshaper counties.shp \ -split STATE \ -o out/ extensiongeojson-split FIELD按字段值把要素切分为独立图层-o指向目录时每个图层写成一个文件以字段值命名。这主要是 CLI 工作流。十一、工作流模式命令文件与参数化从文件运行命令链# build.txt mapshaper -i counties.shp -rename-fields POPPOPULATION -dissolve STATE calcPOP sum(POP) -simplify 5% -o out/states.topojsonmapshaper -run build.txt # or simply: mapshaper build.txt长流水线可以放进 命令文件 中。命令文件是首行非空、非注释内容以mapshaper开头的.txt文件支持#注释、无需转义 shell 元字符、接受尾部反斜杠续行非强制。这是 CLI 工作流Web 应用运行命令文件的支持自 v0.7.46 起已加入见 command-line.md。参数化命令文件mapshaper -vars YEAR2024 PCT10 -run build.txt# build.txt mapshaper -defaults YEAR2020 PCT5 -i sources/counties_{{YEAR}}.shp -simplify {{PCT}}% -o out/counties_{{YEAR}}.shp{{VAR}}占位符在解析时替换。-defaults设置可被调用方用-vars覆盖的默认值也支持用{{env.NAME}}引用环境变量。-vars每次调用都会覆盖已有值而-defaults只在键尚未定义时写入两种命令还都接受指向含扁平 JSON 对象的文件路径作为变量来源命令参考。注意-vars/-defaults写入模板作用域{{X}}替换时优先查模板作用域、再回退到表达式作用域而 JS 表达式-each、-filter等中的裸名只能看到表达式作用域详见 JavaScript 表达式指南。遇到坏输入时提前终止流水线mapshaper input.csv \ -calc N count() \ -if global.N 0 \ -print No records, exiting \ -stop \ -endif \ -o out.csv-calc表达式可通过简单赋值向global对象发布值-if/-stop据此保护流水线后续步骤。这适合上游数据出错时应当响亮失败而不是静默产出空输出的脚本场景。-if/-elif/-else/-endif/-stop属于控制流命令见 命令参考 的 Control Flow 一节。处理超大文件时增加堆内存mapshaper-xl 16gb counties_5m.shp -simplify 10% -o counties_5m.topojsonmapshaper-xl是一个包装脚本以更大的 Node 堆默认 8 GB可传参数覆盖启动 mapshaper。查看 bin/mapshaper-xl 的源码可见它会解析首个参数——形如16gb也接受16g、16的数字——并把它限制在 1–64 GB 范围内随后以--max-old-space-sizeGB*1000重新启动bin/mapshaper可执行文件。遇到 JavaScript heap out of memory 错误时就用它。延伸阅读命令参考 —— 每个命令与选项的完整说明JavaScript 表达式 ——-each、-filter、calc等使用的语法与上下文命令行工具指南 —— 安装、命令结构与命令文件详解Web 应用指南 —— 在浏览器中完成同样的工作流赞分享GISCLI数据可视化【免费下载链接】mapshaperTools for editing Shapefile, GeoJSON, TopoJSON and CSV files项目地址https://gitcode.com/gh_mirrors/ma/mapshaper点击查看免费下载相关推荐NocoDB数据导出终极指南从新手到专家的完整操作手册还在为数据迁移备份而烦恼NocoDB让你3分钟内轻松搞定专业级数据导出作为一款开源的NoSQL数据库可视化工具NocoDB的数据导出功能既强大又易用无论数据库低代码后端前端ToolJet 连接 MongoDB 数据源从连接配置到 18 种查询操作的完整指南ToolJet 连接 MongoDB 数据源从连接配置到 18 种查询操作的完整指南 本文基于 ToolJet 开源仓库 3.0.0 LTS 版本官方文档系低代码后端前端AI 应用MCP 服务QtScrcpy安卓投屏完全手册从基础连接到高级群控的完整指南QtScrcpy安卓投屏完全手册从基础连接到高级群控的完整指南 在移动设备成为工作生活核心的今天如何将安卓设备屏幕高效投射到电脑并实现精准控制已成为许多用桌面应用音视频上一篇libhv evpp 模块指南纯头文件 C 网络库把 hloop 封装成面向对象的事件循环与 TCP/UDP 类下一篇EeveeSpotify完全指南免费解锁Spotify高级功能的终极教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考