piapia123
zh

GeoJSON 转 SVG 地图

生成器

所有处理都在浏览器本地完成,数据不上传服务器

预览改上面的参数,这里立刻重画
SVG 源码

把 GeoJSON 粘进来,立刻画成一张 SVG 地图,可以复制源码或下载 `.svg`。支持 Point / LineString / Polygon 以及它们的 Multi 形式,也接受 Feature、FeatureCollection 与 GeometryCollection。坐标是 `[经度, 纬度]`。 ⚠️ 纬度的 y 轴翻过来了。纬度向北变大,而 SVG 的 y 向下变大 —— 不翻的话整张地图上下颠倒,而它看起来仍然「像一张地图」(海洋还是海洋),所以这个错很难靠肉眼发现。这里一律翻过来,北半球的点落在画面上方。 三种投影:等距圆柱(最简单,高纬度会横向拉长)、墨卡托(网页地图用的那个,局部形状对了但高纬度失真)、直接用经纬度(非等比缩放,把画布填满,会拉伸)。 ⚠️ 坐标点有上限。一份高精度国界 GeoJSON 能有几十万个点,全画出来会把标签页卡死,而它不报错、只是越来越慢。所以超过阈值直接报错说明,而不是硬撑着算。 图下方会给出要素数、坐标点数与包围盒 —— 数据对不对,看一眼包围盒就知道。

功能

  • 粘贴 GeoJSON,实时画成 SVG 地图
  • 支持 Point / LineString / Polygon 与它们的 Multi 形式
  • Feature、FeatureCollection、GeometryCollection 都认
  • ⚠️ 纬度 y 轴翻转,北半球在上(不翻会上下颠倒,而它看起来仍像地图)
  • 三种投影:等距圆柱 / 墨卡托 / 直接用经纬度
  • 描边色、填充色、线宽可调;可显示顶点与经纬网格
  • 给出要素数、坐标点数与包围盒
  • ⚠️ 坐标点超过上限时报错说明,不会卡死标签页
  • 可复制 SVG 源码或下载 .svg
  • 全部在浏览器本地完成,不上传任何内容

使用方法

  1. 把 GeoJSON 粘进输入框
  2. 选投影,按需要改颜色、线宽
  3. 勾选顶点或经纬网格
  4. 看预览与下方的要素数、包围盒;复制源码或下载 .svg

常见问题

为什么地图要上下翻转 y 轴?
因为纬度向北变大,而 SVG 的 y 向下变大,两者方向相反。不翻的话整张地图会上下颠倒 —— 而它看起来仍然像一张地图(海洋还是海洋、陆地还是陆地),所以这个错误很难靠肉眼发现。这里的做法是把投影后的 y 取负,北半球的点自然落在画面上方。
墨卡托和等距圆柱有什么区别?
等距圆柱直接拿经纬度当平面坐标(`x = 经度`、`y = -纬度`),最简单,但纬度高时横向被拉长(格陵兰会显得巨大)。墨卡托对纬度做了非线性变换(`y = ln(tan(π/4 + φ/2))`),局部形状更对 —— 网页地图用它就是因为这一点 —— 但同样有高纬度失真,且纬度要夹到 ±85.0511°(再往上会趋于无穷)。范围小的图两者差别看不出来。
为什么我的 GeoJSON 报「坐标点太多」?
因为它超过了两万个坐标点。一份高精度的国界或海岸线数据动辄几十万个点,全画成 `<path>` 会把标签页卡死 —— 而它不报错,只是越用越慢,很难查。所以这里设了一个上限,超过就明确报错,让你先简化几何(比如用 mapshaper 之类的工具降精度)再试。
出来的图能直接当图片用吗?
能。复制的是带 `xmlns` 的完整 SVG,可以存成 `.svg` 文件、插进网页,或拖进 Illustrator / Figma 继续改。它是矢量的,放大不糊。

相关工具