我有以下需要:
给定一个带有公制尺寸的多边形,我需要在一个球体的特定部分绘制它,然后以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 。
答案 0 :(得分:0)
我找到了实现我需要的方法,虽然我没有使用 d3-geo ,而是使用了 Turf.js 的组合和 geodesy 库。
就是这样(搜索" projectPlainOverGeoArea "):
https://gist.github.com/marinho/8a7e71b53c7da97f9579146742bb54de
代码执行以下操作:
计算距离地理矩形(我想要投射到的区域)的距离的宽度和高度。它使用大地测量球形/半正弦函数
通过使用从多边形矩形到地理矩形的比例距离,将多边形的每个路径的每个点投影到等效的地理坐标上。这里的结果是多边形,预期的度量与赤道线对齐。
使用草坪 transformRotate以左/下方为旋转旋转投影多边形
这似乎在我所做的测试中运作良好,但说实话我对此感到不满意,因为我觉得必须有一个更优雅的解决方案 d3-geo < / strong>或其他图书馆。