使用d3-geo

时间:2018-01-17 18:05:23

标签: d3.js geojson geo geodesic-sphere

我有以下需要:

给定一个带有公制尺寸的多边形,我需要在一个球体的特定部分绘制它,然后以GeoJSON格式输出它。

另外,"球体的一部分"是一个由4个点组成的矩形,可以相对于赤道线旋转。

作为一个例子,想象一个带有矩形的MultiPolygon,就像这样,数字以米为单位:

[
  [
    [
      [0, 10],
      [0, 0],
      [20, 0],
      [20, 10]
    ]
  ]
]

如您所见,这种多边形与轴成直角对齐。

然后,给定球体的任何矩形区域,例如下面的那个:

{
    leftTop: [ 13.377948, 52.521293 ],
    leftBottom: [ 13.377962, 52.521250 ],
    rightBottom: [ 13.378174, 52.521275 ],
    rightTop: [ 13.378161, 52.521318 ]
}

我想在这个区域翻译,旋转和调整多边形。

所以, d3-geo 包似乎提供了适当的工具,例如projection与scale / translate / rotate / fitExtent和invert的组合等等。但我无法找到合适的组合来处理旋转的矩形区域。

由于网络中绝大多数d3-geo的例子都是从GeoJSON到像素或者使用d3作为SVG渲染引擎等等,我很难将我的需求抽象为函数调用。

有没有人帮我解决这个问题?我想在几何/三角函数中必须有一个适当的术语来描述这样的计算。

我已经习惯了自己"在一个测地区投射一个平面多边形"但我想必须有一个更好更具体的术语。至少如果我找到这样的术语,那将是一个好的开始。

更新

我编写了一些关于我想要实现的内容的插图。请记住,尽管它们是可视图像,但就我而言,我并不是在寻找可视化渲染工具,因为我只是将数组/对象转换为GeoJSON

  1. 我要投影的多边形。请注意,浅灰色框显示此多边形位于其上的虚拟区域,因此,当多边形位于中间时,它也应投影到地理区域的中间。
  2. Polygon over 2D plan

    1. 大地水准面上的矩形区域(本例中为地球)。注意指向参考角的红色标签,它应指示旋转。
    2. Geographic feature where the polygon must be fit in

      1. 结果,多边形投影到给定区域(实际上是GeoJSON格式,具有相应的坐标)。
      2. Result

1 个答案:

答案 0 :(得分:0)

我找到了实现我需要的方法,虽然我没有使用 d3-geo ,而是使用了 Turf.js 的组合和 geodesy 库。

就是这样(搜索" projectPlainOverGeoArea "):

https://gist.github.com/marinho/8a7e71b53c7da97f9579146742bb54de

代码执行以下操作:

  1. 计算距离地理矩形(我想要投射到的区域)的距离的宽度和高度。它使用大地测量球形/半正弦函数

  2. 通过使用从多边形矩形到地理矩形的比例距离,将多边形的每个路径的每个点投影到等效的地理坐标上。这里的结果是多边形,预期的度量与赤道线对齐。

  3. 使用草坪 transformRotate以左/下方为旋转旋转投影多边形

  4. 这似乎在我所做的测试中运作良好,但说实话我对此感到不满意,因为我觉得必须有一个更优雅的解决方案 d3-geo < / strong>或其他图书馆。