openstreetmap-website/app/views/changeset/_map.html.erb
Sarah Hoffmann d97d3f76a6 Replace PanZoom control with Zoom control for small maps
In OpenLayers 2.12 the event handling of PanZoom and PanZoomBar clashes
with the result that the zoom level changes by two steps every time one
of the zoom buttons is pressed. Using the Zoom control fixes this issue.
2012-07-16 18:05:02 +01:00

88 lines
2.2 KiB
Text

<%= javascript_include_tag 'openlayers.js' %>
<%= javascript_include_tag 'map.js' %>
<div id="changeset_list_map">
</div>
<script type="text/javascript">
OpenLayers.Lang.setCode("<%= I18n.locale.to_s %>");
var highlight;
function highlightChangeset(id) {
var feature = vectors.getFeatureByFid(id);
var bounds = feature.geometry.getBounds();
if (bounds.containsBounds(map.getExtent())) {
bounds = map.getExtent().scale(1.1);
}
if (highlight) vectors.removeFeatures(highlight);
highlight = new OpenLayers.Feature.Vector(bounds.toGeometry(), {}, {
strokeWidth: 2,
strokeColor: "#ee9900",
fillColor: "#ffff55",
fillOpacity: 0.5
});
vectors.addFeatures(highlight);
$("#tr-changeset-" + id).addClass("selected");
}
function unHighlightChangeset(id) {
vectors.removeFeatures(highlight);
$("#tr-changeset-" + id).removeClass("selected");
}
$(document).ready(function () {
var map = createMap("changeset_list_map", {
controls: [
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.Zoom(),
new OpenLayers.Control.PanZoomBar()
]
});
var bounds = new OpenLayers.Bounds();
<% @edits.each do |edit| %>
<% if edit.has_valid_bbox? %>
<% bbox = edit.bbox.to_unscaled %>
var minlon = <%= bbox.min_lon %>;
var minlat = <%= bbox.min_lat %>;
var maxlon = <%= bbox.max_lon %>;
var maxlat = <%= bbox.max_lat %>;
var bbox = new OpenLayers.Bounds(minlon, minlat, maxlon, maxlat);
bounds.extend(bbox);
addBoxToMap(bbox, "<%= edit.id %>", true);
<% end %>
<% end %>
vectors.events.on({
"featureselected": function(feature) {
highlightChangeset(feature.feature.fid);
},
"featureunselected": function(feature) {
unHighlightChangeset(feature.feature.fid);
}
});
var selectControl = new OpenLayers.Control.SelectFeature(vectors, {
multiple: false,
hover: true
});
map.addControl(selectControl);
selectControl.activate();
<% if ! @bbox.nil? %>
map.zoomToExtent(proj(new OpenLayers.Bounds(<%= @bbox %>)));
<% else %>
map.zoomToExtent(proj(bounds));
<% end %>
});
</script>