// 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 objectLayer;
+var objectLoader;
var layers = [
{
];
function createMap(divName, options) {
- options = $.extend({zoomControl: false, panZoomControl: true, layerControl: true}, 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) {
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);
+function addObjectToMap(object, zoom, callback) {
+ if (objectLoader) {
+ objectLoader.abort();
}
- return marker;
-}
-
-function removeMarkerFromMap(marker) {
- map.removeLayer(marker);
-}
+ if (objectLayer) {
+ map.removeLayer(objectLayer);
+ }
-function addObjectToMap(object, zoom, callback) {
- $.ajax({
+ objectLoader = $.ajax({
url: OSM.apiUrl(object),
dataType: "xml",
success: function (xml) {
- var layer = new L.OSM.DataLayer(xml, {
+ objectLayer = new L.OSM.DataLayer(xml, {
style: {
strokeColor: "blue",
strokeWidth: 3,
}
});
- var bounds = layer.getBounds();
+ var bounds = objectLayer.getBounds();
if (zoom) {
map.fitBounds(bounds);
callback(bounds);
}
- layer.addTo(map);
+ objectLayer.addTo(map);
}
});
}
}
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);
+ }
}