gmaps4rails 0.11.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +6 -2
- data/app/views/gmaps4rails/_gmaps4rails.html.erb +18 -20
- data/lib/gmaps4rails/base.rb +95 -0
- data/lib/gmaps4rails/extensions/hash.rb +3 -67
- data/lib/gmaps4rails/helper/gmaps4rails_helper.rb +13 -2
- data/public/javascripts/gmaps4rails/all_apis.js +5 -0
- data/public/javascripts/gmaps4rails/gmaps4rails.base.js +147 -112
- data/public/javascripts/gmaps4rails/gmaps4rails.bing.js +182 -171
- data/public/javascripts/gmaps4rails/gmaps4rails.googlemaps.js +269 -235
- data/public/javascripts/gmaps4rails/gmaps4rails.mapquest.js +135 -125
- data/public/javascripts/gmaps4rails/gmaps4rails.openlayers.js +227 -218
- data/public/stylesheets/gmaps4rails.css +2 -2
- metadata +9 -111
- data/test/dummy/app/controllers/application_controller.rb +0 -3
- data/test/dummy/app/controllers/users_controller.rb +0 -60
- data/test/dummy/app/helpers/application_helper.rb +0 -2
- data/test/dummy/app/helpers/users_helper.rb +0 -3
- data/test/dummy/app/models/user.rb +0 -38
- data/test/dummy/config/application.rb +0 -41
- data/test/dummy/config/boot.rb +0 -6
- data/test/dummy/config/environment.rb +0 -5
- data/test/dummy/config/environments/development.rb +0 -26
- data/test/dummy/config/environments/production.rb +0 -49
- data/test/dummy/config/environments/test.rb +0 -35
- data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
- data/test/dummy/config/initializers/inflections.rb +0 -10
- data/test/dummy/config/initializers/mime_types.rb +0 -5
- data/test/dummy/config/initializers/secret_token.rb +0 -7
- data/test/dummy/config/initializers/session_store.rb +0 -8
- data/test/dummy/config/routes.rb +0 -7
- data/test/dummy/db/migrate/20110306182914_create_users.rb +0 -21
- data/test/dummy/db/migrate/20110430081624_add_addresses_to_users.rb +0 -11
- data/test/dummy/db/migrate/20110430083824_remove_address_from_users.rb +0 -9
- data/test/dummy/db/schema.rb +0 -35
- data/test/dummy/db/seeds.rb +0 -7
- data/test/dummy/spec/base/base_spec.rb +0 -127
- data/test/dummy/spec/helpers/gmaps4rails_helper_spec.rb +0 -13
- data/test/dummy/spec/javascripts/support/jasmine_config.rb +0 -23
- data/test/dummy/spec/javascripts/support/jasmine_runner.rb +0 -20
- data/test/dummy/spec/models/user_spec.rb +0 -284
- data/test/dummy/spec/requests/users_spec.rb +0 -22
- data/test/dummy/spec/spec_helper.rb +0 -41
- data/test/dummy/spec/support/factories.rb +0 -20
- data/test/dummy/spec/support/matchers.rb +0 -7
- data/test/dummy31/app/controllers/application_controller.rb +0 -3
- data/test/dummy31/app/controllers/users_controller.rb +0 -83
- data/test/dummy31/app/helpers/application_helper.rb +0 -2
- data/test/dummy31/app/helpers/users_helper.rb +0 -2
- data/test/dummy31/app/models/user.rb +0 -7
- data/test/dummy31/config/application.rb +0 -43
- data/test/dummy31/config/boot.rb +0 -6
- data/test/dummy31/config/environment.rb +0 -5
- data/test/dummy31/config/environments/development.rb +0 -27
- data/test/dummy31/config/environments/production.rb +0 -51
- data/test/dummy31/config/environments/test.rb +0 -39
- data/test/dummy31/config/initializers/backtrace_silencers.rb +0 -7
- data/test/dummy31/config/initializers/inflections.rb +0 -10
- data/test/dummy31/config/initializers/mime_types.rb +0 -5
- data/test/dummy31/config/initializers/secret_token.rb +0 -7
- data/test/dummy31/config/initializers/session_store.rb +0 -8
- data/test/dummy31/config/initializers/wrap_parameters.rb +0 -12
- data/test/dummy31/config/routes.rb +0 -61
- data/test/dummy31/db/migrate/20110809134019_create_users.rb +0 -13
- data/test/dummy31/db/schema.rb +0 -25
- data/test/dummy31/db/seeds.rb +0 -7
@@ -1,34 +1,40 @@
|
|
1
|
-
var
|
2
|
-
|
3
|
-
//map config
|
4
|
-
map: null, // contains the map we're working on
|
5
|
-
visibleInfoWindow: null, //contains the current opened infowindow
|
6
|
-
userLocation: null, //contains user's location if geolocalization was performed and successful
|
1
|
+
var Gmaps = {mapsToLoad: []};
|
7
2
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
3
|
+
Gmaps.loadMaps = function(){
|
4
|
+
for (var i = 0; i < Gmaps.mapsToLoad.length; ++i) {
|
5
|
+
window[Gmaps.mapsToLoad[i]]();
|
6
|
+
}
|
7
|
+
};
|
13
8
|
|
9
|
+
function Gmaps4Rails() {
|
14
10
|
|
11
|
+
//map config
|
12
|
+
this.map = null; // contains the map we're working on
|
13
|
+
this.visibleInfoWindow = null; //contains the current opened infowindow
|
14
|
+
this.userLocation = null; //contains user's location if geolocalization was performed and successful
|
15
|
+
|
16
|
+
//empty slots
|
17
|
+
this.geolocationFailure = function() { return false;} //triggered when geolocation fails. If customized, must be like= function(navigator_handles_geolocation){} where 'navigator_handles_geolocation' is a boolean
|
18
|
+
this.callback = function() { return false;} //to let user set a custom callback function
|
19
|
+
this.customClusterer = function() { return null;} //to let user set custom clusterer pictures
|
20
|
+
this.infobox = function() { return null;} //to let user use custom infoboxes
|
15
21
|
|
16
|
-
|
17
|
-
id: '
|
22
|
+
this.default_map_options = {
|
23
|
+
id: 'map',
|
18
24
|
draggable: true,
|
19
25
|
detect_location: false, // should the browser attempt to use geolocation detection features of HTML5?
|
20
26
|
center_on_user: false, // centers map on the location detected through the browser
|
21
27
|
center_latitude: 0,
|
22
28
|
center_longitude: 0,
|
23
|
-
zoom:
|
29
|
+
zoom: 7,
|
24
30
|
maxZoom: null,
|
25
31
|
minZoom: null,
|
26
32
|
auto_adjust : true, // adjust the map to the markers if set to true
|
27
33
|
auto_zoom: true, // zoom given by auto-adjust
|
28
34
|
bounds: [] // adjust map to these limits. Should be [{"lat": , "lng": }]
|
29
|
-
}
|
35
|
+
};
|
30
36
|
|
31
|
-
|
37
|
+
this.default_markers_conf = {
|
32
38
|
// Marker config
|
33
39
|
title: "",
|
34
40
|
// MarkerImage config
|
@@ -37,61 +43,63 @@ var Gmaps4Rails = {
|
|
37
43
|
length: 32,
|
38
44
|
draggable: false, // how to modify: <%= gmaps( "markers" => { "data" => @object.to_gmaps4rails, "options" => { "draggable" => true }}) %>
|
39
45
|
//clustering config
|
40
|
-
do_clustering:
|
46
|
+
do_clustering: true, // do clustering if set to true
|
41
47
|
randomize: false, // Google maps can't display two markers which have the same coordinates. This randomizer enables to prevent this situation from happening.
|
42
48
|
max_random_distance: 100, // in meters. Each marker coordinate could be altered by this distance in a random direction
|
43
49
|
list_container: null, // id of the ul that will host links to all markers
|
44
|
-
offset: 0
|
45
|
-
}
|
50
|
+
offset: 0 //used when adding_markers to an existing map. Because new markers are concated with previous one, offset is here to prevent the existing from being re-created.
|
51
|
+
};
|
46
52
|
|
47
53
|
//Stored variables
|
48
|
-
markers
|
49
|
-
boundsObject
|
50
|
-
polygons
|
51
|
-
polylines
|
52
|
-
circles
|
53
|
-
markerClusterer
|
54
|
-
markerImages
|
54
|
+
this.markers = []; // contains all markers. A marker contains the following: {"description": , "longitude": , "title":, "latitude":, "picture": "", "width": "", "length": "", "sidebar": "", "serviceObject": google_marker}
|
55
|
+
this.boundsObject = null; // contains current bounds from markers, polylines etc...
|
56
|
+
this.polygons = []; // contains raw data, array of arrays (first element could be a hash containing options)
|
57
|
+
this.polylines = []; // contains raw data, array of arrays (first element could be a hash containing options)
|
58
|
+
this.circles = []; // contains raw data, array of hash
|
59
|
+
this.markerClusterer = null; // contains all marker clusterers
|
60
|
+
this.markerImages = [];
|
55
61
|
|
56
62
|
//initializes the map
|
57
|
-
initialize
|
63
|
+
this.initialize = function() {
|
58
64
|
|
59
|
-
this.map =
|
65
|
+
this.map = this.createMap();
|
60
66
|
|
61
67
|
if (this.map_options.detect_location === true || this.map_options.center_on_user === true) {
|
62
|
-
this.findUserLocation();
|
68
|
+
this.findUserLocation(this);
|
63
69
|
}
|
64
70
|
//resets sidebar if needed
|
65
71
|
this.resetSidebarContent();
|
66
|
-
}
|
72
|
+
}
|
67
73
|
|
68
|
-
|
74
|
+
// this.initialize();
|
75
|
+
|
76
|
+
this.findUserLocation = function(map_object) {
|
69
77
|
if(navigator.geolocation) {
|
70
78
|
//try to retrieve user's position
|
71
79
|
navigator.geolocation.getCurrentPosition(function(position) {
|
72
80
|
//saves the position in the userLocation variable
|
73
|
-
|
81
|
+
map_object.userLocation = map_object.createLatLng(position.coords.latitude, position.coords.longitude);
|
74
82
|
//change map's center to focus on user's geoloc if asked
|
75
|
-
if(
|
76
|
-
|
83
|
+
if(map_object.map_options.center_on_user === true) {
|
84
|
+
map_object.centerMapOnUser();
|
77
85
|
}
|
78
86
|
},
|
79
87
|
function() {
|
80
88
|
//failure, but the navigator handles geolocation
|
81
|
-
|
89
|
+
map_object.geolocationFailure(true);
|
82
90
|
});
|
83
91
|
}
|
84
92
|
else {
|
85
93
|
//failure but the navigator doesn't handle geolocation
|
86
|
-
|
94
|
+
map_object.geolocationFailure(false);
|
87
95
|
}
|
88
|
-
}
|
96
|
+
}
|
89
97
|
|
90
98
|
////////////////////////////////////////////////////
|
91
99
|
//////////////////// DIRECTIONS ////////////////////
|
92
100
|
////////////////////////////////////////////////////
|
93
101
|
|
94
|
-
create_direction
|
102
|
+
this.create_direction = function(){
|
95
103
|
var directionsDisplay = new google.maps.DirectionsRenderer();
|
96
104
|
var directionsService = new google.maps.DirectionsService();
|
97
105
|
|
@@ -120,7 +128,7 @@ var Gmaps4Rails = {
|
|
120
128
|
directionsDisplay.setDirections(response);
|
121
129
|
}
|
122
130
|
});
|
123
|
-
}
|
131
|
+
}
|
124
132
|
|
125
133
|
////////////////////////////////////////////////////
|
126
134
|
///////////////////// CIRCLES //////////////////////
|
@@ -128,14 +136,14 @@ var Gmaps4Rails = {
|
|
128
136
|
|
129
137
|
//Loops through all circles
|
130
138
|
//Loops through all circles and draws them
|
131
|
-
create_circles
|
139
|
+
this.create_circles = function() {
|
132
140
|
for (var i = 0; i < this.circles.length; ++i) {
|
133
141
|
//by convention, default style configuration could be integrated in the first element
|
134
142
|
this.create_circle(this.circles[i]);
|
135
143
|
}
|
136
|
-
}
|
144
|
+
}
|
137
145
|
|
138
|
-
create_circle
|
146
|
+
this.create_circle = function(circle) {
|
139
147
|
if ( i === 0 ) {
|
140
148
|
if (this.exists(circle.strokeColor )) { this.circles_conf.strokeColor = circle.strokeColor; }
|
141
149
|
if (this.exists(circle.strokeOpacity)) { this.circles_conf.strokeOpacity = circle.strokeOpacity; }
|
@@ -147,7 +155,7 @@ var Gmaps4Rails = {
|
|
147
155
|
// always check if a config is given, if not, use defaults
|
148
156
|
// NOTE: is there a cleaner way to do this? Maybe a hash merge of some sort?
|
149
157
|
var newCircle = new google.maps.Circle({
|
150
|
-
center:
|
158
|
+
center: this.createLatLng(circle.lat, circle.lng),
|
151
159
|
strokeColor: circle.strokeColor || this.circles_conf.strokeColor,
|
152
160
|
strokeOpacity: circle.strokeOpacity || this.circles_conf.strokeOpacity,
|
153
161
|
strokeWeight: circle.strokeWeight || this.circles_conf.strokeWeight,
|
@@ -160,52 +168,52 @@ var Gmaps4Rails = {
|
|
160
168
|
circle.serviceObject = newCircle;
|
161
169
|
newCircle.setMap(this.map);
|
162
170
|
}
|
163
|
-
}
|
171
|
+
}
|
164
172
|
|
165
173
|
// clear circles
|
166
|
-
clear_circles
|
174
|
+
this.clear_circles = function() {
|
167
175
|
for (var i = 0; i < this.circles.length; ++i) {
|
168
176
|
this.clear_circle(this.circles[i]);
|
169
177
|
}
|
170
|
-
}
|
178
|
+
}
|
171
179
|
|
172
|
-
clear_circle
|
180
|
+
this.clear_circle = function(circle) {
|
173
181
|
circle.serviceObject.setMap(null);
|
174
|
-
}
|
182
|
+
}
|
175
183
|
|
176
|
-
hide_circles
|
184
|
+
this.hide_circles = function() {
|
177
185
|
for (var i = 0; i < this.circles.length; ++i) {
|
178
186
|
this.hide_circle(this.circles[i]);
|
179
187
|
}
|
180
|
-
}
|
188
|
+
}
|
181
189
|
|
182
|
-
hide_circle
|
190
|
+
this.hide_circle = function(circle) {
|
183
191
|
circle.serviceObject.setMap(null);
|
184
|
-
}
|
192
|
+
}
|
185
193
|
|
186
|
-
show_circles
|
194
|
+
this.show_circles = function() {
|
187
195
|
for (var i = 0; i < this.circles.length; ++i) {
|
188
196
|
this.show_circle(this.circles[i]);
|
189
197
|
}
|
190
|
-
}
|
198
|
+
}
|
191
199
|
|
192
|
-
show_circle
|
200
|
+
this.show_circle = function(circle) {
|
193
201
|
circle.serviceObject.setMap(this.map);
|
194
|
-
}
|
202
|
+
}
|
195
203
|
|
196
204
|
////////////////////////////////////////////////////
|
197
205
|
///////////////////// POLYGONS /////////////////////
|
198
206
|
////////////////////////////////////////////////////
|
199
207
|
|
200
208
|
//polygons is an array of arrays. It loops.
|
201
|
-
create_polygons
|
209
|
+
this.create_polygons = function(){
|
202
210
|
for (var i = 0; i < this.polygons.length; ++i) {
|
203
211
|
this.create_polygon(i);
|
204
212
|
}
|
205
|
-
}
|
213
|
+
}
|
206
214
|
|
207
215
|
//creates a single polygon, triggered by create_polygons
|
208
|
-
create_polygon
|
216
|
+
this.create_polygon = function(i){
|
209
217
|
var polygon_coordinates = [];
|
210
218
|
var strokeColor;
|
211
219
|
var strokeOpacity;
|
@@ -214,7 +222,7 @@ var Gmaps4Rails = {
|
|
214
222
|
var fillOpacity;
|
215
223
|
//Polygon points are in an Array, that's why looping is necessary
|
216
224
|
for (var j = 0; j < this.polygons[i].length; ++j) {
|
217
|
-
var latlng =
|
225
|
+
var latlng = this.createLatLng(this.polygons[i][j].lat, this.polygons[i][j].lng);
|
218
226
|
polygon_coordinates.push(latlng);
|
219
227
|
//first element of an Array could contain specific configuration for this particular polygon. If no config given, use default
|
220
228
|
if (j===0) {
|
@@ -239,21 +247,21 @@ var Gmaps4Rails = {
|
|
239
247
|
//save polygon in list
|
240
248
|
this.polygons[i].serviceObject = new_poly;
|
241
249
|
new_poly.setMap(this.map);
|
242
|
-
}
|
250
|
+
}
|
243
251
|
|
244
252
|
////////////////////////////////////////////////////
|
245
253
|
/////////////////// POLYLINES //////////////////////
|
246
254
|
////////////////////////////////////////////////////
|
247
255
|
|
248
256
|
//polylines is an array of arrays. It loops.
|
249
|
-
create_polylines
|
257
|
+
this.create_polylines = function(){
|
250
258
|
for (var i = 0; i < this.polylines.length; ++i) {
|
251
259
|
this.create_polyline(i);
|
252
260
|
}
|
253
|
-
}
|
261
|
+
}
|
254
262
|
|
255
263
|
//creates a single polyline, triggered by create_polylines
|
256
|
-
create_polyline
|
264
|
+
this.create_polyline = function(i) {
|
257
265
|
var polyline_coordinates = [];
|
258
266
|
var strokeColor;
|
259
267
|
var strokeOpacity;
|
@@ -280,7 +288,7 @@ var Gmaps4Rails = {
|
|
280
288
|
}
|
281
289
|
//add latlng if positions provided
|
282
290
|
if (this.exists(this.polylines[i][j].lat) && this.exists(this.polylines[i][j].lng)) {
|
283
|
-
var latlng =
|
291
|
+
var latlng = this.createLatLng(this.polylines[i][j].lat, this.polylines[i][j].lng);
|
284
292
|
polyline_coordinates.push(latlng);
|
285
293
|
}
|
286
294
|
}
|
@@ -296,37 +304,34 @@ var Gmaps4Rails = {
|
|
296
304
|
//save polyline
|
297
305
|
this.polylines[i].serviceObject = new_poly;
|
298
306
|
new_poly.setMap(this.map);
|
299
|
-
}
|
307
|
+
}
|
300
308
|
|
301
309
|
////////////////////////////////////////////////////
|
302
310
|
///////////////////// MARKERS //////////////////////
|
303
311
|
//////////////////tests coded///////////////////////
|
304
312
|
|
305
313
|
//creates, clusterizes and adjusts map
|
306
|
-
create_markers
|
307
|
-
this.markers_conf.offset = 0;
|
314
|
+
this.create_markers = function() {
|
308
315
|
this.createServiceMarkersFromMarkers();
|
309
316
|
this.clusterize();
|
310
317
|
this.adjustMapToBounds();
|
311
|
-
}
|
318
|
+
}
|
312
319
|
|
313
320
|
//create google.maps Markers from data provided by user
|
314
|
-
createServiceMarkersFromMarkers
|
321
|
+
this.createServiceMarkersFromMarkers = function() {
|
315
322
|
for (var i = this.markers_conf.offset; i < this.markers.length; ++i) {
|
316
|
-
//check if the marker has not already been created
|
317
|
-
// if (!this.exists(this.markers[i].serviceObject && this.provider == "google")) {
|
318
323
|
//extract options, test if value passed or use default
|
319
324
|
var Lat = this.markers[i].lat;
|
320
325
|
var Lng = this.markers[i].lng;
|
321
326
|
|
322
327
|
//alter coordinates if randomize is true
|
323
328
|
if ( this.markers_conf.randomize) {
|
324
|
-
var LatLng =
|
325
|
-
//retrieve coordinates from the
|
329
|
+
var LatLng = this.randomize(Lat, Lng);
|
330
|
+
//retrieve coordinates from the æarray
|
326
331
|
Lat = LatLng[0]; Lng = LatLng[1];
|
327
332
|
}
|
328
333
|
//save object
|
329
|
-
this.markers[i].serviceObject =
|
334
|
+
this.markers[i].serviceObject = this.createMarker({
|
330
335
|
"marker_picture": this.exists(this.markers[i].picture) ? this.markers[i].picture : this.markers_conf.picture,
|
331
336
|
"marker_width": this.exists(this.markers[i].width) ? this.markers[i].width : this.markers_conf.width,
|
332
337
|
"marker_height": this.exists(this.markers[i].height) ? this.markers[i].height : this.markers_conf.length,
|
@@ -346,47 +351,46 @@ var Gmaps4Rails = {
|
|
346
351
|
this.createInfoWindow(this.markers[i]);
|
347
352
|
//create sidebar if enabled
|
348
353
|
this.createSidebar(this.markers[i]);
|
349
|
-
// }
|
350
354
|
}
|
351
355
|
this.markers_conf.offset = this.markers.length;
|
352
|
-
}
|
356
|
+
}
|
353
357
|
|
354
358
|
|
355
359
|
// creates Image Anchor Position or return null if nothing passed
|
356
|
-
createImageAnchorPosition
|
360
|
+
this.createImageAnchorPosition = function(anchorLocation) {
|
357
361
|
if (anchorLocation === null)
|
358
362
|
{ return null; }
|
359
363
|
else
|
360
|
-
{ return
|
361
|
-
}
|
364
|
+
{ return this.createPoint(anchorLocation[0], anchorLocation[1]); }
|
365
|
+
}
|
362
366
|
|
363
367
|
// replace old markers with new markers on an existing map
|
364
|
-
replaceMarkers
|
368
|
+
this.replaceMarkers = function(new_markers){
|
365
369
|
this.clearMarkers();
|
366
370
|
//reset previous markers
|
367
371
|
this.markers = new Array;
|
368
372
|
//reset current bounds
|
369
|
-
this.boundsObject =
|
373
|
+
this.boundsObject = this.createLatLngBounds();
|
370
374
|
//reset sidebar content if exists
|
371
375
|
this.resetSidebarContent();
|
372
376
|
//add new markers
|
373
377
|
this.addMarkers(new_markers);
|
374
|
-
}
|
378
|
+
}
|
375
379
|
|
376
380
|
//add new markers to on an existing map
|
377
|
-
addMarkers
|
381
|
+
this.addMarkers = function(new_markers){
|
378
382
|
//update the list of markers to take into account
|
379
383
|
this.markers = this.markers.concat(new_markers);
|
380
384
|
//put markers on the map
|
381
385
|
this.create_markers();
|
382
|
-
}
|
386
|
+
}
|
383
387
|
|
384
388
|
////////////////////////////////////////////////////
|
385
389
|
///////////////////// SIDEBAR //////////////////////
|
386
390
|
////////////////////////////////////////////////////
|
387
391
|
|
388
392
|
//creates sidebar
|
389
|
-
createSidebar
|
393
|
+
this.createSidebar = function(marker_container){
|
390
394
|
if (this.markers_conf.list_container)
|
391
395
|
{
|
392
396
|
var ul = document.getElementById(this.markers_conf.list_container);
|
@@ -399,48 +403,53 @@ var Gmaps4Rails = {
|
|
399
403
|
li.appendChild(aSel);
|
400
404
|
ul.appendChild(li);
|
401
405
|
}
|
402
|
-
}
|
406
|
+
}
|
403
407
|
|
404
408
|
//moves map to marker clicked + open infowindow
|
405
|
-
sidebar_element_handler
|
409
|
+
this.sidebar_element_handler = function(marker, eventType) {
|
406
410
|
return function() {
|
407
|
-
|
411
|
+
this.map.panTo(marker.position);
|
408
412
|
google.maps.event.trigger(marker, eventType);
|
409
413
|
};
|
410
|
-
}
|
414
|
+
}
|
411
415
|
|
412
|
-
resetSidebarContent
|
416
|
+
this.resetSidebarContent = function(){
|
413
417
|
if (this.markers_conf.list_container !== null ){
|
414
418
|
var ul = document.getElementById(this.markers_conf.list_container);
|
415
419
|
ul.innerHTML = "";
|
416
420
|
}
|
417
|
-
}
|
421
|
+
}
|
418
422
|
|
419
423
|
////////////////////////////////////////////////////
|
420
424
|
////////////////// MISCELLANEOUS ///////////////////
|
421
425
|
////////////////////////////////////////////////////
|
422
426
|
|
423
427
|
//to make the map fit the different LatLng points
|
424
|
-
adjustMapToBounds
|
428
|
+
this.adjustMapToBounds = function(latlng) {
|
425
429
|
|
426
430
|
//FIRST_STEP: retrieve all bounds
|
427
431
|
//create the bounds object only if necessary
|
428
432
|
if (this.map_options.auto_adjust || this.map_options.bounds !== null) {
|
429
|
-
this.boundsObject =
|
433
|
+
this.boundsObject = this.createLatLngBounds();
|
430
434
|
}
|
431
435
|
|
432
436
|
//if autodjust is true, must get bounds from markers polylines etc...
|
433
437
|
if (this.map_options.auto_adjust) {
|
434
438
|
//from markers
|
435
|
-
|
436
|
-
|
437
|
-
//from polygons:
|
438
|
-
for (var i = 0; i < this.polylines.length; ++i) {
|
439
|
-
this.polylines[i].serviceObject.latLngs.forEach(function(obj1){ obj1.forEach(function(obj2){ Gmaps4Rails.boundsObject.extend(obj2);} );});
|
440
|
-
}
|
439
|
+
this.extendBoundsWithMarkers();
|
441
440
|
//from polylines:
|
442
|
-
for (var i = 0; i <
|
443
|
-
this.
|
441
|
+
for (var i = 0; i < this.polylines.length; ++i) {
|
442
|
+
var polyline_points = this.polylines[i].serviceObject.latLngs.getArray()[0].getArray();
|
443
|
+
for (var j = 0; j < polyline_points.length; ++j) {
|
444
|
+
this.boundsObject.extend(polyline_points[j]);
|
445
|
+
}
|
446
|
+
}
|
447
|
+
//from polygons:
|
448
|
+
for (var i = 0; i < this.polygons.length; ++i) {
|
449
|
+
var polygon_points = this.polygons[i].serviceObject.latLngs.getArray()[0].getArray();
|
450
|
+
for (var j = 0; j < polygon_points.length; ++j) {
|
451
|
+
this.boundsObject.extend(polygon_points[j]);
|
452
|
+
}
|
444
453
|
}
|
445
454
|
//from circles
|
446
455
|
for (var i = 0; i < this.circles.length; ++i) {
|
@@ -451,7 +460,7 @@ var Gmaps4Rails = {
|
|
451
460
|
//in every case, I've to take into account the bounds set up by the user
|
452
461
|
for (var i = 0; i < this.map_options.bounds.length; ++i) {
|
453
462
|
//create points from bounds provided
|
454
|
-
var bound =
|
463
|
+
var bound = this.createLatLng(this.map_options.bounds[i].lat, this.map_options.bounds[i].lng);
|
455
464
|
this.boundsObject.extend(bound);
|
456
465
|
}
|
457
466
|
|
@@ -466,10 +475,20 @@ var Gmaps4Rails = {
|
|
466
475
|
this.map.setCenter(map_center);
|
467
476
|
}
|
468
477
|
else {
|
469
|
-
|
478
|
+
this.fitBounds();
|
470
479
|
}
|
471
480
|
}
|
472
|
-
}
|
481
|
+
}
|
482
|
+
|
483
|
+
////////////////////////////////////////////////////
|
484
|
+
///////////////// KML //////////////////
|
485
|
+
////////////////////////////////////////////////////
|
486
|
+
|
487
|
+
this.create_kml = function(){
|
488
|
+
for (var i = 0; i < this.kml.length; ++i) {
|
489
|
+
this.kml[i].serviceObject = this.createKmlLayer(this.kml[i]);
|
490
|
+
}
|
491
|
+
}
|
473
492
|
|
474
493
|
|
475
494
|
////////////////////////////////////////////////////
|
@@ -477,21 +496,37 @@ var Gmaps4Rails = {
|
|
477
496
|
///////////////////tests coded//////////////////////
|
478
497
|
|
479
498
|
//basic function to check existence of a variable
|
480
|
-
exists
|
499
|
+
this.exists = function(var_name) {
|
481
500
|
return (var_name !== "" && typeof var_name !== "undefined");
|
482
|
-
}
|
501
|
+
}
|
483
502
|
|
484
503
|
//randomize
|
485
|
-
randomize
|
504
|
+
this.randomize = function(Lat0, Lng0) {
|
486
505
|
//distance in meters between 0 and max_random_distance (positive or negative)
|
487
506
|
var dx = this.markers_conf.max_random_distance * this.random();
|
488
507
|
var dy = this.markers_conf.max_random_distance * this.random();
|
489
508
|
var Lat = parseFloat(Lat0) + (180/Math.PI)*(dy/6378137);
|
490
509
|
var Lng = parseFloat(Lng0) + ( 90/Math.PI)*(dx/6378137)/Math.cos(Lat0);
|
491
510
|
return [Lat, Lng];
|
492
|
-
}
|
493
|
-
|
511
|
+
}
|
512
|
+
|
513
|
+
this.mergeObjectWithDefault = function(object1, object2){
|
514
|
+
var copy_object1 = object1;
|
515
|
+
for (var attrname in object2) {
|
516
|
+
if ( typeof(copy_object1[attrname]) === "undefined") {
|
517
|
+
copy_object1[attrname] = object2[attrname];
|
518
|
+
}
|
519
|
+
}
|
520
|
+
return copy_object1;
|
521
|
+
}
|
522
|
+
|
523
|
+
this.mergeWithDefault = function(objectName){
|
524
|
+
var default_object = this["default_" + objectName];
|
525
|
+
var object = this[objectName];
|
526
|
+
this[objectName] = this.mergeObjectWithDefault(object, default_object);
|
527
|
+
return true;
|
528
|
+
}
|
494
529
|
//gives a value between -1 and 1
|
495
|
-
random
|
530
|
+
this.random = function() { return(Math.random() * 2 -1); }
|
496
531
|
|
497
|
-
}
|
532
|
+
}
|