1 | /**
|
---|
2 | * Namespace: Util.OSM
|
---|
3 | */
|
---|
4 | OpenLayers.Util.OSM = {};
|
---|
5 |
|
---|
6 | /**
|
---|
7 | * Constant: MISSING_TILE_URL
|
---|
8 | * {String} URL of image to display for missing tiles
|
---|
9 | */
|
---|
10 | OpenLayers.Util.OSM.MISSING_TILE_URL = "http://openstreetmap.org/openlayers/img/404.png";
|
---|
11 |
|
---|
12 | /**
|
---|
13 | * Property: originalOnImageLoadError
|
---|
14 | * {Function} Original onImageLoadError function.
|
---|
15 | */
|
---|
16 | OpenLayers.Util.OSM.originalOnImageLoadError = OpenLayers.Util.onImageLoadError;
|
---|
17 |
|
---|
18 | /**
|
---|
19 | * Function: onImageLoadError
|
---|
20 | */
|
---|
21 | OpenLayers.Util.onImageLoadError = function() {
|
---|
22 | if (this.src.match(/^http:\/\/[abc]\.[a-z]+\.openstreetmap\.org\//)) {
|
---|
23 | this.src = OpenLayers.Util.OSM.MISSING_TILE_URL;
|
---|
24 | } if (this.src.match(/^http:\/\/[def]\.tah\.openstreetmap\.org\//) == null) {
|
---|
25 | OpenLayers.Util.OSM.originalOnImageLoadError;
|
---|
26 | }
|
---|
27 | };
|
---|
28 |
|
---|
29 | function get_balanced_urls(prefix, balancers, suffix) {
|
---|
30 | var urls = [];
|
---|
31 | for (var i=0; i < balancers.length; i++) {
|
---|
32 | urls.push(prefix + balancers[i] + suffix);
|
---|
33 | };
|
---|
34 | return urls;
|
---|
35 | };
|
---|
36 |
|
---|
37 |
|
---|
38 |
|
---|
39 | /**
|
---|
40 | * Class: OpenLayers.Layer.OSM.Mapnik
|
---|
41 | *
|
---|
42 | * Inherits from:
|
---|
43 | * - <OpenLayers.Layer.OSM>
|
---|
44 | */
|
---|
45 | OpenLayers.Layer.OSM.Mapnik = OpenLayers.Class(OpenLayers.Layer.OSM, {
|
---|
46 | /**
|
---|
47 | * Constructor: OpenLayers.Layer.OSM.Mapnik
|
---|
48 | *
|
---|
49 | * Parameters:
|
---|
50 | * name - {String}
|
---|
51 | * options - {Object} Hashtable of extra options to tag onto the layer
|
---|
52 | */
|
---|
53 | initialize: function(name, options) {
|
---|
54 | var url = get_balanced_urls('{{ settings.OSM_PROXY_CDN_DOMAINS_PROTOCOL }}', {{ settings.OSM_PROXY_CDN_DOMAINS|safe }}, '{{ settings.OSM_PREFIX }}/${z}/${x}/${y}.png');
|
---|
55 | options = OpenLayers.Util.extend({ numZoomLevels: 19 }, options);
|
---|
56 | var newArguments = [name, url, options];
|
---|
57 | OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments);
|
---|
58 | },
|
---|
59 |
|
---|
60 | CLASS_NAME: "OpenLayers.Layer.OSM.Mapnik"
|
---|
61 | });
|
---|
62 |
|
---|
63 | /**
|
---|
64 | * Class: OpenLayers.Layer.OSM.Osmarender
|
---|
65 | *
|
---|
66 | * Inherits from:
|
---|
67 | * - <OpenLayers.Layer.OSM>
|
---|
68 | */
|
---|
69 | OpenLayers.Layer.OSM.Osmarender = OpenLayers.Class(OpenLayers.Layer.OSM, {
|
---|
70 | /**
|
---|
71 | * Constructor: OpenLayers.Layer.OSM.Osmarender
|
---|
72 | *
|
---|
73 | * Parameters:
|
---|
74 | * name - {String}
|
---|
75 | * options - {Object} Hashtable of extra options to tag onto the layer
|
---|
76 | */
|
---|
77 | initialize: function(name, options) {
|
---|
78 | var url = [
|
---|
79 | "http://a.tah.openstreetmap.org/Tiles/tile/${z}/${x}/${y}.png",
|
---|
80 | "http://b.tah.openstreetmap.org/Tiles/tile/${z}/${x}/${y}.png",
|
---|
81 | "http://c.tah.openstreetmap.org/Tiles/tile/${z}/${x}/${y}.png"
|
---|
82 | ];
|
---|
83 | options = OpenLayers.Util.extend({ numZoomLevels: 18 }, options);
|
---|
84 | var newArguments = [name, url, options];
|
---|
85 | OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments);
|
---|
86 | },
|
---|
87 |
|
---|
88 | CLASS_NAME: "OpenLayers.Layer.OSM.Osmarender"
|
---|
89 | });
|
---|
90 |
|
---|
91 | /**
|
---|
92 | * Class: OpenLayers.Layer.OSM.CycleMap
|
---|
93 | *
|
---|
94 | * Inherits from:
|
---|
95 | * - <OpenLayers.Layer.OSM>
|
---|
96 | */
|
---|
97 | OpenLayers.Layer.OSM.CycleMap = OpenLayers.Class(OpenLayers.Layer.OSM, {
|
---|
98 | /**
|
---|
99 | * Constructor: OpenLayers.Layer.OSM.CycleMap
|
---|
100 | *
|
---|
101 | * Parameters:
|
---|
102 | * name - {String}
|
---|
103 | * options - {Object} Hashtable of extra options to tag onto the layer
|
---|
104 | */
|
---|
105 | initialize: function(name, options) {
|
---|
106 | var url = [
|
---|
107 | "http://a.andy.sandbox.cloudmade.com/tiles/cycle/${z}/${x}/${y}.png",
|
---|
108 | "http://b.andy.sandbox.cloudmade.com/tiles/cycle/${z}/${x}/${y}.png",
|
---|
109 | "http://c.andy.sandbox.cloudmade.com/tiles/cycle/${z}/${x}/${y}.png"
|
---|
110 | ];
|
---|
111 | options = OpenLayers.Util.extend({ numZoomLevels: 19 }, options);
|
---|
112 | var newArguments = [name, url, options];
|
---|
113 | OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments);
|
---|
114 | },
|
---|
115 |
|
---|
116 | CLASS_NAME: "OpenLayers.Layer.OSM.CycleMap"
|
---|
117 | });
|
---|
118 |
|
---|
119 | /**
|
---|
120 | * Class: OpenLayers.Layer.OSM.Maplint
|
---|
121 | *
|
---|
122 | * Inherits from:
|
---|
123 | * - <OpenLayers.Layer.OSM>
|
---|
124 | */
|
---|
125 | OpenLayers.Layer.OSM.Maplint = OpenLayers.Class(OpenLayers.Layer.OSM, {
|
---|
126 | /**
|
---|
127 | * Constructor: OpenLayers.Layer.OSM.Maplint
|
---|
128 | *
|
---|
129 | * Parameters:
|
---|
130 | * name - {String}
|
---|
131 | * options - {Object} Hashtable of extra options to tag onto the layer
|
---|
132 | */
|
---|
133 | initialize: function(name, options) {
|
---|
134 | var url = [
|
---|
135 | "http://d.tah.openstreetmap.org/Tiles/maplint/${z}/${x}/${y}.png",
|
---|
136 | "http://e.tah.openstreetmap.org/Tiles/maplint/${z}/${x}/${y}.png",
|
---|
137 | "http://f.tah.openstreetmap.org/Tiles/maplint/${z}/${x}/${y}.png"
|
---|
138 | ];
|
---|
139 | options = OpenLayers.Util.extend({ numZoomLevels: 21, isBaseLayer: false, visibility: false }, options);
|
---|
140 | var newArguments = [name, url, options];
|
---|
141 | OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments);
|
---|
142 | },
|
---|
143 |
|
---|
144 | CLASS_NAME: "OpenLayers.Layer.OSM.Maplint"
|
---|
145 | });
|
---|
146 |
|
---|
147 | /**
|
---|
148 | * Gheat layer
|
---|
149 | */
|
---|
150 | OpenLayers.Layer.OSM.Overlay1 = OpenLayers.Class(OpenLayers.Layer.OSM, {
|
---|
151 | initialize: function(name, options) {
|
---|
152 | var url = [
|
---|
153 | "/gheat/classic/${z}/${x},${y}.png"
|
---|
154 | ];
|
---|
155 | options = OpenLayers.Util.extend({ numZoomLevels: 21 }, options);
|
---|
156 | var newArguments = [name, url, options];
|
---|
157 | OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments);
|
---|
158 | },
|
---|
159 | colour: "0,0,0",
|
---|
160 | CLASS_NAME: "OpenLayers.Layer.Overlay"
|
---|
161 | });
|
---|
162 |
|
---|
163 | /**
|
---|
164 | * All accesspoints
|
---|
165 | */
|
---|
166 | OpenLayers.Layer.OSM.Overlay2 = OpenLayers.Class(OpenLayers.Layer.OSM, {
|
---|
167 | initialize: function(name, options) {
|
---|
168 | var url = get_balanced_urls('{{ settings.DJANGO_CDN_DOMAINS_PROTOCOL }}' , {{ settings.DJANGO_CDN_DOMAINS|safe }},
|
---|
169 | '{{ settings.DJANGO_PREFIX }}/wlheatmap/tile/${z}/${x},${y}.png?colour=90,90,90');
|
---|
170 | options = OpenLayers.Util.extend({ numZoomLevels: 21 }, options);
|
---|
171 | var newArguments = [name, url, options];
|
---|
172 | OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments);
|
---|
173 | },
|
---|
174 | colour: "90,90,90",
|
---|
175 | CLASS_NAME: "OpenLayers.Layer.Overlay"
|
---|
176 | });
|
---|
177 |
|
---|
178 | /**
|
---|
179 | * Wireless Leiden nodes
|
---|
180 | */
|
---|
181 | OpenLayers.Layer.OSM.Overlay3 = OpenLayers.Class(OpenLayers.Layer.OSM, {
|
---|
182 | initialize: function(name, options) {
|
---|
183 | var url = get_balanced_urls('{{ settings.DJANGO_CDN_DOMAINS_PROTOCOL }}', {{ settings.DJANGO_CDN_DOMAINS|safe }},
|
---|
184 | '{{ settings.DJANGO_PREFIX }}/wlheatmap/tile/${z}/${x},${y}.png?colour=255,0,0&accesspoint__organization__name__startswith=Wireless&accesspoint__type=accesspoint');
|
---|
185 | options = OpenLayers.Util.extend({ numZoomLevels: 21 }, options);
|
---|
186 | var newArguments = [name, url, options];
|
---|
187 | OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments);
|
---|
188 | },
|
---|
189 | colour: "255,0,0",
|
---|
190 | CLASS_NAME: "OpenLayers.Layer.Overlay"
|
---|
191 | });
|
---|
192 |
|
---|
193 | /**
|
---|
194 | * Signal strength
|
---|
195 | */
|
---|
196 | OpenLayers.Layer.OSM.Overlay4 = OpenLayers.Class(OpenLayers.Layer.OSM, {
|
---|
197 | initialize: function(name, options) {
|
---|
198 | var url = get_balanced_urls('{{ settings.DJANGO_CDN_DOMAINS_PROTOCOL }}', {{ settings.DJANGO_CDN_DOMAINS|safe }},
|
---|
199 | '{{ settings.DJANGO_PREFIX }}/wlheatmap/tile/${z}/${x},${y}.png?colour=50,150,50&signaal__gte=0&signaal__lte=100');
|
---|
200 | options = OpenLayers.Util.extend({ numZoomLevels: 21 }, options);
|
---|
201 | var newArguments = [name, url, options];
|
---|
202 | OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments);
|
---|
203 | },
|
---|
204 | colour: "50,150,50",
|
---|
205 | CLASS_NAME: "OpenLayers.Layer.Overlay"
|
---|
206 | });
|
---|
207 |
|
---|
208 | // create the layer styleMap by giving the default style a context
|
---|
209 | var context = {
|
---|
210 | getSize: function(feature) {
|
---|
211 | var resolution = map.getResolution();
|
---|
212 | var scale = map.getZoom();
|
---|
213 | var base = 1;
|
---|
214 | if (scale > 16) {
|
---|
215 | base = 5;
|
---|
216 | } else if (scale > 14) {
|
---|
217 | base = 20;
|
---|
218 | } else {
|
---|
219 | base = 50;
|
---|
220 | }
|
---|
221 | return (base / map.getResolution());
|
---|
222 | },
|
---|
223 | getColor: function(feature) {
|
---|
224 | return feature.attributes.color;
|
---|
225 |
|
---|
226 | }
|
---|
227 | };
|
---|
228 | var template = {
|
---|
229 | pointRadius: "${getSize}", // using context.getSize(feature)
|
---|
230 | fillColor: "${getColor}", // using context.getColor(feature)
|
---|
231 | strokeWidth: 0.5
|
---|
232 | };
|
---|
233 | var nodesStyle = new OpenLayers.Style(template, {context: context});
|
---|
234 |
|
---|
235 | OpenLayers.Layer.GML.NodesOverlay = OpenLayers.Class(OpenLayers.Layer.GML, {
|
---|
236 | initialize: function(name, options) {
|
---|
237 | var url = "{% url wlheatmap.feature.nodes_json %}";
|
---|
238 | options = OpenLayers.Util.extend({ numZoomLevels: 21 }, options);
|
---|
239 | var newArguments = [name, url, options];
|
---|
240 | OpenLayers.Layer.GML.prototype.initialize.apply(this, newArguments);
|
---|
241 | },
|
---|
242 | colour: '0,255,0',
|
---|
243 | projection: new OpenLayers.Projection("EPSG:4326"),
|
---|
244 | styleMap: new OpenLayers.StyleMap(nodesStyle),
|
---|
245 | format: OpenLayers.Format.GeoJSON,
|
---|
246 | CLASS_NAME: "OpenLayers.Layer.Overlay"
|
---|
247 | });
|
---|
248 |
|
---|