我有一张坐标为米的地图和一个带有像素坐标的叠加建筑图:
我已经知道比例因子,如果它们对齐,我能够转换两个系统之间的坐标(即叠加图像完全水平而没有旋转) - > conversionfactor(=地图上一米内的叠加像素数)
MAPx(ImageX) = centerpointX + ImageX * conversionfactor
MAPy(ImageY) = centerpointY + ImageY * conversionfactor
如果旋转叠加层,假设我有上面的公式并且我想要包含旋转角度,我如何在坐标之间进行转换?
编辑(@tsauerwein):以下是您要求的标记样式:
planStyle = function(feature, resolution){
var style = new ol.style.Style({
image: new ol.style.Icon({
src: feature.dataURL,
scale: feature.resolution / resolution,
rotateWithView: true,
rotation: feature.rotation * (Math.PI / 180),
anchor: [.5, .5],
anchorXUnits: 'fraction',
anchorYUnits: 'fraction',
opacity: feature.opacity
})
})
return [style];
};
答案 0 :(得分:1)
假设您正在使用ol.source.ImageStatic
:配置图层时,您具有图像的大小(例如,宽度= 500,高度= 200)以及此图像覆盖坐标的范围。
现在,如果你有一个坐标,你可以很容易地检查坐标是否在图像范围内(ol.extent.containsXY(extent, x, y)
)。然后,您还可以将真实世界坐标转换为像素坐标:
// image size
var width = 500;
var height = 250;
// image extent
var extent = [2000, 0, 4000, 1000];
// coordinates
var x = 3000;
var y = 500;
if (ol.extent.containsXY(extent, x, y)) {
var pixelX = width * (x - extent[0]) / ol.extent.getWidth(extent);
var pixelY = height * (y - extent[1]) / ol.extent.getHeight(extent);
}
这样做,地图是否旋转无关紧要。