转换两个旋转系统之间的坐标

时间:2015-12-22 09:34:08

标签: coordinates openlayers-3 coordinate-transformation

我有一张坐标为米的地图和一个带有像素坐标的叠加建筑图:

Sample map with plan overlay

我已经知道比例因子,如果它们对齐,我能够转换两个系统之间的坐标(即叠加图像完全水平而没有旋转) - > 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];
    };

1 个答案:

答案 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);
}

这样做,地图是否旋转无关紧要。

相关问题