Общее·количество·просмотров·страницы

Java Dev Notes - разработка на Java (а также на JavaScript/Python/Flex и др), факты, события из АйТи

воскресенье, 30 мая 2010 г.

Google Maps V3 - метод Map.getBounds() возвращает undefined

Сегодня столкнулся с тем, что в Google Maps V3 getBounds() у объекта карты возвращает undefined. Пример кода:

<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
 
function initialize() {
var latlng = new google.maps.LatLng(60, 60);
var myOptions = {
zoom: 8,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
 
var bounds = map.getBounds();
console.debug(bounds);
if (!bounds) {
alert('Не могу определить границы карты сразу после ее создания!');
}
 
var loc= new google.maps.LatLng(60.0, 60.0);
var marker = new google.maps.Marker({
position: loc,
map: map
});
 
bounds = map.getBounds();
console.debug(bounds);
if (!bounds) {
alert('Не могу определить границы карты даже после добавления маркера!');
}
}
 
</script>
</head>
<body onload="initialize()">
<div id="map_canvas" style="width:100%; height:100%"></div>
</body>
</html>


Оказывается, дело в том, что сразу после создания карта еще не инициализировалась. Поэтому ее границы не определены, и поэтому метод getBounds() возвращает undefned

Поэтому границы карты следует получать, после того, как карта инициализировалась. Для этого нужно ставить обработчик события idle. Вот как это делается:

<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
 
function initialize() {
var latlng = new google.maps.LatLng(60, 60);
var myOptions = {
zoom: 8,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
 
var marker = new google.maps.Marker({
position: new google.maps.LatLng(60.0, 60.0);,
map: map
});
 
google.maps.event.addListenerOnce(map, 'idle', function(){
console.log('IDLE EVENT CallBack');
console.debug(map.getBounds());
});
}
 
</script>
</head>
<body onload="initialize()">
<div id="map_canvas" style="width:100%; height:100%"></div>
</body>
</html>


Также проблема обсуждается Stack Overflow: Google Maps Api v3 - getBounds is undefined, а также есть issue на Google Code: Issue 1692: Map bounds not available on first load of the map.

пятница, 14 мая 2010 г.

Итерация по словарю в шаблонах Google App Engine

Возникла задачка: как отрендерить в шаблон GAE данные, которые содержатся в словаре. В шаблон передается словарь, который содержит статистику по регионам. Ключами являются названия регионов, а значениями - количество неких объектов в этом регионе.

Нам нужно в шаблоне выводить список регионов + соответсвуюшую цифру. Делается это так:



"area" : {
{% for i in areaStat.items %}
"{{ i.0 }}" : "{{ i.1 }}"{% if not forloop.last %},{% endif %}
{% endfor %}
}



Здесь areaStat - это имя словаря, i.0 - ключ, i.1 - значение.

Знакомство с Блогуном

Решил познакомиться с работой Блогуна. Посмотрим, что за сервис, как он устроен.

среда, 12 мая 2010 г.

Публикация ссылок ВКонтакте

Сайт/блог полезно снабдить конпкой, через которую пользователи могут запостить ссылку на сайт в социальные сети, системы закладок, твиттер и т.п. С недавних пор такую функциональность приобрел и vkontakte.ru.

Добавить кнопку для публикации ссылки ВКонтакте очень просто - для этого всего лишь надо добавить пару строк в код странички. Подробнее читай здесь: ВКонтакте - Публикация ссылок.

10 причин почему нужно уйти из FaceBook

Top Ten Reasons You Should Quit Facebook

Постоянные читатели