// Leaflet extensions
L.extend(L.LatLngBounds.prototype, {
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.Icon.Default.imagePath = <%= "#{asset_prefix}/images".to_json %>;
var objectLayer;
var objectLoader;
function mapLayers() {
return [{
layer: new L.OSM.Mapnik(),
keyid: "mapnik",
layerCode: "M",
name: I18n.t("javascripts.map.base.standard")
}, {
layer: new L.OSM.CycleMap( {
attribution: "Tiles courtesy of Andy Allan",
}),
keyid: "cyclemap",
layerCode: "C",
name: I18n.t("javascripts.map.base.cycle_map")
}, {
layer: new L.OSM.TransportMap({
attribution: "Tiles courtesy of Andy Allan",
}),
keyid: "transportmap",
layerCode: "T",
name: I18n.t("javascripts.map.base.transport_map")
}, {
layer: new L.OSM.MapQuestOpen({
attribution: "Tiles courtesy of MapQuest ",
}),
keyid: "mapquest",
layerCode: "Q",
name: I18n.t("javascripts.map.base.mapquest")
}]
}
function getUserIcon(url) {
return L.icon({
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 addObjectToMap(object, map, options) {
if (objectLoader) {
objectLoader.abort();
}
if (objectLayer) {
map.removeLayer(objectLayer);
}
objectLoader = $.ajax({
url: OSM.apiUrl(object),
dataType: "xml",
success: function (xml) {
objectLayer = new L.OSM.DataLayer(null, {
styles: {
node: options.style,
way: options.style,
area: options.style
}
});
objectLayer.interestingNode = function (node, ways, relations) {
if (object.type === "node") {
return true;
} else if (object.type === "relation") {
for (var i = 0; i < relations.length; i++)
if (relations[i].members.indexOf(node) != -1)
return true;
} else {
return false;
}
};
objectLayer.addData(xml);
var bounds = objectLayer.getBounds();
if (options.zoom) {
map.fitBounds(bounds);
}
if (options.callback) {
options.callback(bounds);
}
objectLayer.addTo(map);
}
});
}