将纬度和经度转换为图像上的坐标
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.
或者如果你想按原样使用,你需要添加偏移量。
您的地图已关闭,悉尼的坐标完全错误。
更好的坐标:
我正在尝试将位置转换为图像上的点。我正在使用 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
};
}
这是我现在的结果。
编辑: 我最终听从了使用等距柱状投影而不是墨卡托投影的建议。 因此,在 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.
或者如果你想按原样使用,你需要添加偏移量。
您的地图已关闭,悉尼的坐标完全错误。
更好的坐标: