使用已知坐标

时间:2017-12-06 15:24:51

标签: openlayers openlayers-3

在使用OpenLayers 4.5.0的JavaScript应用程序中,我在地图中有一个线串和一个点。该点位于线串“上”。

现在,我想将点移动到线串上的另一个位置,同时在给定时间段内沿着线放置动画。

这是我所拥有的信息,即我正在使用的信息:

  • 我有点的坐标
  • 我有将点移动到
  • 的坐标
  • 我有线串的几何
  • 我知道两个坐标(开始和结束)都在线上

我也很清楚如何实现动画。我不知道的是如何在制作动画的同时获得该线的位置。

我知道方法ol.geom.LineString.prototype.getCoordinateAt,它允许你获得给定分数的线串的坐标。我认为我需要的是相反的:我有坐标。 我需要开头和结尾的分数。如果我有那些​​,我将能够在动画时计算两者之间的分数。

有没有办法用OpenLayers来实现这个目标?

更新

这是一张代表我想要做的事情的照片。下面有更多解释。

Preview of what I want to do

  1. 我有一个字符串和点。该点在线上(不在顶点)
  2. 我想要一个新的位置,我想移动点
  3. 我想在动画中沿着线移动点。我画的箭是我想要点移动的路径。换句话说,它是从该点的原始位置及其目的地开始的线串的子部分。
  4. 如果我知道有问题的线串的2个分数(开头和结尾的那些分数),那么我可以在动画时检索分数。例如,如果我知道开头是0.2并且结束0.8,那么我知道如果我在动画中有10%,那么我需要将我的观点显示为0.26。

    我希望这有助于理解我想要做的事情。

1 个答案:

答案 0 :(得分:0)

我已经能够使用 ol-ext 库完成我需要做的事情,更具体地说是使用splitAt方法。这是我使用的配方:

首先,对于我所拥有的每一个协调,我必须确保它们“捕捉”到该线。我是在OpenLayers中使用getClosestPoint方法完成的,如下所示:

// Get "closest" start and end coordinates for segment computing
var closestStartCoordinate = lineString.getClosestPoint(startCoordinate);
var closestEndCoordinate = lineString.getClosestPoint(endCoordinate);

然后,如果我使用 splitAt 方法,我会得到多个段。我需要的是起始坐标等于closestStartCoordinate且结束坐标等于closestEndCoordinate的那个。

就是这样!我有我的片段。当动画正在进行中时,我可以使用段中的getCoordinateAt方法,具体取决于动画的运行时间,以便在我的点移动过程中获取位置。

感谢@pavlos指出这一点。感谢ol-ext库的作者!