得到特定经度纬度图像的x坐标,反之亦然

时间:2010-11-21 07:47:02

标签: java image maps

嗨我有我家的形象。顶视图。我想在点击图片时显示纬度等级信息。 我的图像左上方有1个纬度经度值。

如何在放大图像时保持纬度经度值。

2 个答案:

答案 0 :(得分:1)

Lat / lon是一个测地坐标系(WGS84),这意味着它是围绕地球的弯曲坐标 - 图像是平的,这意味着通常你不能轻易地直接在两者之间。然而,你房子的图像可能是如此小的区域,计算误差会小到可以忽略不计(取决于你需要它)。

要执行您想要执行的操作,您需要找到“每像素度数”值,这意味着您需要知道图像顶部/左侧和右下角的纬度/经度。如果你有这个很简单。 这假设你在北半球

var degreesPerPixelX = bottomX - topX / imageWidth;
var degreesPerPixelY = bottomY - topY / imageHeight;

并且未显示事件处理程序( getEventOffsetFromImageXXX )。

function onClick (evt) {
    var x = getEventOffsetFromImageLeft(evt);
    var y = getEventOffsetFromImageTop(evt);

    var clickedLon = topX + x * degreesPerPixelX;
    var clickedLat = bottomY + y * degreesPerPixelY;
}

缩放级别将影响上/左下/右/右拉,因此计算需要相应调整。

当谷歌地图计算x / y为lon / lat时,他们内部始终首先将lon / lat转换为坐标系Spherical Mercator(EPSG:900913),在该系统中执行操作然后转换回来。然而,球形墨卡托具有固定的缩放级别,这可能不适合您。不过,这是非常值得一读的。

http://www.maptiler.org/google-maps-coordinates-tile-bounds-projection/

N.b。在Google Talk中, degreesPerPixel 被称为分辨率,单位米/像素 Meter 是球形墨卡托中的单位,大致可以转换为赤道上的一米,但远离你得到的更南/南的距离。

答案 1 :(得分:0)

任何人如何abt这段代码

function longToX(longitudeDegrees)
{
var longitude=longitudeDegrees-baselong;
longitude =degreesToRadians(longitude);
return (radius * longitude);
}
function latToY(latitudeDegrees)
{
var latitude=latitudeDegrees-baselat;
latitude =degreesToRadians(latitude);
var newy = radius/2.0 * 
Math.log( (1.0 + Math.sin(latitude)) /
(1.0 - Math.sin(latitude)) );
return newy;
}
function xToLong(xx)
{
var longRadians = xx/radius;
var longDegrees = radiansToDegrees(longRadians);
var rotations = Math.floor((longDegrees + 180)/360)
var longitude = longDegrees - (rotations * 360)
return longitude+baselong;
 }
 function yToLat(yo)
 {
var latitude =  (Math.PI/2) - (2 * Math.atan(Math.exp(-1.0 * yo /this.radius)));
return radiansToDegrees(latitude)+baselat;
}