openstreetmap-website/app/views/changeset/_map.html.erb
Tom MacWright 701325e9ef Change abstraction level for map functions
This commit should have no functional affect. It just changes the
abstraction level of OpenLayers from completely abstracting away
getMapExtent etc, to using OpenLayers's functionality directly but
providing proj and unproj to make projections palatable.
2012-03-14 19:01:45 +00:00

90 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");
}
function init() {
var map = createMap("changeset_list_map", {
controls: [
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.PanZoom(),
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.setExtent(proj(new OpenLayers.Bounds(<%= @bbox %>)));
<% else %>
map.setExtent(proj(bounds));
<% end %>
}
Event.observe(window, "load", init);
</script>