嗨我有我家的形象。顶视图。我想在点击图片时显示纬度等级信息。 我的图像左上方有1个纬度经度值。
如何在放大图像时保持纬度经度值。
答案 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;
}