В данном посте я расскажу о своем опыте использования Google Maps JS API и его внедрение в мобильную версию сайта с весьма крупной посещаемостью.
Совсем недавно на работе пришлось столкнуться с реализацией модуля, рассчитанного на поиск пользователей сайта в пределах текущих координат посетителя (тематика сайта — знакомства, а не слежка, как можно подумать, ссылок и названий приводить не буду дабы не раскрывать тайны и не рекламироваться). Изначально я столкнулся с уже имевшейся реализацией модуля. Эта версия была написана год-два назад и применяла устаревшую версию API, так что когда я полез в документацию и попробовал что-то добавить к этому модулю — у меня, естественно, полезли ошибки.
Зарегистрировав бесплатный API Key я обновил используемую библиотеку и начал изучение справки.
Весьма порадовала возможность создания своих собственных элементов карты (Overlays), что, собственно, мне и пришлось сделать. Приведу пример использования этой возможности:
Как видно из этого примера собственные элементы карты создаются путем реализации интерфейса GOverlay. Для реализации этого интерфейса необходимо реализовать 4 его метода — initialize, remove, copy и redraw.
Кроме того, для работы со стандартными элементами карты применяются весьма удобные и интуитивно понятные классы такие, как GPoint, GSize, GIcon. Последний, например, позволяет задавать размер иконки, добавлять к иконке тень, а также устанавливать точку соприкосновения иконки с картой. Все это возможно благодаря весьма простому интерфейсу:
Получившийся в результате обновления модуль стал гораздо удобнее и интереснее благодаря использованию более свежих возможностей Google Maps API.
Совсем недавно на работе пришлось столкнуться с реализацией модуля, рассчитанного на поиск пользователей сайта в пределах текущих координат посетителя (тематика сайта — знакомства, а не слежка, как можно подумать, ссылок и названий приводить не буду дабы не раскрывать тайны и не рекламироваться). Изначально я столкнулся с уже имевшейся реализацией модуля. Эта версия была написана год-два назад и применяла устаревшую версию API, так что когда я полез в документацию и попробовал что-то добавить к этому модулю — у меня, естественно, полезли ошибки.
Зарегистрировав бесплатный API Key я обновил используемую библиотеку и начал изучение справки.
Весьма порадовала возможность создания своих собственных элементов карты (Overlays), что, собственно, мне и пришлось сделать. Приведу пример использования этой возможности:
function TestOverlay(bounds) {
this._bounds = bounds;
}
TestOverlay.prototype = new GOverlay();
TestOverlay.prototype.initialize = function(map) {
var div = document.createElement("div");
div.style.border = "2px solid #888888";
div.style.position = "absolute";
map.getPane(G_MAP_MAP_PANE).appendChild(div);
this._map = map;
this._div = div;
}
TestOverlay.prototype.remove = function() {
this._div.parentNode.removeChild(this._div);
}
TestOverlay.prototype.copy = function() {
return new Rectangle(this._bounds);
}
TestOverlay.prototype.redraw = function(force) {
if (!force) return;
var c1 = this._map.fromLatLngToDivPixel(this._bounds.getSouthWest());
var c2 = this._map.fromLatLngToDivPixel(this._bounds.getNorthEast());
this._div.style.width = Math.abs(c2.x - c1.x) + "px";
this._div.style.height = Math.abs(c2.y - c1.y) + "px";
this._div.style.left = (Math.min(c2.x, c1.x) - 2) + "px";
this._div.style.top = (Math.min(c2.y, c1.y) - 2) + "px";
}
function initialize() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(new GLatLng(37.4419, -122.1419), 13);
map.addControl(new GSmallMapControl());
var bounds = map.getBounds();
var southWest = bounds.getSouthWest();
var northEast = bounds.getNorthEast();
var lngDelta = (northEast.lng() - southWest.lng()) / 3;
var latDelta = (northEast.lat() - southWest.lat()) / 4;
var rectBounds = new GLatLngBounds(
new GLatLng(southWest.lat() + latDelta,
southWest.lng() + lngDelta),
new GLatLng(northEast.lat() - latDelta,
northEast.lng() - lngDelta));
map.addOverlay(new TestOverlay(rectBounds));
}
}
Как видно из этого примера собственные элементы карты создаются путем реализации интерфейса GOverlay. Для реализации этого интерфейса необходимо реализовать 4 его метода — initialize, remove, copy и redraw.
Кроме того, для работы со стандартными элементами карты применяются весьма удобные и интуитивно понятные классы такие, как GPoint, GSize, GIcon. Последний, например, позволяет задавать размер иконки, добавлять к иконке тень, а также устанавливать точку соприкосновения иконки с картой. Все это возможно благодаря весьма простому интерфейсу:
var baseIcon = new GIcon(G_DEFAULT_ICON);
baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
baseIcon.iconSize = new GSize(20, 34);
baseIcon.shadowSize = new GSize(37, 34);
baseIcon.iconAnchor = new GPoint(9, 34);
Получившийся в результате обновления модуль стал гораздо удобнее и интереснее благодаря использованию более свежих возможностей Google Maps API.