получить координаты x y изображения определенной широты долготы и наоборот - PullRequest
1 голос
/ 21 ноября 2010

Привет У меня есть изображение моего дома. Вид сверху. Я хочу, чтобы информация о широте и широте отображалась при нажатии на изображение.У меня есть значение долготы широты для 1 левой верхней части изображения.

Также, как сохранить значения широты и долготы при уменьшении масштаба изображения.

Ответы [ 2 ]

1 голос
/ 21 ноября 2010

Шир. / Долг. - геодезическая система координат (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;
}

Уровень масштабирования будет влиять на верхний / левый нижний / правый lon / lat, поэтому вычисления должны корректироваться соответствующим образом.

Когда Карты Google вычисляют x / y в lon / lat, они внутренне ВСЕГДА сначала преобразовывают lon / lat в систему координат Spherical Mercator (EPSG: 900913), выполняют операции в этой системе, а затем выполняют обратное преобразование. Однако Spherical Mercator имеет фиксированные уровни масштабирования, что, вероятно, вам не подходит. Тем не менее, это очень стоящее чтение.

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

N.b. градусовПиксель в Google Talk называется разрешение , а единица измерения составляет метров на пиксель . Метр - это единица измерения в Сферическом Меркаторе, которая примерно равна метру на экваторе, но далеко от метра по мере продвижения на север / юг.

0 голосов
/ 22 ноября 2010

Кто-нибудь, как этот фрагмент кода

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;
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...