将纬度/纬度转换为像素坐标
Convert lat/lon to pixel coordinate?
我正在尝试将纬度/纬度对转换为像素坐标。我找到了这个墨卡托投影,但我不明白代码。变量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] 墨卡托投影上指向像素 (x,y) 的隐蔽纬度/经度
这些变量从何而来
选择这些变量以将计算的坐标与地图的背景图像进行匹配。如果地图的投影参数已知,则可以对其进行计算。但我相信它们更有可能是通过反复试验获得的。
如何计算墨卡托投影
如果您想要一种更通用的方法来描述给定(非横向)墨卡托地图显示的世界部分,您可以使用以下代码:
// 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
。但是由于省略哪个的选择有点武断,我觉得上面的代码是最对称的描述事物的方式。
以下是从您找到的函数中获取返回的变量 X 和 Y 的方法......
var xy=get_xy(56,34);
var X=xy.x;
var Y=xy.y;
现在 X 和 Y 包含坐标。
相关文章:
- 如何通过溢出来判断元素被切断了多少像素:隐藏在父级上
- 点击facebook像素跟踪注册(JS/JQUERY代码)
- 点击(右键点击)使用传单地图库获取图像覆盖的像素坐标
- 如何使线条的边缘像素保持半透明
- 画布:逐像素绘制图像并请求动画帧计时
- 如何's css标记"-webkit最小设备像素比”;在Javascript中实现
- javascript mootools平滑滚动'x'像素数量
- 逐像素碰撞检测弹球
- 获取图像的平均外部像素颜色
- 如何根据分辨率添加像素
- 仅当窗口宽度>940像素,无论是通过页面加载还是调整大小
- 使用画布在秒内逐像素显示图片
- JS/CSS:如何在向下滚动超过1200像素(高度)后更改z索引值
- 获取以屏幕像素为单位的旋转SVG元素的边界
- 如何将像素添加到元素的当前位置
- 传单:如何在变焦后,在变焦开始之前获取纬度液化天然气的像素位置
- 如何将图像像素转换为纬度和液化天然气中的相同位置以供谷歌地图使用
- 将纬度/纬度转换为像素坐标
- 将像素位置转换为纬度/经度&反之亦然
- 将纬度/长度转换为像素X&Y坐标