// Leaflet extensions
-L.LatLngBounds.include({
+L.extend(L.LatLngBounds.prototype, {
getSouthLat: function () {
return this._southWest.lat;
},
getSize: function () {
return (this._northEast.lat - this._southWest.lat) *
(this._northEast.lng - this._southWest.lng);
+ },
+
+ wrap: function () {
+ return new L.LatLngBounds(this._southWest.wrap(), this._northEast.wrap());
}
});
-L.Bounds.include({
+L.extend(L.Bounds.prototype, {
getWidth: function () {
return this.max.x - this.min.x;
},
}
});
+L.Icon.Default.imagePath = <%= "#{asset_prefix}/images".to_json %>;
+
var map;
var layers = [
];
function createMap(divName, options) {
- map = L.map(divName, options);
+ options = $.extend({zoomControl: true, panZoomControl: true, layerControl: true}, options);
+
+ map = L.map(divName, $.extend({}, options, {panControl: false, zoomsliderControl: false, maxZoom: 18}));
if (map.attributionControl) {
- map.attributionControl.setPrefix(''); // For tmcw
+ map.attributionControl.setPrefix('');
+ }
+
+ if (options.panZoomControl) {
+ new L.Control.Pan().addTo(map);
+ new L.Control.Zoomslider({stepHeight: 7}).addTo(map);
}
var layersControl = L.control.layers();
- if (!options || options.layerControl !== false) {
+ if (options.layerControl) {
layersControl.addTo(map);
+ map.layersControl = layersControl;
}
for (var i = 0; i < layers.length; i++) {
layers[i].layer = new (layers[i].klass)(layers[i]);
- if (i == 0) {
- layers[i].layer.addTo(map);
- }
layersControl.addBaseLayer(layers[i].layer, layers[i].name);
}
+ layers[0].layer.addTo(map);
+
$("#" + divName).on("resized", function () {
map.invalidateSize();
});
return map;
}
-function getArrowIcon() {
+function getUserIcon(url) {
return L.icon({
- iconUrl: <%= asset_path('arrow.png').to_json %>,
- iconSize: [25, 22],
- iconAnchor: [22, 20]
+ iconUrl: url || <%= asset_path('marker-red.png').to_json %>,
+ iconSize: [25, 41],
+ iconAnchor: [12, 41],
+ popupAnchor: [1, -34],
+ shadowUrl: <%= asset_path('images/marker-shadow.png').to_json %>,
+ shadowSize: [41, 41]
});
}
-function addMarkerToMap(position, icon, description) {
- var marker = L.marker(position, icon ? {icon: icon} : null).addTo(map);
-
- if (description) {
- marker.bindPopup(description);
- }
-
- return marker;
-}
-
-function removeMarkerFromMap(marker) {
- map.removeLayer(marker);
-}
-
function addObjectToMap(object, zoom, callback) {
$.ajax({
url: OSM.apiUrl(object),
}
function setMapLayers(layerConfig) {
+ var foundLayer = false;
for (var i = 0; i < layers.length; i++) {
- if (~layerConfig.indexOf(layers[i].layerCode)) {
+ if (layerConfig.indexOf(layers[i].layerCode) >= 0) {
map.addLayer(layers[i].layer);
+ foundLayer = true;
} else {
map.removeLayer(layers[i].layer);
}
}
+ if (!foundLayer) {
+ map.addLayer(layers[0].layer);
+ }
}