将纬度和经度转换为图像上的坐标
Posted
技术标签:
【中文标题】将纬度和经度转换为图像上的坐标【英文标题】:Converting Latitude and Longitude to coordinates on image 【发布时间】:2018-03-25 13:31:39 【问题描述】:我正在尝试将位置转换为图像上的一个点。我正在使用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。
编辑: 我最终遵循了使用等距矩形投影而不是墨卡托投影的建议。 因此,在画布上查找坐标的算法发生了变化。
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找到。
【问题讨论】:
结果有什么问题?你期望的输出是什么? @H.B.我编辑了问题,添加了图像。地图上的坐标是错误的。 【参考方案1】:您的地图已关闭,悉尼的坐标完全错误。
更好的坐标:
【讨论】:
即使我修正了原始图像,悉尼仍然会出现在海洋中。 你确定你的地图是墨卡托投影吗?我怀疑来自其他 SO 问题的代码是错误的。 那一定是这样,我会找一个正确的图像作为基础。 @nikksan:我个人建议使用 equirectangular 投影,转换坐标的代码变得非常简单:)【参考方案2】:似乎图像有超过 360 度。你需要正确地切片它。 然后除以 360。
或者如果你想按原样使用它,你需要添加偏移量。
【讨论】:
以上是关于将纬度和经度转换为图像上的坐标的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 cartopy 将显示坐标转换为地理坐标(纬度、经度)?
如何将 EPSG:6249 坐标转换为“标准”纬度/经度坐标?