4

我需要将纬度经度值转换为像素位置以及相反。我发现很多解决方案都是从lat/lng-> pixel,但是却找不到相反的东西。将像素位置转换为经度和纬度

有两点要注意:

  • 的地图大小是固定的,没有变焦,没有砖。
  • 我不需要任何超级准确的东西,它并不重要。
  • 最好是墨卡托投影,但不是必需的。我实际上并没有显示结果。 (任何2D投影)
  • 我不能依赖于任何基于Web的API的,即:没有谷歌地图

一个在几乎任何编程语言的解决办法是罚款,只要它不依赖于任何平台特定的API。

这是从拉丁语去一个例子/ lng->像素:

var y = Math.round(((-1 * lat) + 90) * (this.MAP_HEIGHT/180)); 
var x = Math.round((lng + 180) * (this.MAP_WIDTH/360)); 
+1

您需要知道计算必须为哪个映射投影。您的问题中的示例计算将不适用于墨卡托地图;它假设一个[equirectangular projection](http://en.wikipedia.org/wiki/Equirectangular_projection)。 –

+0

我开放给任何2D投影,equirectangular将完全满足我的需求。我没有看到结果,所以我没有被绑定到特定的预测。 –

+0

如果你没有显示任何东西,那么你首先使用像素是什么(!)? –

回答

5
var y = Math.round(((-1 * lat) + 90) * (this.MAP_HEIGHT/180)); 
var x = Math.round((lng + 180) * (this.MAP_WIDTH/360)); 

使用一些代数,我想出了:

var lat=(y/(this.MAP_HEIGHT/180)-90)/-1 
var lng = x/(this.MAP_WIDTH/360)-180 

不是在数学完全有信心因为它是在我的脑海中完成的,但这些都应该起作用,只要确保先测试它们。

+0

+1,用于尝试应该显而易见的事物! –

+0

这可能很明显,我的数学技能是生锈的。非常感谢,正是我需要的! –

+2

虽然数字是多少? 180,360等? Map_height的度数还是像素? –