【发布时间】:2015-05-15 09:18:05
【问题描述】:
我有一张 OpenLayers 3 地图,我在上面显示了各种数据。其中之一是显示附近雷达检测到的船只。目前我将船显示为一个简单的矢量圆圈。我想将它显示为一个形状像船的矢量。
据我所知,我最好的选择是使用 *.png 图标,并执行以下操作:
style: new ol.style.Icon({
image: new ol.style.Icon(({
anchor: [0.5, 0.5],
anchorXUnits: 'fraction',
anchorYUnits: 'fraction',
opacity: 1,
scale: 1,
src: '/Content/images/boat.png',
rotation: 0
}))
});
这可行,但我想要一个在放大/缩小时不缩放的矢量。我目前针对某些不同数据的解决方案是显示一个矩形,但在缩放时会缩放:
var style = (function () {
function (feature, resolution) {
// font size
if (resolution > 0.4) var fontSize = '12px';
else var fontSize = '14px';
var temperature = feature.get('temperature') || '-';
temperature = temperature.replace(/,/g, '.');
return [new ol.style.Style({
fill: fill,
stroke: stroke,
text: new ol.style.Text({
font: 'bold ' + fontSize + ' helvetica,sans-serif',
text: Math.round(temperature * 100) / 100 + '°C',
fill: new ol.style.Fill({ color: '#000' })
}),
geometry: function (feature) {
var startingCoordinates = feature.getGeometry().getCoordinates();
var coordinates = [[
[startingCoordinates[0] + 0, startingCoordinates[1] + 0],
[startingCoordinates[0] + 33, startingCoordinates[1] + 0],
[startingCoordinates[0] + 33, startingCoordinates[1] + (-11.35)],
[startingCoordinates[0] + 0, startingCoordinates[1] + (-11.35)],
[startingCoordinates[0] + 0, startingCoordinates[1] + 0]
]];
return new ol.geom.Polygon(coordinates);
}
})]
}
})()
有没有比使用startingCoordinates +(恒定*分辨率)更好的解决方案?使用矢量与使用 png 是否存在显着的性能差异?谢谢
编辑:在咨询了我的几个同事之后,我基本上是想拥有这个http://openlayers.org/en/v3.5.0/examples/regularshape.html,但要使用自定义形状。
EDIT2:实际上更像这样http://dev.openlayers.org/examples/graphic-name.html'命名符号“闪电”、“矩形”和“教堂”是用户定义的。'
【问题讨论】:
-
使用图标有什么问题?图标的大小以像素为单位指定。放大或缩小时,该大小不会改变。所以我不明白你为什么说“这有效,但我想要一个在我放大/缩小时不缩放的矢量”。
-
嗯,使用图标是一种可能的解决方案,但是我必须为不同类型的对象制作大量图标,并为它们的状态制作不同的颜色。使用以编程方式生成的矢量图标,我可以根据它们是否处于危险之中或是否可能对其他人造成危险来改变它们的颜色。另外,我真的很想了解更多关于 ol3 的信息,而且我确信有更简单的方法可以做到这一点。
-
@erilem 如果您有兴趣,添加了(可能)更好的解释。
-
关于性能:根据我的经验,在渲染数千个标记时,光栅图标和矢量标记之间的差异变得显着。当然,这可能因客户端机器而异。关于您关于使用不可扩展 svg 的问题 - 我通过为每个标记生成一个 .svg 文件来解决这个问题。它可以通过脚本完成,但所有标记都必须存储在某个地方,因此它只是解决您的问题的部分解决方案。
标签: javascript vector openlayers-3