You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Vega-Lite地图中实现平面(非旋转)平移功能?

实现Vega-Lite地图的平面平移(无环绕旋转)

原代码通过修改投影的rotate和center属性实现平移,这会触发地球投影的环绕旋转效果。要实现平面平移(仅水平/垂直移动,无地图环绕),需要直接调整投影的translate参数(画布像素偏移),而非修改地理投影的旋转或中心参数。

以下是修改后的完整配置:

{
  "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
  "layer": [
    {
      "data": {
        "url": "data/world-110m.json",
        "format": {"type": "topojson", "feature": "countries"}
      },
      "mark": {"type": "geoshape", "fill": "#f0f0f0", "stroke": "white"}
    }
  ],
  "params": [
    {"name": "tx", "update": "width / 2"},
    {"name": "ty", "update": "height / 2"},
    {
      "name": "scale",
      "value": 150,
      "on": [
        {
          "events": {"type": "wheel", "consume": true},
          "update": "clamp(scale * pow(1.003, -event.deltaY * pow(16, event.deltaMode)), 100, 1200)"
        }
      ]
    },
    {
      "name": "startPos",
      "value": null,
      "on": [{"events": "pointerdown", "update": "xy()"}]
    },
    {
      "name": "dragPos",
      "value": null,
      "on": [
        {
          "events": "[pointerdown, window:pointerup] > window:pointermove",
          "update": "xy()"
        }
      ]
    },
    {
      "name": "deltaPos",
      "value": null,
      "on": [
        {
          "events": {"signal": "dragPos"},
          "update": "[dragPos[0] - startPos[0], dragPos[1] - startPos[1]]"
        }
      ]
    },
    {
      "name": "prevTx",
      "value": null,
      "on": [{"events": "pointerdown", "update": "tx"}]
    },
    {
      "name": "prevTy",
      "value": null,
      "on": [{"events": "pointerdown", "update": "ty"}]
    }
  ],
  "projection": {
    "type": "equalEarth",
    "scale": {"signal": "scale"},
    "translate": [
      {"signal": "prevTx + deltaPos[0]"},
      {"signal": "prevTy + deltaPos[1]"}
    ]
  },
  "height": "container",
  "width": "container"
}

关键改动说明:

  1. 移除投影旋转/中心相关参数:删除了rotateX、centerY、angles、cloned等用于操控投影地理属性的参数,避免触发地图环绕逻辑。
  2. 基于像素偏移的平移逻辑:
    • 通过startPos记录鼠标按下时的像素位置,dragPos记录拖动中的实时位置,计算出像素差值deltaPos
    • 直接将投影的translate参数设置为初始偏移量加上拖动差值,实现纯平面的像素级平移
  3. 保留原有缩放功能:缩放逻辑保持不变,仍通过调整scale参数实现,平移与缩放互不干扰。

这样修改后,地图平移时只会做水平/垂直的像素移动,不会出现地球环绕旋转的效果,和目标的平面平移表现一致。

内容的提问来源于stack exchange,提问作者Raghav Mittal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 02:35:55