У меня есть два очка и вы хотите нарисовать стрелу между ними. Я использую OpenLayers2. Код, который создает точки выглядит следующим образом:Как нарисовать стрелку к краю точки
var pt = new OpenLayers.Symbolizer.Point({
fillColor: color,
....[other settings here]....
pointRadius: radius
});
И я создаю ломаную линию между ними, а затем создать стрелку в точке 2.
var angle = this.calculateAngle(pt1[0], pt1[1], pt2[0], pt2[1]);
var point = new OpenLayers.Geometry.Point(pt2[0], pt2[1]);
point.transform(coreMap.Map.SOURCE_PROJECTION,
coreMap.Map.DESTINATION_PROJECTION);
var featureArrow = new OpenLayers.Feature.Vector(point);
OpenLayers.Renderer.symbol.arrow = [0,0, 0,arrowWidth, (arrowWidth/2),(arrowWidth - 7), arrowWidth,arrowWidth, 0,arrowWidth];
featureArrow.style = new OpenLayers.Symbolizer.Point({
strokeWidth: 1,
graphicName: "arrow",
...[other settings here]...
rotation: angle,
strokeLinecap: "round"
});
Это все работает, за исключением того, когда радиус пункта 2 большой, то стрелка указывает на середину pt2 и скрыта Точкой. Я хочу, чтобы стрелка указывала на край Точки. Если бы я был в картезианской 2D-плоскости без масштабирования, я мог бы просто сдвинуть стрелку в направлении pt1 (так как я знаю угол) по радиусу. Однако pt1 и pt2, конечно, находятся в lat/lon, а радиус - в пикселях. Как настроить расположение стрелки так, чтобы она указывала на правильное местоположение (край [возможно большой] точки)?
Спасибо за ответ; отлично. –