leaflet_helper 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/leaflet_helper.gemspec +1 -1
- data/lib/leaflet_helper.rb +197 -18
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fb2e318e079044796d4ead699979deea3b49bdae
|
4
|
+
data.tar.gz: d2a7a881a2824a0270180a5ef632010504f8825c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3cba373b4dd9394014eaa00d163b5631adcba322185ae89d04da101dc354b766bbdf9bc88ab418e9d40857cbed7abe5a5b7fc943e2110f9ddfaf4443cdaae56a
|
7
|
+
data.tar.gz: f6fc47ca34a34c6e980b6c514e19e4302aa22d55ca540faf268a73ce41ae90228ddb2480d5491bdc654612cf736193cbfa475e7102bb79e85d1787a602d1c269
|
data/leaflet_helper.gemspec
CHANGED
data/lib/leaflet_helper.rb
CHANGED
@@ -2,25 +2,55 @@
|
|
2
2
|
|
3
3
|
module LeafletHelper
|
4
4
|
class L
|
5
|
-
VERSION = '0.7.3'
|
6
|
-
@@
|
5
|
+
VERSION = '0.7.3' # of leaflet.js
|
6
|
+
@@map_ids = [] # the div ids of all of the maps
|
7
|
+
@@markers = Hash.new([]) # An array of markers for each map id
|
7
8
|
@@initialized = false
|
9
|
+
|
8
10
|
class << self
|
9
11
|
|
10
|
-
# intended for the
|
11
|
-
def init
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
# intended for the the head section
|
13
|
+
def init(options={})
|
14
|
+
o = {
|
15
|
+
markers: false
|
16
|
+
}.merge(options)
|
17
|
+
|
18
|
+
raise RuntimeError, 'Already initialized' if initialized?
|
19
|
+
initialized!
|
20
|
+
|
21
|
+
leaflet_script = <<~EOS
|
15
22
|
<script type="text/javascript" src="//cdn.leafletjs.com/leaflet-#{VERSION}/leaflet.js"></script>
|
16
23
|
<link rel="stylesheet" href="//cdn.leafletjs.com/leaflet-#{VERSION}/leaflet.css">
|
24
|
+
|
25
|
+
<script>
|
26
|
+
|
27
|
+
// set up AJAX request
|
28
|
+
ajaxRequest = getXmlHttpObject();
|
29
|
+
|
30
|
+
if (ajaxRequest == null) {
|
31
|
+
alert ("This browser does not support HTTP Request");
|
32
|
+
return;
|
33
|
+
}
|
34
|
+
|
35
|
+
// SMELL: this function is not map specific
|
36
|
+
function getXmlHttpObject() {
|
37
|
+
if (window.XMLHttpRequest) { return new XMLHttpRequest(); }
|
38
|
+
if (window.ActiveXObject) { return new ActiveXObject("Microsoft.XMLHTTP"); }
|
39
|
+
return null;
|
40
|
+
}
|
41
|
+
|
42
|
+
</script>
|
43
|
+
|
17
44
|
EOS
|
45
|
+
|
46
|
+
return leaflet_script
|
18
47
|
end # def init
|
19
48
|
|
49
|
+
|
20
50
|
# intended for the body of a web page
|
21
51
|
# hope to support multiple maps on a page
|
22
|
-
def
|
23
|
-
@@
|
52
|
+
def place_map_here(id='map', options={})
|
53
|
+
@@map_ids << id
|
24
54
|
o = {
|
25
55
|
style: "width: 800px; height: 400px"
|
26
56
|
}.merge(options)
|
@@ -29,42 +59,191 @@ module LeafletHelper
|
|
29
59
|
div_options += " #{k.to_s}=" + '"' + v + '"'
|
30
60
|
end
|
31
61
|
return <<~EOS
|
32
|
-
<div id="#{id}"
|
62
|
+
<div id="#{id}"#{div_options}></div>
|
33
63
|
EOS
|
34
64
|
end # def map(id='map')
|
35
65
|
|
66
|
+
|
36
67
|
# Intended for the body at the bottom
|
37
|
-
def
|
68
|
+
def show_map(id="map", options={})
|
38
69
|
o = {
|
39
70
|
latitude: 37.235,
|
40
71
|
longitude: -115.811111,
|
41
72
|
zoom: 9,
|
42
73
|
min_zoom: 2,
|
43
|
-
max_zoom: 22
|
74
|
+
max_zoom: 22
|
44
75
|
}.merge(options)
|
45
|
-
|
46
|
-
|
76
|
+
|
77
|
+
var_name = get_var_name(id)
|
78
|
+
|
79
|
+
leaflet_script = <<~EOS
|
47
80
|
<script>
|
48
81
|
|
49
82
|
// set up the map
|
50
83
|
#{var_name} = new L.Map('#{id}');
|
51
84
|
|
85
|
+
// start the map at a given location and zoom level
|
86
|
+
#{var_name}.setView(new L.LatLng(#{o[:latitude]}, #{o[:longitude]}), #{o[:zoom]});
|
87
|
+
|
88
|
+
</script>
|
89
|
+
EOS
|
90
|
+
|
91
|
+
return leaflet_script
|
92
|
+
end # def show_map(id="map", options={})
|
93
|
+
|
94
|
+
|
95
|
+
# Intended for the body at the bottom
|
96
|
+
def add_openstreetmap_layer(id="map", options={})
|
97
|
+
o = {
|
98
|
+
latitude: 37.235,
|
99
|
+
longitude: -115.811111,
|
100
|
+
zoom: 9,
|
101
|
+
min_zoom: 2,
|
102
|
+
max_zoom: 22
|
103
|
+
}.merge(options)
|
104
|
+
|
105
|
+
var_name = get_var_name(id)
|
106
|
+
|
107
|
+
leaflet_script = <<~EOS
|
108
|
+
<script>
|
109
|
+
|
52
110
|
// create the tile layer with correct attribution
|
53
111
|
var osmUrl ='http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';
|
54
112
|
var osmAttrib ='Map data © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors';
|
55
113
|
var osm = new L.TileLayer(osmUrl, {minZoom: #{o[:min_zoom]}, maxZoom: #{o[:max_zoom]}, attribution: osmAttrib});
|
56
|
-
|
57
|
-
// start the map in South-East England
|
58
|
-
#{var_name}.setView(new L.LatLng(#{o[:latitude]}, #{o[:longitude]}), #{o[:zoom]});
|
59
114
|
|
60
115
|
#{var_name}.addLayer(osm);
|
61
116
|
|
62
117
|
</script>
|
63
118
|
EOS
|
64
|
-
|
119
|
+
|
120
|
+
return leaflet_script
|
121
|
+
end # def add_openstreetmap_layer(id="map", options={})
|
122
|
+
|
123
|
+
|
124
|
+
def add_support_for_markers(id="map", options={})
|
125
|
+
o = {
|
126
|
+
markers: true
|
127
|
+
}.merge(options)
|
128
|
+
|
129
|
+
var_name = get_var_name(id)
|
130
|
+
|
131
|
+
leaflet_script = <<~EOS
|
132
|
+
<script>
|
133
|
+
|
134
|
+
getMarkersFor#{id}(); // askForPlots();
|
135
|
+
#{var_name}.on('moveend', on#{id}Move);
|
136
|
+
|
137
|
+
function on#{id}Move(e) { getMarkersFor#{id}(); }
|
138
|
+
|
139
|
+
|
140
|
+
|
141
|
+
// request the marker info with AJAX for the current bounds
|
142
|
+
function getMarkersFor#{id}() { // was: askForPlots
|
143
|
+
|
144
|
+
var bounds = #{var_name}.getBounds();
|
145
|
+
var minll = bounds.getSouthWest();
|
146
|
+
var maxll = bounds.getNorthEast();
|
147
|
+
|
148
|
+
// FIXME: msg is the URL from which to get markers
|
149
|
+
var msg = 'leaflet/findbybbox.cgi?format=leaflet&bbox='+minll.lng+','+minll.lat+','+maxll.lng+','+maxll.lat;
|
150
|
+
|
151
|
+
ajaxRequest.onreadystatechange = stateChangedFor#{id};
|
152
|
+
ajaxRequest.open('GET', msg, true);
|
153
|
+
ajaxRequest.send(null);
|
154
|
+
}
|
155
|
+
|
156
|
+
|
157
|
+
function stateChangedFor#{id}() { // was: stateChanged
|
158
|
+
|
159
|
+
// if AJAX returned a list of markers, add them to the map
|
160
|
+
if (ajaxRequest.readyState == 4) {
|
161
|
+
|
162
|
+
// use the info here that was returned
|
163
|
+
if (ajaxRequest.status == 200) {
|
164
|
+
plotlist = eval("(" + ajaxRequest.responseText + ")");
|
165
|
+
removeMarkersFrom#{id}();
|
166
|
+
|
167
|
+
for (i=0; i<plotlist.length; i++) {
|
168
|
+
var plotll = new L.LatLng(plotlist[i].lat, plotlist[i].lon, true);
|
169
|
+
var plotmark = new L.Marker(plotll);
|
170
|
+
plotmark.data = plotlist[i];
|
171
|
+
|
172
|
+
#{var_name}.addLayer(plotmark);
|
173
|
+
plotmark.bindPopup("<h3>" + plotlist[i].name + "</h3>" + plotlist[i].details);
|
174
|
+
plotlayers.push(plotmark);
|
175
|
+
} // for
|
176
|
+
|
177
|
+
} // if (ajaxRequest.status == 200)
|
178
|
+
|
179
|
+
} // if (ajaxRequest.readyState == 4)
|
180
|
+
|
181
|
+
} // function stateChangedFor#{id}()
|
182
|
+
|
183
|
+
|
184
|
+
function removeMarkersFrom#{id}() { // was: removeMarkers
|
185
|
+
for (i=0; i<plotlayers.length; i++) {
|
186
|
+
#{var_name}.removeLayer(plotlayers[i]);
|
187
|
+
}
|
188
|
+
plotlayers = [];
|
189
|
+
}
|
190
|
+
|
191
|
+
</script>
|
192
|
+
EOS
|
193
|
+
|
194
|
+
return leaflet_script
|
195
|
+
end # def add_support_for_markers(map_id, map_options)
|
196
|
+
|
197
|
+
|
198
|
+
# TODO: extrach marker methods into a Marker class
|
199
|
+
def add_marker(marker={}, map_id='map')
|
200
|
+
# TODO: add_marker
|
201
|
+
end
|
202
|
+
|
203
|
+
|
204
|
+
def delete_marker(marker={}, map_id='map')
|
205
|
+
# TODO: delete_marker
|
206
|
+
end
|
207
|
+
|
208
|
+
|
209
|
+
def get_var_name(id="map")
|
210
|
+
return "lh_#{id}"
|
211
|
+
end
|
212
|
+
|
213
|
+
|
214
|
+
def comment(a_string='####################################################')
|
215
|
+
return "<!-- #{a_string} -->"
|
216
|
+
end
|
217
|
+
|
218
|
+
|
219
|
+
private
|
220
|
+
|
221
|
+
def initialized!
|
222
|
+
@@initialized = true
|
223
|
+
end
|
224
|
+
|
225
|
+
|
226
|
+
def initialized?
|
227
|
+
@@initialized
|
228
|
+
end
|
65
229
|
|
66
230
|
|
67
231
|
|
68
232
|
end # class << self
|
69
233
|
end # class L
|
70
234
|
end # module LeafletHelper
|
235
|
+
|
236
|
+
|
237
|
+
__END__
|
238
|
+
|
239
|
+
A JSON marker array with one entry looks like this:
|
240
|
+
|
241
|
+
[
|
242
|
+
{
|
243
|
+
"name":"Tunbridge Wells, Langton Road, Burnt Cottage",
|
244
|
+
"lon":"0.213102",
|
245
|
+
"lat":"51.1429",
|
246
|
+
"details":"A Grade II listed five bedroom wing in need of renovation."
|
247
|
+
}
|
248
|
+
]
|
249
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: leaflet_helper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dewayne VanHoozer
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-06-
|
11
|
+
date: 2016-06-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|