【问题标题】:Convert pixel location to latitude/longitude & vise versa将像素位置转换为纬度/经度,反之亦然
【发布时间】:2011-10-24 13:10:23
【问题描述】:

我需要将纬度经度值转换为像素位置,反之亦然。我找到了许多从 lat/lng->pixel 出发的解决方案,但在反面找不到任何东西。

几点说明:

  • 地图是固定大小的,没有缩放,没有图块。
  • 我不需要任何超级准确的东西,这并不重要。
  • 最好是墨卡托投影,但不是必需的。我实际上并没有显示结果。 (任何 2D 投影)
  • 我不能依赖任何基于网络的 API,即:没有 Google 地图

几乎任何编程语言的解决方案都可以,只要它不依赖于任何特定于平台的 API。

这是一个从 lat/lng->pixel 出发的例子:

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

【问题讨论】:

  • 您需要知道计算必须适用于哪个地图投影。您问题中的示例计算不适适用于墨卡托地图;它假定为equirectangular projection
  • 我对任何 2D 投影都持开放态度,equirectangular 将完美地满足我的需求。我没有将结果可视化,所以我不依赖于特定的投影。
  • 如果您没有显示任何内容,那么您到底在使用像素做什么(!)?
  • 做一些需要将 lat/lng 转换为 2D 平面的服务器端工作,它最终会在客户端可视化之前转换回 lat/lng。像素对于这个问题来说并不是一个非常准确的词,但它帮助我表达了我所需要的。
  • 但是(纬度,经度)已经构成二维坐标。您可以在头脑中将其称为“像素”(x=经度,y=纬度),而无需以任何方式更改它们,如果这有助于您可视化计算。

标签: java javascript actionscript-3 geolocation latitude-longitude


【解决方案1】:
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

对这个数学没有完全的信心,因为它是在我的脑海中完成的,但这些应该可以工作,只要确保先测试它们。

【讨论】:

  • 这可能很明显,我的数学技能已经生疏了。非常感谢,正是我需要的!
  • 数字是多少? 180、360等? Map_height 也是度数还是像素?
  • 也想知道约翰评论的答案
猜你喜欢
  • 2019-03-01
  • 2011-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-21
  • 1970-01-01
  • 2011-03-25
相关资源
最近更新 更多