OpenLayers вычисляет координаты смещения

Мне нужен способ рисования многоугольников с помощью openLayers на основе координат широты/длины, поворота и длины (в метрах).

Пример: «Я хочу провести линию из точки 1 (широта, долгота) в точку 2, где точка 2 рассчитывается исходя из того, что она расположена в 115 метрах с поворотом на 115 градусов от точки 1»

В картах Google есть простой способ расчета координат с помощью метода сферического.computeOffset(). Есть ли у OpenLayers что-то подобное? Или есть предложения других хороших библиотек с открытым исходным кодом, которые могут мне помочь?


person Gavin Homeplace    schedule 28.07.2015    source источник


Ответы (1)


Взгляните на https://github.com/openlayers/ol3/blob/master/src/ol/sphere/sphere.js#L256

Это не API, но его легко скопировать и изменить в вашем коде.

/**
 * Returns the coordinate at the given distance and bearing from `c1`.
 *
 * @param {ol.Coordinate} c1 The origin point (`[lon, lat]` in degrees).
 * @param {number} distance The great-circle distance between the origin
 *     point and the target point.
 * @param {number} bearing The bearing (in radians).
 * @return {ol.Coordinate} The target point.
 */
ol.Sphere.prototype.offset = function(c1, distance, bearing) {
  var lat1 = goog.math.toRadians(c1[1]);
  var lon1 = goog.math.toRadians(c1[0]);
  var dByR = distance / this.radius;
  var lat = Math.asin(
      Math.sin(lat1) * Math.cos(dByR) +
      Math.cos(lat1) * Math.sin(dByR) * Math.cos(bearing));
  var lon = lon1 + Math.atan2(
      Math.sin(bearing) * Math.sin(dByR) * Math.cos(lat1),
      Math.cos(dByR) - Math.sin(lat1) * Math.sin(lat));
  return [goog.math.toDegrees(lon), goog.math.toDegrees(lat)];
};
person Alvin Lindstam    schedule 29.07.2015
comment
Спасибо! Я проверю это в ближайшее время. Есть ли у вас какие-либо данные о затратах на выполнение этой клиентской части? Допустим, вычисление значений смещения широты/долготы 500 раз каждые 30 секунд. Я рассматриваю возможность переноса вычислений на серверную часть из-за потенциальных проблем с производительностью... - person Gavin Homeplace; 10.08.2015
comment
Вышеупомянутая функция не очень тяжелая, она очень легкая по сравнению с большинством других вещей, которые делает ваш экземпляр ol3. - person Alvin Lindstam; 10.08.2015