将纬度和经度转换为图像上的坐标

时间:2018-03-25 13:31:40

标签: javascript geolocation gps fabricjs latitude-longitude

我正在尝试将位置转换为图像上的某个点。我正在使用fabricjs绘制地图,这是我用地球图像制作的地图对象。我将图像转换为数组,其中land为1,0为水。 我的问题是我无法正确地将位置转换为一个点。 我正在使用这个有效的公式,但不适用于我正在使用的图像。

function getMapCoordsByLatAndLng(latitude, longitude, mapWidth, mapHeight){
    var x = (longitude + 180 )* (mapWidth / 360);
    var latRad = latitude* Math.PI /180;
    var mercN = Math.log(Math.tan(( Math.PI /4)+(latRad/2)));
    var y = (mapHeight / 2) - ( mapWidth *mercN/(2 * Math.PI));

    return {
        x: x,
        y: y
    };
}

这是我现在的结果。 enter image description here 我曾经使用过两个地方 - 洛杉矶和悉尼。如您所见,地图上的坐标不正确。 这是一个包含所有代码的fiddle

编辑: 我最后建议使用equirectangular投影而不是mercator one。 因此,用于在画布上找到坐标的algorythm发生了变化。

    function getMapCoords(latitude, longitude, mapWidth, mapHeight){
        return {
            x: parseInt((longitude + 180.0) * (mapWidth / 360.0)),
            y: parseInt(((latitude * -1.0) + 90.0) * (mapHeight / 180.0))
        }
    }

我已更新了我的代码,结果可以找到here

2 个答案:

答案 0 :(得分:1)

似乎图像已超过360度。你需要正确切片。 然后除以360.

或者,如果您想要原样使用它,则需要添加偏移量。

答案 1 :(得分:1)

您的地图已关闭,悉尼的坐标完全错误。

更好的坐标:

map