在 Vega/d3 中计算 GEO 转换参数

Calculating GEO transformation params in Vega/d3

将此代码复制到 https://en.wikipedia.org/wiki/Special:GraphSandbox

geo transformation 的缩放和平移参数是手动设置的,以匹配图像的宽度和高度(见红色叉号)。我怎样才能使地理变换自动匹配整个图形大小(或者可能是一些信号值),而无需手动调整?

更新:翻译参数应该设置为图像宽度和高度的一半。请参阅下面的答案,中心应该设置为 [0,0]。对于等距柱状投影,图形大小应具有比例 2:1.

{
  "version": 2, "width": 800, "height": 400, "padding": 0,
  "data": [
    {
      "name": "data",
      "values": [
        {"lat":0, "lon":0},
        {"lat":90, "lon":-180},
        {"lat":-90, "lon":180}
      ]
    }
  ],
  "marks": [
    {
      "type": "image",
      "properties": {
        "enter": {
          "url": {"value": "wikirawupload:{{filepath:Earthmap1000x500compac.jpg|190}}"},
          "width": {"signal": "width"},
          "height": {"signal": "height"}
        }
      }
    },
    {
      "name": "points",
      "type": "symbol",
      "from": {
        "data": "data",
        "transform": [{
            "type": "geo",
            "projection": "equirectangular",
            "scale": 127,
            "center": [0,0],
            "translate": [400,200],
            "lon": "lon",
            "lat": "lat"
        }]
      },
      "properties": {
        "enter": {
          "x": {"field": "layout_x"},
          "y": {"field": "layout_y"},
          "fill": {"value": "#ff0000"},
          "size": {"value": 500},
          "shape": {"value": "cross"}
        }
      }
    }
  ]
}

找到答案(上面的例子已更新): "translate" 应该设置在图像的中心。另一方面,"center" 应设置为 [0,0]。 equirectangular 投影的 "scale" 需要设置为 width/(2*PI)