我正在尝试将位置转换为图像上的某个点。我正在使用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
};
}
这是我现在的结果。 我曾经使用过两个地方 - 洛杉矶和悉尼。如您所见,地图上的坐标不正确。 这是一个包含所有代码的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。