gpt4 book ai didi

javascript - 如何在 OpenLayers 3 中通过 map 边缘绘制测地线?

转载 作者:行者123 更新时间:2023-12-02 14:30:45 24 4
gpt4 key购买 nike

我正在尝试用 arc.js 绘制测地线。当点之间的经度差小于 180 时,它可以正常工作。否则,例如经度为 179 和 -179,OpenLayers 绘制距离最大的线。

所以我找到了直线的解决方案:

  1. 检查经度差是否超过 180
  2. 计算所需直线与 map 边缘的交点(查找经度为 180 或 -180 的临时点)
  3. 使用数组[[firstPoint, temporaryPoint], [temporaryPoint, secondaryPoint]]创建ol.geom.MultiLineString
  4. 使用线条创建特征

而且效果很好。但是用 arc.js 来制作测地线的这个技巧是相当复杂的。 。主要问题在于交集的计算。

enter image description here

我应该在 OpenLayers 文档或 examples 中找到解决方案但没有任何 map 边缘相交的例子。

最佳答案

经过几个小时的调查,我找到了解决方案。这看起来像是一个技巧,但效果很好。

首先这是来自 arc.js documentation 的原始代码:

var start = { x: currentPoint.longitude, y: currentPoint.latitude },
end = { x: nextPoint.longitude, y: nextPoint.latitude },
generator = new arc.GreatCircle(start, end),
arcLine = generator.Arc(1000 ,{offset:10});

主要问题是arc.js无法计算相交线的坐标International Date Line 。所以我决定在计算 Great Circle 之前将点移动到一个图 block 中.

我必须找到经度偏移:

var dateLineOffset = 180 - currentPoint.longitude;

它也可以是nextPoint.longitude。取决于左边的点。

之后您可以使用 arc.js生成坐标:

var start = { x: -180, y: currentPoint.latitude },
end = { x: nextPoint.longitude + dateLineOffset, y: nextPoint.latitude },
generator = new arc.GreatCircle(start, end),
arcLine = generator.Arc(1000 ,{offset:10});

然后您需要迭代生成的坐标并修复偏移。就我而言,我使用了 map

var coordinatesWithOffset = arcLine.geometries[0].coords,
geodesicLineCoordinates = coordinatesWithOffset.map(function(coord) {
return ol.proj.fromLonLat([coord[0] - dateLineOffset, coord[1]]);
}),
geodesicLine = ol.geom.LineString(geodesicLineCoordinates);

就是这样。 geodesicLine 将包含正确的坐标。

enter image description here

关于javascript - 如何在 OpenLayers 3 中通过 map 边缘绘制测地线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37856572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com