当前位置: 首页 > 面试题库 >

将纬度/经度转换为像素坐标?

满伟彦
2023-03-14
问题内容

我正在尝试将经纬度对转换为像素坐标。我发现了这种墨卡托投影,但我不理解代码。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}
}

问题答案:

这些变量从何而来

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

如何计算墨卡托投影

如果要使用更通用的方法来描述给定(而非横向)墨卡托地图]显示的世界部分,则可以使用以下代码:

// 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);
}

关于宽高比

的设置$xFactor !=$yFactor会产生一种拉伸的墨卡托投影。这不再是保形的(保持角度)。如果想要一个真正的墨卡托投影,则可以忽略前六个变量分配中的任何一个,即定义边界框的那些或描述结果贴图的大小的那些,然后再使用一些计算选择令人满意的值$xFactor==$yFactor。但是由于忽略的选择是任意的,因此我认为上述代码是描述事物的最对称方式。



 类似资料:
  • 问题内容: 我具有纽约市纽约市的纬度/经度值;40.7560540,-73.9869510和地球的平面图像,即1000px×446px。 我希望能够使用Javascript将纬度/经度转换为X,Y坐标,该点将反映该位置。 因此,图像左上角的X,Y坐标将是;289、111 注意事项: 不用担心要使用哪种投影的问题,可以自己做假设,也可以按照自己知道的可行的方法进行操作 X,Y可以形成图像的任意一角

  • 我有一张以色列地图。 我需要创建一个获得两个双参数(经度和纬度)的函数,该函数应该在地图图像中的那个区域上画一个小圆圈。 我有以下关于地图的信息: null 截图: https://gyazo.com/5a19dece37ebace496c6b8d68eb9ec3c

  • 问题内容: 我需要将纬度经度值转换为像素位置以及相反的操作。我发现许多解决方案都来自lat / lng-> pixel,但反之则找不到任何东西。 一些注意事项: 地图是固定大小,无缩放,无图块。 我不需要任何超级准确的信息,这并不重要。 最好是墨卡托投影,但不是必需的。我实际上并没有显示结果。(任何2D投影) 我不能依赖任何基于Web的API,即:没有Google Maps 只要不依赖任何平台特定

  • 我的表有两个浮动列,分别表示纬度和经度坐标。 我想使用PostGIS的ST_DWithin查找距离给定点一定距离内的所有记录。 的签名期望前两个参数是几何体或地理数据类型,因此我非常确定解决方案是将纬度/液化天然气坐标转换为地理坐标,但我无法让它工作。 以下是不起作用的: 我得到这个错误: 错误:函数st_geogfromtext(未知)不存在 第1行:从ST_DWithin(ST_GeogFro

  • 问题内容: 请有人可以发布SQL函数将东/北转换为经度/纬度。我知道它非常复杂,但是我还没有找到任何在T-SQL中对其进行过文档记录的人。 此javascript代码有效,但我在将其转换为SQL时遇到了麻烦。 我有16,000个坐标,需要将它们全部转换为纬度/经度。 到目前为止,这是我所掌握的,但是并没有超越while循环。 问题答案: 我最终使用了以下javascript函数来转换值。我知道这不

  • 我已经看到了不同的实现方法,还有一些关于堆栈溢出的问题--我已经试用了不同的代码片段,虽然我得到了像素的正确经度,但纬度总是偏离的--似乎变得更合理了。 我需要公式,以考虑图像大小,宽度等。 我试过这段代码: 当使用原始代码时,如果纬度值为正,则返回一个负点,所以我稍微修改了它,并用极端纬度进行测试--应该是0点和766点,它工作得很好。然而,当我尝试一个不同的纬度值,例如:58.07(正好在英国