【问题标题】:Convert lat/lon to pixel coordinate?将纬度/经度转换为像素坐标?
【发布时间】:2013-09-21 05:54:34
【问题描述】:

我正在尝试将纬度/经度对转换为像素坐标。我找到了这个墨卡托投影,但我不明白代码。什么是因子,x_adj,y_adj 变量? 当我在没有这些常量的情况下运行代码时,我的纬度/经度对不在我的地图上,并且 x 和 y 像素坐标不是我想要的。

function get_xy(lat, lng)
{
var mapWidth=2058;
var mapHeight=1746;
var factor=.404;
var x_adj=-391;
var y_adj=37;
var x = (mapWidth*(180+lng)/360)%mapWidth+(mapWidth/2);
var latRad = lat*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*factor+x_adj,y: y*factor+y_adj}
}

来源:http://webdesignerwall.com/tutorials/interactive-world-javascript-map/comment-page-1?replytocom=103225

[2]Covert latitude/longitude point to a pixels (x,y) on mercator projection

【问题讨论】:

    标签: javascript geometry trigonometry projection


    【解决方案1】:

    下面是如何从您找到的函数中获取返回的变量 X 和 Y...

    var xy=get_xy(56,34);
    
    var X=xy.x;
    
    var Y=xy.y;
    

    现在 X 和 Y 包含坐标。

    【讨论】:

      【解决方案2】:

      这些变量是从哪里来的

      选择这些变量以将计算出的坐标与地图的背景图像相匹配。如果地图的投影参数已知,则可以计算它们。但我相信它们更有可能是通过反复试验获得的。

      如何计算墨卡托投影

      如果您想要更通用的方法来描述给定(非横向)Mercator map 显示的世界部分,您可以使用以下代码:

      // This map would show Germany:
      $south = deg2rad(47.2);
      $north = deg2rad(55.2);
      $west = deg2rad(5.8);
      $east = deg2rad(15.2);
      
      // This also controls the aspect ratio of the projection
      $width = 1000;
      $height = 1500;
      
      // Formula for mercator projection y coordinate:
      function mercY($lat) { return log(tan($lat/2 + M_PI/4)); }
      
      // Some constants to relate chosen area to screen coordinates
      $ymin = mercY($south);
      $ymax = mercY($north);
      $xFactor = $width/($east - $west);
      $yFactor = $height/($ymax - $ymin);
      
      function mapProject($lat, $lon) { // both in radians, use deg2rad if neccessary
        global $xFactor, $yFactor, $west, $ymax;
        $x = $lon;
        $y = mercY($lat);
        $x = ($x - $west)*$xFactor;
        $y = ($ymax - $y)*$yFactor; // y points south
        return array($x, $y);
      }
      

      此代码的演示运行可在http://ideone.com/05OhG6 获得。

      关于纵横比

      $xFactor != $yFactor 的设置会产生一种拉伸的墨卡托投影。这不再是保形的(保角)。如果想要一个真正的墨卡托投影,可以省略前六个变量分配中的任何一个,即那些定义边界框或描述结果地图大小的变量,然后使用一些计算来选择它满足$xFactor == $yFactor。但是由于省略的选择有点随意,我觉得上面的代码是描述事物的最对称的方式。

      【讨论】:

      • @Phpdna:您知道国家边界还有其他来源,基于政治定义而不是凹壳?你可以试试WDBWVSWBS(感谢gis.stackexchange.com/q/17435),SALB(感谢gis.stackexchange.com/a/512),OSM,...
      • 这工作正常,但不适用于使用“谷歌墨卡托投影”的openstreet地图或谷歌地图,这似乎有点不同,所以点被绘制但不完全在正确的位置......
      • 嗨,有人能告诉我如何将 Pixel 转换回 lan/lon 吗?谢谢你:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多