aboutsummaryrefslogtreecommitdiffstats
path: root/web/js/map-OpenStreetMap.js
diff options
context:
space:
mode:
Diffstat (limited to 'web/js/map-OpenStreetMap.js')
-rw-r--r--web/js/map-OpenStreetMap.js76
1 files changed, 69 insertions, 7 deletions
diff --git a/web/js/map-OpenStreetMap.js b/web/js/map-OpenStreetMap.js
index 04237e075..c5aa318b0 100644
--- a/web/js/map-OpenStreetMap.js
+++ b/web/js/map-OpenStreetMap.js
@@ -1,5 +1,5 @@
YAHOO.util.Event.onContentReady('map', function() {
- var map = new OpenLayers.Map("map", {
+ fixmystreet.map = new OpenLayers.Map("map", {
controls: [
new OpenLayers.Control.ArgParser(),
//new OpenLayers.Control.LayerSwitcher(),
@@ -8,20 +8,82 @@ YAHOO.util.Event.onContentReady('map', function() {
],
displayProjection: new OpenLayers.Projection("EPSG:4326")
});
- var streetview = new fixmystreet.map_type("", {
+ var osm = new fixmystreet.map_type("", {
zoomOffset: 14,
numZoomLevels: 4
});
- map.addLayer(streetview);
+ fixmystreet.map.addLayer(osm);
- var centre = new OpenLayers.LonLat( fixmystreet.easting, fixmystreet.northing );
+ var centre = new OpenLayers.LonLat( fixmystreet.longitude, fixmystreet.latitude );
centre.transform(
- new OpenLayers.Projection("EPSG:27700"),
- map.getProjectionObject()
+ new OpenLayers.Projection("EPSG:4326"),
+ fixmystreet.map.getProjectionObject()
);
- map.setCenter(centre, 2);
+ fixmystreet.map.setCenter(centre, 2);
+
+ if (document.getElementById('mapForm')) {
+ var click = new OpenLayers.Control.Click();
+ fixmystreet.map.addControl(click);
+ click.activate();
+ }
+
+ var markers = new OpenLayers.Layer.Markers("Markers");
+ var cols = { 'red':'R', 'green':'G', 'blue':'B', 'purple':'P' };
+ for (var i=0; i<fixmystreet.pins.length; i++) {
+ var pin = fixmystreet.pins[i];
+ var src = '/i/pin' + cols[pin[2]] + '.gif';
+ var size = new OpenLayers.Size(32, 59);
+ var offset = new OpenLayers.Pixel(-3, -size.h-2);
+ var icon = new OpenLayers.Icon(src, size, offset);
+ var loc = new OpenLayers.LonLat(pin[1], pin[0]);
+ loc.transform(
+ new OpenLayers.Projection("EPSG:4326"),
+ fixmystreet.map.getProjectionObject()
+ );
+ var marker = new OpenLayers.Marker(loc, icon);
+ if (pin[3]) {
+ marker.events.register('click', marker, function(evt) { window.location = '/report/' + pin[3]; OpenLayers.Event.stop(evt); });
+ }
+ markers.addMarker(marker);
+ }
+ fixmystreet.map.addLayer(markers);
+
});
+OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, {
+ defaultHandlerOptions: {
+ 'single': true,
+ 'double': false,
+ 'pixelTolerance': 0,
+ 'stopSingle': false,
+ 'stopDouble': false
+ },
+
+ initialize: function(options) {
+ this.handlerOptions = OpenLayers.Util.extend(
+ {}, this.defaultHandlerOptions
+ );
+ OpenLayers.Control.prototype.initialize.apply(
+ this, arguments
+ );
+ this.handler = new OpenLayers.Handler.Click(
+ this, {
+ 'click': this.trigger
+ }, this.handlerOptions
+ );
+ },
+
+ trigger: function(e) {
+ var lonlat = fixmystreet.map.getLonLatFromViewPortPx(e.xy);
+ lonlat.transform(
+ fixmystreet.map.getProjectionObject(),
+ new OpenLayers.Projection("EPSG:4326")
+ );
+ document.getElementById('fixmystreet.latitude').value = lonlat.lat;
+ document.getElementById('fixmystreet.longitude').value = lonlat.lon;
+ document.getElementById('mapForm').submit();
+ }
+});
// http://www.openstreetmap.org/openlayers/OpenStreetMap.js (added maxResolution)