cirandas.net

ref: master

public/javascripts/google_maps.js


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
var map;
var infoWindow;
var mapPoints = {};
var mapBounds;

function mapOpenBalloon(marker, html) {
  infoWindow.setPosition(marker.getPosition());
  infoWindow.setContent(html);
  infoWindow.open(map, marker);
}

function mapPutMarker(lat, lng, title, icon, url_or_function) {
  var point_str = lat + ":" + lng;

  if (mapPoints[point_str]) {
    lng += (Math.random() - 0.5) * 0.02;
    lat += (Math.random() - 0.5) * 0.02;
  } else {
    mapPoints[point_str] = true;
  }

  var point = new google.maps.LatLng(lat, lng);
  var options = { map: map, title: title, icon: icon, position: point };
  var marker = new google.maps.Marker(options);

  google.maps.event.addListener(marker, 'click', function() {
    if (!url_or_function)
      return;
    if (typeof(url_or_function) == "function")
      url_or_function(marker);
    else
      jQuery.ajax({url: url_or_function, success: function(data) { mapOpenBalloon(marker, jQuery(data).html()); } });
  });
  mapBounds.extend(point);

  return marker;
}

function mapLoad(initialZoom, centerPoint) {
  if (!initialZoom) initialZoom = 4;
  if (!centerPoint) centerPoint = new google.maps.LatLng(0, 0);

  map = new google.maps.Map(document.getElementById("map"), {
    zoom: initialZoom,
    center: centerPoint,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  });

  mapBounds = new google.maps.LatLngBounds();
  infoWindow = new google.maps.InfoWindow({map: map});

  google.maps.event.addListener(map, 'click', function() {
    infoWindow.close();
  });
}

function mapCenter(latlng) {
  if (!latlng) map.fitBounds(mapBounds);
  map.setCenter(latlng ? latlng : mapBounds.getCenter());
}