diff options
author | Dave Arter <davea@mysociety.org> | 2017-11-21 11:34:29 +0000 |
---|---|---|
committer | Dave Arter <davea@mysociety.org> | 2018-04-10 10:42:33 +0100 |
commit | cfacd7dc51ae92f593a7001f481199ee9021b17f (patch) | |
tree | ff55c5f3385d5f93b3d5ebee4c758fc7d67e5ab0 /web/cobrands/bathnes/js.js | |
parent | 8c135e97beb5850b116275f3a76a606a9d7a705c (diff) |
[BANES] Add BathNES map type & assets
BANES have some staff-only assets, so this adds a cobrand hook
to enable extra JS to be included on the page for staff users.
- Add custom OpenLayers build with GeoJSON support
- Add grit bins/street lights/LLPG asset layers
- Displays non-BANES street light assets in grey
- Add adopted highways to map
This means USRNs will be set for reports made by members of the public.
To keep the map simple, however, the highways layer is invisible to
non-staff users.
Diffstat (limited to 'web/cobrands/bathnes/js.js')
-rw-r--r-- | web/cobrands/bathnes/js.js | 193 |
1 files changed, 193 insertions, 0 deletions
diff --git a/web/cobrands/bathnes/js.js b/web/cobrands/bathnes/js.js new file mode 100644 index 000000000..82f978def --- /dev/null +++ b/web/cobrands/bathnes/js.js @@ -0,0 +1,193 @@ +(function(){ + +if (!fixmystreet.maps) { + return; +} + +fixmystreet.maps.banes_defaults = { + http_options: { + url: "https://isharemaps.bathnes.gov.uk/getows.ashx", + params: { + mapsource: "BathNES/WFS", + SERVICE: "WFS", + VERSION: "1.1.0", + REQUEST: "GetFeature", + TYPENAME: "", + SRSNAME: "urn:ogc:def:crs:EPSG::27700", + outputFormat: 'application/json' + } + }, + format_class: OpenLayers.Format.GeoJSON, + format_options: {ignoreExtraDims: true}, + strategy_class: OpenLayers.Strategy.FixMyStreet, + asset_category: "", + asset_item: "asset", + asset_type: 'spot', + max_resolution: 2.388657133579254, + min_resolution: 0.5971642833948135, + asset_id_field: 'feature_no', + attributes: null, + geometryName: 'msGeometry', + srsName: "EPSG:27700" +}; + + +fixmystreet.assets.add($.extend(true, {}, fixmystreet.maps.banes_defaults, { + http_options: { + params: { + TYPENAME: "Gritbins" + } + }, + asset_category: "Grit bin issue", + asset_item: "grit bin", + attributes: { + asset_details: 'feature_location' + } +})); + + + +/* + * Street lights are included/styled according to their owner. + */ + +var banes_ownernames = [ + "B&NES CAR PARKS", + "B&NES PARKS", + "B&NES PROPERTY", + "B&NES HIGHWAYS" +]; + +// Some are excluded from the map entirely +var exclude_ownernames = [ + "EXCEPTIONS" +]; + +function include_feature(f) { + return f && + f.attributes && + f.attributes.ownername && + exclude_ownernames.indexOf(f.attributes.ownername) == -1; +} + +function banes_owns_feature(f) { + return f && + f.attributes && + f.attributes.ownername && + banes_ownernames.indexOf(f.attributes.ownername) > -1 && + include_feature(f); +} + +function banes_does_not_own_feature(f) { + return !banes_owns_feature(f) && + include_feature(f); +} + +var lighting_default_style = new OpenLayers.Style({ + fillColor: "#868686", + fillOpacity: 0.6, + strokeColor: "#000000", + strokeOpacity: 0.6, + strokeWidth: 2, + pointRadius: 4, + title: '${unitdescription} ${unitno}\r\nNot owned by B&NES. Owned by ${ownername}.' +}); + +var rule_owned = new OpenLayers.Rule({ + filter: new OpenLayers.Filter.FeatureId({ + type: OpenLayers.Filter.Function, + evaluate: banes_owns_feature + }), + symbolizer: { + fillColor: "#FFFF00", + pointRadius: 6, + title: '${unitdescription} ${unitno}', + } +}); + +var rule_not_owned = new OpenLayers.Rule({ + filter: new OpenLayers.Filter.FeatureId({ + type: OpenLayers.Filter.Function, + evaluate: banes_does_not_own_feature + }) +}); +lighting_default_style.addRules([rule_owned, rule_not_owned]); + +// XXX fixmystreet.pin_prefix isn't always available here (e.g. on /report/new), +// so get it from the DOM directly +var pin_prefix = fixmystreet.pin_prefix || document.getElementById('js-map-data').getAttribute('data-pin_prefix'); + +var lighting_stylemap = new OpenLayers.StyleMap({ + 'default': lighting_default_style, + 'select': new OpenLayers.Style({ + externalGraphic: pin_prefix + "pin-spot.png", + fillColor: "#55BB00", + graphicWidth: 48, + graphicHeight: 64, + graphicXOffset: -24, + graphicYOffset: -56, + backgroundGraphic: pin_prefix + "pin-shadow.png", + backgroundWidth: 60, + backgroundHeight: 30, + backgroundXOffset: -7, + backgroundYOffset: -22, + popupYOffset: -40, + graphicOpacity: 1.0 + }), + 'hover': new OpenLayers.Style({ + pointRadius: 8, + cursor: 'pointer' + }) + +}); + + +fixmystreet.assets.add($.extend(true, {}, fixmystreet.maps.banes_defaults, { + http_options: { + params: { + TYPENAME: "StreetLighting" + } + }, + asset_category: "Street Light Fault", + asset_item: "street light", + stylemap: lighting_stylemap, + attributes: { + unitid: "unitid", + asset_details: function() { + var a = this.attributes; + return "street: " + a.street + "\n" + + "owner: " + a.ownername + "\n" + + "unitno: " + a.unitno + "\n" + + "lamp: " + a.lamp + "\n" + + "lampclass: " + a.lampclass + "\n" + + "description: " + a.unitdescription; + } + } +})); + + +var highways_stylemap = new OpenLayers.StyleMap({ + 'default': new OpenLayers.Style({ + fill: false, + stroke: false + }) +}); + +fixmystreet.assets.add($.extend(true, {}, fixmystreet.maps.banes_defaults, { + http_options: { + params: { + TYPENAME: "AdoptedHighways" + } + }, + stylemap: highways_stylemap, + non_interactive: true, + always_visible: true, + usrn: { + attribute: 'usrn', + field: 'usrn' + }, + name: "Adopted Highways" +})); + + +})(); |