Каков хороший алгоритм для отображения координат GPS на местоположения экрана при использовании карт Google? - PullRequest
0 голосов
/ 20 января 2009

Мне нужен алгоритм, который преобразует координату GPS в местоположение на экране отображаемой карты Google. Я думаю, это было бы просто: получить координаты для четырех углов отображаемой карты, найти дифференциал и создать коэффициент масштабирования для местоположения пикселя на экране. Это правильно или я что-то упустил. Я знаю, что это было сделано до тошноты, но я надеюсь, что смогу услышать от кого-то, кто успешно его реализовал или имеет ресурс для его реализации.

Ответы [ 4 ]

2 голосов
/ 26 марта 2009

В основном вам нужен код для проекции поперечной проекции Меркатора (который используется картами Google и другими). Вот фрагмент кода C #, который я использовал в своем программном обеспечении Kosmos :

public Point2<int> ConvertMapToViewCoords (Point2<double> mapCoords)
{
    double x = (mapCoords.X - MapPosition.Longitude) / resolution;
    double y = Math.Log (Math.Tan (Math.PI*(0.25 + mapCoords.Y/360)))*u180dPiResolution;

    return new Point2<int> ((int)(x + viewWidthHalf), (int)((y0 - y) + viewHeightHalf));
}

используемые переменные:

double resolution = 360.0 / (Math.Pow (2, MapPosition.ZoomFactor) * 256);
double u180dPiResolution = 40.7436654315252 * Math.Pow(2, MapPosition.ZoomFactor);
double y0 = Math.Log(Math.Tan(Math.PI * (0.25 + MapPosition.Latitude / 360))) * u180dPiResolution;
float viewWidthHalf = ViewWidth / 2.0f;
float viewHeightHalf = ViewHeight / 2.0f;

ZoomFactor - это уровень масштабирования Google (см. http://laudontech.com/GISBlog/?p=28). Кстати, один и тот же код работает для OpenStreetMap, Yahoo Maps и т. Д., Поскольку все они используют одну и ту же систему проецирования и листов.

1 голос
/ 20 января 2009

API Карт Google позволяет вам делать подобные вещи.

Вот некоторый код JS, который я написал с использованием API, который выполняет нечто подобное:

var map = new GMap2(document.getElementById("map"));

//...

var location = new GLatLng(37.771008, -122.41175);
map.setCenter(location);

var marker = new GMarker(location);
var overlay_caption = "Our location!";

GEvent.addListener(marker, "click", function() {
  marker.openInfoWindowHtml(overlay_caption);
});

map.addOverlay(marker);
marker.openInfoWindowHtml(overlay_caption);
0 голосов
/ 12 мая 2009

Если вам нужна пиксельная координата положения широты / долготы текущего экземпляра Google Maps, вы можете использовать функцию fromLatLngToDivPixel () .

Предполагается, что карта является экземпляром инициализированного GMap2:

var location = new GLatLng(37.771008, -122.41175);
var point = map.fromLatLngToDivPixel(location);

alert("X: " + point.x + ", Y: " + point.y);

В зависимости от ваших потребностей см. Также fromLatLngToContainerPixel .

0 голосов
/ 20 января 2009

Вы также можете перенаправить страницу на новую карту с таким URL:

http://maps.google.com/maps?q=37.771008,+-122.41175+(You+can+insert+your+text+here)&iwloc=A&hl=en

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...