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

Converting Latitude and Longitude to coordinates on image

我正在尝试将位置转换为图像上的点。我正在使用 fabricjs 绘制地图,这是我用地球图像制作的地图对象。我将图像转换为数组,其中土地是 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
    };
}

这是我现在的结果。 我使用了两个地点——洛杉矶和悉尼。如您所见,地图上的坐标不正确。 这是包含所有代码的 fiddle

编辑: 我最终听从了使用等距柱状投影而不是墨卡托投影的建议。 因此,在 canvas 上查找坐标的算法发生了变化。

    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

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

或者如果你想按原样使用,你需要添加偏移量。

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

更好的坐标: