gmaps4rails 0.9.1 → 0.10.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,172 @@
1
+ // http://www.mapquestapi.com/sdk/js/v6.0.0/poi.html
2
+
3
+ //Map settings
4
+ Gmaps4Rails.map_options.type = "map"; // //map type (map, sat, hyb)
5
+
6
+
7
+ ////////////////////////////////////////////////////
8
+ /////////////// Basic Objects //////////////
9
+ ////////////////////////////////////////////////////
10
+
11
+ Gmaps4Rails.createPoint = function(lat, lng){
12
+ return new MQA.Poi({lat: lat, lng: lng});
13
+ };
14
+
15
+ Gmaps4Rails.createLatLng = function(lat, lng){
16
+ return {lat: lat, lng: lng};
17
+ };
18
+
19
+ Gmaps4Rails.createLatLngBounds = function(){
20
+ };
21
+
22
+
23
+ Gmaps4Rails.createMap = function(){
24
+ var map = new MQA.TileMap( // Constructs an instance of MQA.TileMap
25
+ document.getElementById("mapQuest"), //the id of the element on the page you want the map to be added into
26
+ Gmaps4Rails.map_options.zoom, //intial zoom level of the map
27
+ {lat: Gmaps4Rails.map_options.center_latitude, //the lat/lng of the map to center on
28
+ lng: Gmaps4Rails.map_options.center_longitude},
29
+ Gmaps4Rails.map_options.type); //map type (map, sat, hyb)
30
+ MQA.withModule('zoomcontrol3', function() {
31
+
32
+ map.addControl(
33
+ new MQA.LargeZoomControl3(),
34
+ new MQA.MapCornerPlacement(MQA.MapCorner.TOP_LEFT)
35
+ );
36
+
37
+ });
38
+ return map;
39
+ };
40
+
41
+ Gmaps4Rails.createMarkerImage = function(markerPicture, markerSize, origin, anchor, scaledSize) {
42
+
43
+ };
44
+
45
+
46
+ ////////////////////////////////////////////////////
47
+ ////////////////////// Markers /////////////////////
48
+ ////////////////////////////////////////////////////
49
+
50
+ Gmaps4Rails.createMarker = function(args){
51
+
52
+ var marker = new MQA.Poi( {lat: args.Lat, lng: args.Lng} );
53
+
54
+ if (args.marker_picture !== "" ) {
55
+ var icon = new MQA.Icon(args.marker_picture, args.marker_height, args.marker_width);
56
+ marker.setIcon(icon);
57
+ if(args.marker_anchor !== null) {
58
+ marker.setBias({x: args.marker_anchor[0], y: args.marker_anchor[1]});
59
+ }
60
+ }
61
+
62
+ if (args.shadow_picture !== "" ) {
63
+ var icon = new MQA.Icon(args.shadow_picture, args.shadow_height, args.shadow_width);
64
+ marker.setShadow(icon);
65
+
66
+ if(args.shadow_anchor !== null) {
67
+ marker.setShadowOffset({x: args.shadow_anchor[0], y: args.shadow_anchor[1]});
68
+ }
69
+ }
70
+
71
+ Gmaps4Rails.addToMap(marker);
72
+ return marker;
73
+ };
74
+
75
+
76
+ // clear markers
77
+ Gmaps4Rails.clearMarkers = function() {
78
+ for (var i = 0; i < this.markers.length; ++i) {
79
+ this.clearMarker(this.markers[i]);
80
+ }
81
+ };
82
+
83
+ //show and hide markers
84
+ Gmaps4Rails.showMarkers = function() {
85
+ for (var i = 0; i < this.markers.length; ++i) {
86
+ this.showMarker(this.markers[i]);
87
+ }
88
+ };
89
+
90
+ Gmaps4Rails.hideMarkers = function() {
91
+ for (var i = 0; i < this.markers.length; ++i) {
92
+ this.hideMarker(this.markers[i]);
93
+ }
94
+ };
95
+
96
+ Gmaps4Rails.clearMarker = function(marker) {
97
+ this.removeFromMap(marker.serviceObject);
98
+ };
99
+
100
+ Gmaps4Rails.showMarker = function(marker) {
101
+ // marker.serviceObject
102
+ };
103
+
104
+ Gmaps4Rails.hideMarker = function(marker) {
105
+ // marker.serviceObject
106
+ };
107
+
108
+ Gmaps4Rails.extendBoundsWithMarkers = function(){
109
+
110
+ if (Gmaps4Rails.markers.length >=2) {
111
+ Gmaps4Rails.boundsObject = new MQA.RectLL(Gmaps4Rails.markers[0].serviceObject.latLng, Gmaps4Rails.markers[1].serviceObject.latLng);
112
+
113
+ for (var i = 2; i < Gmaps4Rails.markers.length; ++i) {
114
+ Gmaps4Rails.boundsObject.extend(Gmaps4Rails.markers[i].serviceObject.latLng);
115
+ }
116
+ }
117
+
118
+ };
119
+
120
+ ////////////////////////////////////////////////////
121
+ /////////////////// Clusterer //////////////////////
122
+ ////////////////////////////////////////////////////
123
+
124
+ Gmaps4Rails.createClusterer = function(markers_array){
125
+
126
+ };
127
+
128
+ Gmaps4Rails.clearClusterer = function() {
129
+
130
+ };
131
+
132
+ //creates clusters
133
+ Gmaps4Rails.clusterize = function()
134
+ {
135
+
136
+ };
137
+
138
+ ////////////////////////////////////////////////////
139
+ /////////////////// INFO WINDOW ////////////////////
140
+ ////////////////////////////////////////////////////
141
+
142
+ // creates infowindows
143
+ Gmaps4Rails.createInfoWindow = function(marker_container){
144
+ marker_container.serviceObject.setInfoTitleHTML(marker_container.description);
145
+ //TODO: how to disable the mouseover display when using setInfoContentHTML?
146
+ //marker_container.serviceObject.setInfoContentHTML(marker_container.description);
147
+ };
148
+
149
+ ////////////////////////////////////////////////////
150
+ /////////////////// Other methods //////////////////
151
+ ////////////////////////////////////////////////////
152
+
153
+ Gmaps4Rails.fitBounds = function(){
154
+ if (Gmaps4Rails.markers.length >=2) {
155
+ Gmaps4Rails.map.zoomToRect(Gmaps4Rails.boundsObject);
156
+ }
157
+ if (Gmaps4Rails.markers.length ==1 ) {
158
+ Gmaps4Rails.map.setCenter(Gmaps4Rails.markers[0].serviceObject.latLng);
159
+ }
160
+ };
161
+
162
+ Gmaps4Rails.centerMapOnUser = function(){
163
+ Gmaps4Rails.map.setCenter(Gmaps4Rails.userLocation);
164
+ };
165
+
166
+ Gmaps4Rails.addToMap = function(object){
167
+ Gmaps4Rails.map.addShape(object);
168
+ };
169
+
170
+ Gmaps4Rails.removeFromMap = function(object){
171
+ Gmaps4Rails.map.removeShape(object);
172
+ }
@@ -0,0 +1,259 @@
1
+ ////////////////////////////////////////////////////
2
+ /////////////// Abstracting API calls //////////////
3
+ //(for maybe an extension to another map provider)//
4
+ //////////////////mocks created/////////////////////
5
+ // http://wiki.openstreetmap.org/wiki/OpenLayers
6
+ // http://openlayers.org/dev/examples
7
+ //http://docs.openlayers.org/contents.html
8
+
9
+ Gmaps4Rails.openMarkers = null;
10
+ Gmaps4Rails.markersLayer = null;
11
+ Gmaps4Rails.markersControl = null;
12
+
13
+ ////////////////////////////////////////////////////
14
+ /////////////// Basic Objects ////////////////////
15
+ ////////////////////////////////////////////////////
16
+
17
+ Gmaps4Rails.createPoint = function(lat, lng){
18
+ //return new Microsoft.Maps.Point(lat, lng);
19
+ };
20
+
21
+ Gmaps4Rails.createLatLng = function(lat, lng){
22
+ return new OpenLayers.LonLat(lng, lat)
23
+ .transform(
24
+ new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
25
+ new OpenLayers.Projection("EPSG:900913") // to Spherical Mercator Projection
26
+ );
27
+ };
28
+
29
+ Gmaps4Rails.createAnchor = function(offset){
30
+ if (offset === null)
31
+ { return null; }
32
+ else {
33
+ return new OpenLayers.Pixel(offset[0], offset[1]);
34
+ }
35
+ };
36
+
37
+ Gmaps4Rails.createSize = function(width, height){
38
+ return new OpenLayers.Size(width, height);
39
+ };
40
+
41
+ Gmaps4Rails.createLatLngBounds = function(){
42
+ return new OpenLayers.Bounds();
43
+ };
44
+
45
+ Gmaps4Rails.createMap = function(){
46
+ //todo add customization: kind of map and other map options
47
+ var map = new OpenLayers.Map(Gmaps4Rails.map_options.id);
48
+ map.addLayer(new OpenLayers.Layer.OSM());
49
+ map.setCenter(Gmaps4Rails.createLatLng(Gmaps4Rails.map_options.center_latitude, Gmaps4Rails.map_options.center_longitude), // Center of the map
50
+ Gmaps4Rails.map_options.zoom // Zoom level
51
+ );
52
+ return map;
53
+ };
54
+
55
+ ////////////////////////////////////////////////////
56
+ ////////////////////// Markers /////////////////////
57
+ ////////////////////////////////////////////////////
58
+ //http://openlayers.org/dev/examples/marker-shadow.html
59
+ Gmaps4Rails.createMarker = function(args){
60
+
61
+ var style_mark = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
62
+ style_mark.fillOpacity = 1;
63
+
64
+ //creating markers' dedicated layer
65
+ if (Gmaps4Rails.markersLayer === null) {
66
+ Gmaps4Rails.markersLayer = new OpenLayers.Layer.Vector("Markers", null);
67
+ Gmaps4Rails.map.addLayer(Gmaps4Rails.markersLayer);
68
+ //TODO move?
69
+ Gmaps4Rails.markersLayer.events.register("featureselected", Gmaps4Rails.markersLayer, Gmaps4Rails.onFeatureSelect);
70
+ Gmaps4Rails.markersLayer.events.register("featureunselected", Gmaps4Rails.markersLayer, Gmaps4Rails.onFeatureUnselect);
71
+
72
+ Gmaps4Rails.markersControl = new OpenLayers.Control.SelectFeature(Gmaps4Rails.markersLayer);
73
+ Gmaps4Rails.map.addControl(Gmaps4Rails.markersControl);
74
+ Gmaps4Rails.markersControl.activate();
75
+ }
76
+ //showing default pic if none available
77
+ if (args.marker_picture === "" ) {
78
+ //style_mark.graphicWidth = 24;
79
+ style_mark.graphicHeight = 30;
80
+ style_mark.externalGraphic = "http://openlayers.org/dev/img/marker-blue.png";
81
+ }
82
+ //creating custom pic
83
+ else {
84
+ style_mark.graphicWidth = args.marker_width;
85
+ style_mark.graphicHeight = args.marker_height;
86
+ style_mark.externalGraphic = args.marker_picture;
87
+ //adding anchor if any
88
+ if (args.marker_anchor !== null ){
89
+ style_mark.graphicXOffset = args.marker_anchor[0];
90
+ style_mark.graphicYOffset = args.marker_anchor[1];
91
+ }
92
+ //adding shadow if any
93
+ if (args.shadow_picture !== ""){
94
+ style_mark.backgroundGraphic = args.shadow_picture;
95
+ style_mark.backgroundWidth = args.shadow_width;
96
+ style_mark.backgroundHeight = args.shadow_height;
97
+ //adding shadow's anchor if any
98
+ if(args.shadow_anchor !== null) {
99
+ style_mark.backgroundXOffset = args.shadow_anchor[0];
100
+ style_mark.backgroundYOffset = args.shadow_anchor[1];
101
+ }
102
+ }
103
+ }
104
+
105
+ style_mark.graphicTitle = args.title;
106
+
107
+ var marker = new OpenLayers.Feature.Vector(
108
+ new OpenLayers.Geometry.Point(args.Lng, args.Lat),
109
+ null,
110
+ style_mark
111
+ );
112
+ //changing coordinates so that it actually appears on the map!
113
+ marker.geometry.transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913"));
114
+ //adding layer to the map
115
+ Gmaps4Rails.markersLayer.addFeatures([marker]);
116
+
117
+ return marker;
118
+ };
119
+
120
+ // clear markers
121
+ Gmaps4Rails.clearMarkers = function() {
122
+ Gmaps4Rails.clearMarkersLayerIfExists();
123
+ Gmaps4Rails.markersLayer = null;
124
+ Gmaps4Rails.boundsObject = new OpenLayers.Bounds();
125
+ };
126
+
127
+ Gmaps4Rails.clearMarkersLayerIfExists = function() {
128
+ if (Gmaps4Rails.markersLayer !== null) {
129
+ if (Gmaps4Rails.map.getLayer(Gmaps4Rails.markersLayer.id) !== null) {
130
+ Gmaps4Rails.map.removeLayer(Gmaps4Rails.markersLayer);
131
+ }
132
+ }
133
+ };
134
+
135
+ Gmaps4Rails.extendBoundsWithMarkers = function(){
136
+ for (var i = 0; i < this.markers.length; ++i) {
137
+ Gmaps4Rails.boundsObject.extend(Gmaps4Rails.createLatLng(Gmaps4Rails.markers[i].lat,Gmaps4Rails.markers[i].lng));
138
+ }
139
+ };
140
+ ////////////////////////////////////////////////////
141
+ /////////////////// Clusterer //////////////////////
142
+ ////////////////////////////////////////////////////
143
+ //too ugly to be considered valid :(
144
+
145
+ Gmaps4Rails.createClusterer = function(markers_array){
146
+
147
+ var style = new OpenLayers.Style({
148
+ pointRadius: "${radius}",
149
+ fillColor: "#ffcc66",
150
+ fillOpacity: 0.8,
151
+ strokeColor: "#cc6633",
152
+ strokeWidth: "${width}",
153
+ strokeOpacity: 0.8
154
+ }, {
155
+ context: {
156
+ width: function(feature) {
157
+ return (feature.cluster) ? 2 : 1;
158
+ },
159
+ radius: function(feature) {
160
+ var pix = 2;
161
+ if(feature.cluster) {
162
+ pix = Math.min(feature.attributes.count, 7) + 2;
163
+ }
164
+ return pix;
165
+ }
166
+ }
167
+ });
168
+
169
+ var strategy = new OpenLayers.Strategy.Cluster();
170
+
171
+ var clusters = new OpenLayers.Layer.Vector("Clusters", {
172
+ strategies: [strategy],
173
+ styleMap: new OpenLayers.StyleMap({
174
+ "default": style,
175
+ "select": {
176
+ fillColor: "#8aeeef",
177
+ strokeColor: "#32a8a9"
178
+ }
179
+ })
180
+ });
181
+ Gmaps4Rails.clearMarkersLayerIfExists();
182
+ Gmaps4Rails.map.addLayer(clusters);
183
+ clusters.addFeatures(markers_array);
184
+ return clusters;
185
+ };
186
+
187
+ Gmaps4Rails.clusterize = function() {
188
+
189
+ if (this.markers_conf.do_clustering === true)
190
+ {
191
+ //first clear the existing clusterer if any
192
+ if (this.markerClusterer !== null) {
193
+ this.clearClusterer();
194
+ }
195
+
196
+ var markers_array = new Array;
197
+ for (var i = 0; i < this.markers.length; ++i) {
198
+ markers_array.push(this.markers[i].serviceObject);
199
+ }
200
+
201
+ this.markerClusterer = Gmaps4Rails.createClusterer(markers_array);
202
+ }
203
+
204
+ };
205
+
206
+ Gmaps4Rails.clearClusterer = function() {
207
+ Gmaps4Rails.map.removeLayer(Gmaps4Rails.markerClusterer);
208
+ };
209
+
210
+ ////////////////////////////////////////////////////
211
+ /////////////////// INFO WINDOW ////////////////////
212
+ ////////////////////////////////////////////////////
213
+
214
+ // creates infowindows
215
+ Gmaps4Rails.createInfoWindow = function(marker_container){
216
+ var info_window;
217
+ if (Gmaps4Rails.exists(marker_container.description)) {
218
+ marker_container.serviceObject.infoWindow = marker_container.description;
219
+ }
220
+ };
221
+
222
+ Gmaps4Rails.onPopupClose = function(evt) {
223
+ // 'this' is the popup.
224
+ Gmaps4Rails.markersControl.unselect(this.feature);
225
+ };
226
+
227
+ Gmaps4Rails.onFeatureSelect = function(evt) {
228
+ var feature = evt.feature;
229
+ var popup = new OpenLayers.Popup.FramedCloud("featurePopup",
230
+ feature.geometry.getBounds().getCenterLonLat(),
231
+ new OpenLayers.Size(300,200),
232
+ feature.infoWindow,
233
+ null, true, Gmaps4Rails.onPopupClose);
234
+ feature.popup = popup;
235
+ popup.feature = feature;
236
+ Gmaps4Rails.map.addPopup(popup);
237
+ };
238
+
239
+ Gmaps4Rails.onFeatureUnselect = function(evt) {
240
+ var feature = evt.feature;
241
+ if (feature.popup) {
242
+ //popup.feature = null;
243
+ Gmaps4Rails.map.removePopup(feature.popup);
244
+ feature.popup.destroy();
245
+ feature.popup = null;
246
+ }
247
+ };
248
+
249
+ ////////////////////////////////////////////////////
250
+ /////////////////// Other methods //////////////////
251
+ ////////////////////////////////////////////////////
252
+
253
+ Gmaps4Rails.fitBounds = function(){
254
+ Gmaps4Rails.map.zoomToExtent(Gmaps4Rails.boundsObject, true);
255
+ };
256
+
257
+ Gmaps4Rails.centerMapOnUser = function(){
258
+ Gmaps4Rails.map.setCenter(Gmaps4Rails.userLocation);
259
+ };
@@ -12,4 +12,13 @@
12
12
  #gmaps4rails_map {
13
13
  width: 800px;
14
14
  height: 400px;
15
+ }
16
+
17
+ .bing_map {
18
+ position: absolute;
19
+ top: 20;
20
+ left: 10;
21
+ width: 400px;
22
+ height: 400px;
23
+ border:#555555 2px solid;
15
24
  }
@@ -1,5 +1,4 @@
1
- class UsersController < ApplicationController
2
-
1
+ class UsersController < ApplicationController
3
2
  def index
4
3
  @users = User.all
5
4
  @json = User.all.to_gmaps4rails