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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
|
<html>
<head>
<script src="http://maps.google.com/maps/api/js?sensor=false&v=3.6"></script>
<script src="../../OLLoader.js"></script>
<script type="text/javascript">
var layer;
function test_Layer_Google_constructor (t) {
t.plan( 5 );
var map = new OpenLayers.Map('map');
var layer = new OpenLayers.Layer.Google('Goog Layer');
map.addLayer(layer);
t.ok( layer instanceof OpenLayers.Layer.Google, "new OpenLayers.Layer.Google returns object" );
t.eq( layer.CLASS_NAME, "OpenLayers.Layer.Google", "CLASS_NAME variable set correctly");
t.eq( layer.name, "Goog Layer", "layer.name is correct" );
t.ok ( layer.mapObject != null, "GMap Object correctly loaded");
t.eq(layer.version, "3", "API version 3 detected.");
}
function test_clone(t) {
t.plan(2);
var layer, clone;
// test default layer
layer = new OpenLayers.Layer.Google();
clone = layer.clone();
t.ok(clone instanceof OpenLayers.Layer.Google, "[default] good instance");
layer.destroy();
clone.destroy();
// test with alt type
layer = new OpenLayers.Layer.Google(null, {type: google.maps.MapTypeId.SATELLITE});
clone = layer.clone();
t.ok(clone.type === google.maps.MapTypeId.SATELLITE, "[sat] correct type");
layer.destroy();
clone.destroy();
}
function test_Layer_Google_isBaseLayer (t) {
t.plan(1);
var layer = new OpenLayers.Layer.Google('Goog Layer');
t.ok(layer.isBaseLayer, "a default load of google layer responds as a base layer");
}
function test_Layer_Google_Translation_lonlat (t) {
t.plan( 4 );
var map = new OpenLayers.Map('map');
var layer = new OpenLayers.Layer.Google('Goog Layer');
map.addLayer(layer);
// these two lines specify an appropriate translation.
// the code afterwards works by itself to test that translation
// works correctly both ways.
var gLatLng = new google.maps.LatLng(50,100);
// v3 uses sphericalMercator by default
var correspondingOLLonLat = layer.forwardMercator(100, 50);
olLonLat = layer.getOLLonLatFromMapObjectLonLat(gLatLng);
t.ok(olLonLat.equals(correspondingOLLonLat), "Translation from GLatLng to OpenLayers.LonLat works");
var transGLatLng = layer.getMapObjectLonLatFromOLLonLat(olLonLat);
t.ok( transGLatLng.equals(gLatLng), "Translation from OpenLayers.LonLat to GLatLng works");
t.ok( layer.getMapObjectLonLatFromOLLonLat(null) == null, "getGLatLngFromOLLonLat(null) returns null");
t.ok( layer.getOLLonLatFromMapObjectLonLat(null) == null, "getOLLonLatFromGLatLng(null) returns null");
}
function test_Layer_Google_Translation_pixel (t) {
t.plan( 4 );
var map = new OpenLayers.Map('map');
var layer = new OpenLayers.Layer.Google('Goog Layer');
map.addLayer(layer);
// these two lines specify an appropriate translation.
// the code afterwards works by itself to test that translation
// works correctly both ways.
var gPoint = new google.maps.Point(50,100);
var correspondingOLPixel = new OpenLayers.Pixel(50, 100);
olPixel = layer.getOLPixelFromMapObjectPixel(gPoint);
t.ok( olPixel.equals(correspondingOLPixel), "Translation from GPoint to OpenLayers.Pixel works");
var transGPoint = layer.getMapObjectPixelFromOLPixel(olPixel);
t.ok( transGPoint.equals(gPoint), "Translation from OpenLayers.Pixel to GPoint works");
t.ok( layer.getMapObjectPixelFromOLPixel(null) == null, "getGPointFromOLPixel(null) returns null");
t.ok( layer.getOLPixelFromMapObjectPixel(null) == null, "getOLPixelFromGPoint(null) returns null");
}
function test_Layer_destroy (t) {
t.plan( 5 );
var map = new OpenLayers.Map('map');
layer = new OpenLayers.Layer.Google('Test Layer');
map.addLayer(layer);
layer.destroy();
t.eq( layer.name, null, "layer.name is null after destroy" );
t.eq( layer.div, null, "layer.div is null after destroy" );
t.eq( layer.map, null, "layer.map is null after destroy" );
t.eq( layer.options, null, "layer.options is null after destroy" );
t.eq( layer.gmap, null, "layer.gmap is null after destroy" );
}
function test_Layer_Goole_forwardMercator(t){
t.plan(2);
//Just test that the fowardMercator function still exists.
var layer = new OpenLayers.Layer.Google('Test Layer', {'sphericalMercator': true});
layer.forwardMercator = function(evt) {
t.ok(true,
"GoogleMercator.forwardMercator was called and executed." );
return;
}
layer.forwardMercator();
//Now test the fowardMercator returns the expected LonLat object
var layer = new OpenLayers.Layer.Google('Test Layer', {'sphericalMercator': true});
var lonlat2 = new OpenLayers.LonLat(Math.random(),Math.random());
var result = layer.forwardMercator(lonlat2.lon, lonlat2.lat);
t.ok(result instanceof OpenLayers.LonLat, "OpenLayers.Google.fowardMercator returns LonLat object" );
}
function test_Layer_Google_overlay(t) {
// Test for #849.
t.plan(1);
var map = new OpenLayers.Map( 'map' ,
{ controls: [] , 'numZoomLevels':20});
var satellite = new OpenLayers.Layer.Google( "Google Satellite" , {type: google.maps.MapTypeId.SATELLITE, 'maxZoomLevel':18} );
var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
"http://labs.metacarta.com/wms/vmap0", {layers: 'basic', 'transparent':true},
{isBaseLayer: false, singleTile: true, displayOutsideMaxExtent: true} );
map.addLayers([satellite, layer]);
map.setCenter(new OpenLayers.LonLat(10.205188,48.857593), 5);
map.zoomIn();
var size = map.getSize();
var px = new OpenLayers.Pixel(size.w, size.h);
var br = map.getLonLatFromPixel(px);
t.ok(layer.grid[0][0].bounds.containsLonLat(br), "Bottom right pixel is covered by untiled WMS layer");
}
function test_Layer_Google_isBaseLayer (t) {
t.plan(3);
var map = new OpenLayers.Map( 'map' ,
{ controls: [] , 'numZoomLevels':20});
var satellite = new OpenLayers.Layer.Google( "Google Satellite" , {type: google.maps.MapTypeId.SATELLITE, 'maxZoomLevel':18} );
map.addLayers([satellite]);
map.zoomToMaxExtent();
t.eq(satellite.div.style.display, "", "Satellite layer is visible.");
satellite.setVisibility(false);
t.eq(satellite.div.style.display, "none", "Satellite layer is not visible.");
satellite.setVisibility(true);
t.eq(satellite.div.style.display, "block", "Satellite layer is visible.");
}
function test_allOverlays_invisible(t) {
t.plan(1);
var map = new OpenLayers.Map('map', {allOverlays: true});
var osm = new OpenLayers.Layer.OSM();
var gmap = new OpenLayers.Layer.Google("Google Streets", {visibility: false});
// keep track of last argument to setGMapVisibility
var visible;
var original = gmap.setGMapVisibility;
gmap.setGMapVisibility = function(vis) {
visible = vis;
original.apply(gmap, arguments);
}
map.addLayers([osm, gmap]);
map.zoomToMaxExtent();
t.ok(visible === false, "setGMapVisibility last called with false");
map.destroy();
}
function test_allOverlays_pan(t) {
t.plan(8);
var origPrecision = OpenLayers.Util.DEFAULT_PRECISION;
// GMaps v3 seems to use a default precision of 13, which is lower
// than what we use in OpenLayers.
// See http://trac.osgeo.org/openlayers/ticket/3059
OpenLayers.Util.DEFAULT_PRECISION = 13;
var map = new OpenLayers.Map('map', {allOverlays: true});
var gmap = new OpenLayers.Layer.Google("Google Streets");
var osm = new OpenLayers.Layer.OSM();
map.addLayers([gmap, osm]);
var origin = new OpenLayers.LonLat(1000000, 6000000);
map.setCenter(origin, 4);
var resolution = map.getResolution();
var dx, dy, center, expected;
// confirm that panning works with Google visible
dx = 100, dy = -100;
map.pan(dx, dy, {animate: false});
center = map.getCenter();
expected = new OpenLayers.LonLat(
origin.lon + (resolution * dx),
origin.lat - (resolution * dy)
);
t.eq(center.lon, expected.lon, "x panning with Google visible " + dx + ", " + dy);
t.eq(center.lat, expected.lat, "y panning with Google visible " + dx + ", " + dy);
map.pan(-dx, -dy, {animate: false});
center = map.getCenter();
t.eq(center.lon, origin.lon, "x panning with Google visible " + (-dx) + ", " + (-dy));
t.eq(center.lat, origin.lat, "y panning with Google visible " + (-dx) + ", " + (-dy));
// confirm that panning works with Google invisible
gmap.setVisibility(false);
dx = 100, dy = -100;
map.pan(dx, dy, {animate: false});
center = map.getCenter();
expected = new OpenLayers.LonLat(
origin.lon + (resolution * dx),
origin.lat - (resolution * dy)
);
t.eq(center.lon, expected.lon, "x panning with Google invisible " + dx + ", " + dy);
t.eq(center.lat, expected.lat, "y panning with Google invisible " + dx + ", " + dy);
map.pan(-dx, -dy, {animate: false});
center = map.getCenter();
t.eq(center.lon, origin.lon, "x panning with Google invisible " + (-dx) + ", " + (-dy));
t.eq(center.lat, origin.lat, "y panning with Google invisible " + (-dx) + ", " + (-dy));
map.destroy();
OpenLayers.Util.DEFAULT_PRECISION = origPrecision;
}
function test_wrapDateLine(t) {
t.plan(2);
var origPrecision = OpenLayers.Util.DEFAULT_PRECISION;
// Our default precision is very high - millimeters should be enough.
// See http://trac.osgeo.org/openlayers/ticket/3059
OpenLayers.Util.DEFAULT_PRECISION = 12;
var map = new OpenLayers.Map("map");
var gmap = new OpenLayers.Layer.Google("Google Streets");
map.addLayer(gmap);
map.setCenter(new OpenLayers.LonLat(0, 0), 1);
var center;
// pan to the edge of the world
map.pan(256, 0, {animate: false});
center = map.getCenter();
t.eq(center.lon, 20037508.34, "edge of the world");
// pan off the edge of the world
map.pan(100, 0, {animate: false});
center = map.getCenter();
var expect = OpenLayers.Util.toFloat(100 * map.getResolution() - 20037508.34);
t.eq(center.lon, expect, "magically back in the western hemisphere");
map.destroy();
OpenLayers.Util.DEFAULT_PRECISION = origPrecision;
}
function test_respectDateLine(t) {
t.plan(2);
var map = new OpenLayers.Map("map");
var gmap = new OpenLayers.Layer.Google("Google Streets", {wrapDateLine: false});
map.addLayer(gmap);
map.setCenter(new OpenLayers.LonLat(0, 0), 1);
var center;
// pan to the edge of the world
map.pan(256, 0, {animate: false});
center = map.getCenter();
t.eq(center.lon, 20037508.34, "edge of the world");
// pan off the edge of the world
map.pan(100, 0, {animate: false});
center = map.getCenter();
t.eq(center.lon, 20037508.34, "whew, still on the edge");
map.destroy();
}
function test_moveViewportDiv(t) {
t.plan(2);
var map = new OpenLayers.Map('map', {
projection: 'EPSG:3857',
center: [0, 0],
zoom: 1
});
var gmap = new OpenLayers.Layer.Google();
map.addLayer(gmap);
t.delay_call(4, function() {
t.ok(map.viewPortDiv.parentNode !== map.div, 'viewport moved inside GMaps');
var osm = new OpenLayers.Layer.OSM();
map.addLayer(osm);
map.setBaseLayer(osm);
t.ok(map.viewPortDiv.parentNode === map.div, 'viewport moved back');
});
}
</script>
</head>
<body>
<div id="map" style="width:500px; height: 500px"></div>
</body>
</html>
|