Как я могу преобразовать пользовательский оверлей в Google Maps в учетную запись для проекции? - PullRequest
2 голосов
/ 30 июля 2010

Я разрабатываю приложение, которое использует Google Maps API v3. Я хочу сделать пользовательские оверлеи, которые представляют собой квадраты ровно 1000 км с каждой стороны (каждый оверлей на самом деле представляет собой прозрачный png 1000x1000, каждый пиксель представляет 1 кв. Км). Моя текущая реализация такова:

function PngOverlay(map,loc) {
    this._png = null;
    this._location = loc; //lat,lng of the square's center
    this.setMap(map);
}

PngOverlay.prototype = new google.maps.OverlayView();

PngOverlay.prototype.onAdd = function() {
    this._png = new Element('image',{ //using mootools
    'src': pngForLoc(this._location),
    'styles': {
        'width': 1000,
        'height': 1000,         
        'position': 'absolute'
    }
});

var panes = this.getPanes();
    panes.overlayLayer.appendChild(this._png);
}

PngOverlay.prototype.onRemove = function() {
    this._png.parentNode.removeChild(this._png);
    this._png = null;
}

PngOverlay.prototype.draw = function() {
    var dp = this.getProjection().fromLatLngToDivPixel(this._location);     
    var ps = this._png.getSize();

    var t = dp.y - (ps.y / 2);
    this._png.setStyle('top',t);

    var l = dp.x - (ps.x / 2);
    this._png.setStyle('left',l);
}

У меня такой вопрос: что мне нужно сделать, чтобы учесть проекцию Карт Google? Мое ограниченное понимание Mercator - то, что он сохраняет горизонтальное расстояние, но не вертикальное. Как я могу соответствующим образом преобразовать () мой png, чтобы учесть это?

1 Ответ

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

На самом деле информации недостаточно, но вы можете найти полезную библиотеку proj4js с открытым исходным кодом, поскольку она может выполнять различные преобразования проекций, например. К проекционной системе Сферического Меркатора от Google.

...