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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<title>Geo Email</title>
<script src="http://maps.google.com/maps?file=api&v=2&sensor=false&key=ABQIAAAACw81a-uHJcWwKUjMYuwnoxTwt3HnvzZv0TCu-YtHcwcsQml7YBQg-xE2KASNYwCexswehjh8ZNUOhw" type="text/javascript"></script>
<script type="text/javascript">
var lines = window.location.search.indexOf("nolines") == -1;
var fly = window.location.search.indexOf("fly") != -1;
function Location(lat, lng, ip, region, date) {
this.lat = lat;
this.lng = lng;
this.ip = ip;
this.region = region;
this.date = date;
}
function initialize() {
if (GBrowserIsCompatible()) {
var points = [
%%POINTS%%
];
var pointList = new Array();
function inPointList(latlng) {
for (var i = 0; i < pointList.length; i++) {
if (latLngEqual(latlng, pointList[i]))
return true;
}
return false;
}
function latLngEqual(one, two) {
return (one.lat() == two.lat() && one.lng() == two.lng());
}
Array.prototype.has = function(value) {
for (var i = 0; i < this.length; i++) {
if (this[i] == value)
return true;
}
return false;
}
function makeMarker(latlng) {
if (inPointList(latlng))
return;
pointList.push(latlng);
var dateList = new Array();
var ipList = new Array();
var regionList = new Array();
for (var i = 0; i < points.length; i++) {
if (points[i].lat == latlng.lat() && points[i].lng == latlng.lng()) {
if (!dateList.has(points[i].date))
dateList.push(points[i].date)
if (!ipList.has(points[i].ip))
ipList.push(points[i].ip)
if (!regionList.has(points[i].region))
regionList.push(points[i].region)
}
}
var marker = new GMarker(latlng);
latlng.marker = marker;
var message = "";
var closeDiv = false;
if (dateList.length + ipList.length + regionList.length > 15) {
closeDiv = true;
message += "<div style=\"height:250px;overflow:auto\">";
}
for (var i = 0; i < dateList.length; i++) {
var dateObj = new Date();
dateObj.setTime(dateList[i]);
message += "<b>" + dateObj.toString() + "</b><br>";
}
for (var i = 0; i < ipList.length; i++)
message += "<i>" + ipList[i] + "</i><br>";
for (var i = 0; i < regionList.length; i++) {
message += regionList[i];
if (i < regionList.length - 1)
message += "<br>";
}
if (closeDiv)
message += "</div>";
marker.clickEvent = function() {
var myHtml = message;
map.openInfoWindowHtml(latlng, myHtml);
};
GEvent.addListener(marker, "click", marker.clickEvent);
map.addOverlay(marker);
}
var map = new GMap2(document.getElementById("map_canvas"));
var latLngs = new Array();
var prev = null;
var bounds = new GLatLngBounds();
for (var i = 0; i < points.length; i++) {
var cur = new GLatLng(points[i].lat, points[i].lng);
bounds.extend(cur);
makeMarker(cur);
if (!lines)
continue;
if (prev == null || !latLngEqual(cur, prev))
latLngs.push(cur);
prev = cur;
}
map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds), G_NORMAL_MAP);
map.setUIToDefault();
if (lines)
map.addOverlay(new GPolyline(latLngs, "#0000FF", 5, .5, {geodesic:true}));
if (fly) {
var totalTime = points[points.length - 1].date - points[0].date;
var totalFlyTime = 60000; //Hard coded!
function flyToNextPoint(point) {
var currentPoint = new GLatLng(points[point].lat, points[point].lng);
if (point > 0) {
var zoomSpace = new GLatLngBounds();
zoomSpace.extend(currentPoint);
var previousPoint = point - 1;
while (previousPoint > 0 && points[point].lat == points[previousPoint].lat && points[point].lng == points[previousPoint].lng)
previousPoint--;
zoomSpace.extend(new GLatLng(points[previousPoint].lat, points[previousPoint].lng));
var zoomLevel = map.getZoom() - map.getBoundsZoomLevel(zoomSpace);
while (zoomLevel != 0) {
if (zoomLevel > 0) {
map.zoomOut(currentPoint, true, true);
zoomLevel--;
}
else if (zoomLevel < 0) {
map.zoomIn(currentPoint, true, true);
zoomLevel++;
}
}
}
map.panTo(currentPoint);
if (point == 0 || points[point].lat != points[point - 1].lat || points[point].lng != points[point -1].lng) {
for (var i = 0; i < pointList.length; i++) {
if (currentPoint.equals(pointList[i])) {
pointList[i].marker.clickEvent();
break;
}
}
}
if (point + 1 < points.length)
window.setTimeout(function() { flyToNextPoint(point + 1); }, (points[point + 1].date - points[point].date) / totalTime * totalFlyTime);
}
flyToNextPoint(0);
}
}
}
</script>
</head>
<body onload="initialize()" onunload="GUnload()" bottommargin="0" leftmargin="0" marginheight="0" marginwidth="0" rightmargin="0" topmargin="0">
<div id="map_canvas" style="width: 100%; height: 100%"></div>
</body>
</html>
|