如何绘制指向点边缘的箭头
How to draw an arrow to the edge of a point
我有两个点,想在它们之间画一个箭头。我正在使用 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"
});
这一切都有效,除了当point 2的半径较大时,箭头指向pt2的中间并被Point隐藏。我想要的是让箭头指向 Point 的边缘。如果我在没有缩放的笛卡尔二维平面中,我可以按半径将箭头滑向 pt1(因为我知道角度)。不过pt1和pt2当然是在lat/lon,半径是像素单位。如何调整箭头的位置,使其指向正确的位置([可能大]点的边缘)?
通过使用 map.getExtent() 和 map.maxPx,您可以确定要从箭头末端处减去的数量。
map.getExtent()
将找到您的地图的可见边界框。
map.maxPx()
会给你地图像素的数量。
如果我们想从您的要素的纬度中找到半径的偏移量,您可以简单地...
var y = map.getExtent().top-map.getExtent().bottom;
var diffY = y / map.maxPx.y * feature.radius;
correctedArrowEnd = oldArrowEnd.y - diffY;
并对 x 值执行相同的操作。
希望对您有所帮助!
我有两个点,想在它们之间画一个箭头。我正在使用 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"
});
这一切都有效,除了当point 2的半径较大时,箭头指向pt2的中间并被Point隐藏。我想要的是让箭头指向 Point 的边缘。如果我在没有缩放的笛卡尔二维平面中,我可以按半径将箭头滑向 pt1(因为我知道角度)。不过pt1和pt2当然是在lat/lon,半径是像素单位。如何调整箭头的位置,使其指向正确的位置([可能大]点的边缘)?
通过使用 map.getExtent() 和 map.maxPx,您可以确定要从箭头末端处减去的数量。
map.getExtent()
将找到您的地图的可见边界框。
map.maxPx()
会给你地图像素的数量。 如果我们想从您的要素的纬度中找到半径的偏移量,您可以简单地...
var y = map.getExtent().top-map.getExtent().bottom;
var diffY = y / map.maxPx.y * feature.radius;
correctedArrowEnd = oldArrowEnd.y - diffY;
并对 x 值执行相同的操作。
希望对您有所帮助!