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.
This commit is contained in:
Tom MacWright 2012-03-12 12:52:40 -04:00 committed by Tom Hughes
parent 31ebfc8ed0
commit 701325e9ef
6 changed files with 29 additions and 38 deletions

View file

@ -88,12 +88,14 @@ function getArrowIcon() {
}
function addMarkerToMap(position, icon, description) {
var marker = new OpenLayers.Marker(position.clone().transform(epsg4326, map.getProjectionObject()), icon);
var marker = new OpenLayers.Marker(proj(position), icon);
markers.addMarker(marker);
if (description) {
marker.events.register("mouseover", marker, function() { openMapPopup(marker, description) });
marker.events.register("mouseover", marker, function() {
openMapPopup(marker, description);
});
}
return marker;
@ -155,9 +157,9 @@ function addBoxToMap(boxbounds, id, outline) {
if (outline) {
vertices = boxbounds.toGeometry().getVertices();
vertices.push(new OpenLayers.Geometry.Point(vertices[0].x, vertices[0].y));
geometry = new OpenLayers.Geometry.LineString(vertices).transform(epsg4326, map.getProjectionObject());
geometry = proj(new OpenLayers.Geometry.LineString(vertices));
} else {
geometry = boxbounds.toGeometry().transform(epsg4326, map.getProjectionObject());
geometry = proj(boxbounds.toGeometry());
}
var box = new OpenLayers.Feature.Vector(geometry, {}, {
strokeWidth: 2,
@ -197,27 +199,19 @@ function removeBoxFromMap(box){
vectors.removeFeature(box);
}
function getMapCenter() {
return map.getCenter().clone().transform(map.getProjectionObject(), epsg4326);
function proj(x) {
return x.clone().transform(epsg4326, map.getProjectionObject());
}
function unproj(x) {
return x.clone().transform(map.getProjectionObject(), epsg4326);
}
function setMapCenter(center, zoom) {
zoom = parseInt(zoom);
zoom = parseInt(zoom, 10);
var numzoom = map.getNumZoomLevels();
if (zoom >= numzoom) zoom = numzoom - 1;
map.setCenter(center.clone().transform(epsg4326, map.getProjectionObject()), zoom);
}
function setMapExtent(extent) {
map.zoomToExtent(extent.clone().transform(epsg4326, map.getProjectionObject()));
}
function getMapExtent() {
return map.getExtent().clone().transform(map.getProjectionObject(), epsg4326);
}
function getMapZoom() {
return map.getZoom();
map.setCenter(proj(center), zoom);
}
function getEventPosition(event) {
@ -265,7 +259,3 @@ function setMapLayers(layerConfig) {
}
}
}
function scaleToZoom(scale) {
return Math.log(360.0/(scale * 512.0)) / Math.log(2.0);
}

View file

@ -79,7 +79,7 @@
var bbox = new OpenLayers.Bounds(minlon, minlat, maxlon, maxlat);
var centre = bbox.getCenterLonLat();
setMapExtent(bbox);
map.setExtent(proj(bbox));
addBoxToMap(bbox);
$("#loading").hide();

View file

@ -80,9 +80,9 @@
selectControl.activate();
<% if ! @bbox.nil? %>
setMapExtent(new OpenLayers.Bounds(<%= @bbox %>));
map.setExtent(proj(new OpenLayers.Bounds(<%= @bbox %>)));
<% else %>
setMapExtent(bounds);
map.setExtent(proj(bounds));
<% end %>
}

View file

@ -15,7 +15,7 @@
$("#sidebar_title").html("<%= t 'site.sidebar.search_results' %>");
<% if params[:action] == 'index' -%>
var extent = getMapExtent();
var extent = unproj(map.getExtent());
$("#sidebar_content").load("<%= url_for :controller => :geocoder, :action => :search %>", {
query: $("#query").val(),

View file

@ -144,7 +144,7 @@ end
<% if bbox %>
var bbox = new OpenLayers.Bounds(<%= minlon %>, <%= minlat %>, <%= maxlon %>, <%= maxlat %>);
setMapExtent(bbox);
map.setExtent(proj(bbox));
<% if box %>
$(window).load(function() { addBoxToMap(bbox) });
@ -153,8 +153,8 @@ end
var centre = new OpenLayers.LonLat(<%= lon %>, <%= lat %>);
var zoom = <%= zoom %>;
<% if params[:scale] and params[:scale].length > 0 then %>
zoom = scaleToZoom(<%= params[:scale].to_f %>);
<% if params[:scale] and params[:scale].length > 0 and params[:scale].to_f > 0 then %>
zoom = <%= Math.log(360.0 / (params[:scale].to_f * 512.0)) / Math.log(2.0) %>;
<% end %>
setMapCenter(centre, zoom);
@ -200,22 +200,23 @@ end
if (min_lon && min_lat && max_lon && max_lat) {
var bbox = new OpenLayers.Bounds(min_lon, min_lat, max_lon, max_lat);
setMapExtent(bbox);
map.setExtent(proj(bbox));
} else {
setMapCenter(centre, zoom);
}
if (marker)
if (marker) {
removeMarkerFromMap(marker);
}
marker = addMarkerToMap(centre, getArrowIcon());
}
function updateLocation() {
var lonlat = getMapCenter();
var lonlat = unproj(map.getCenter());
var zoom = map.getZoom();
var layers = getMapLayers();
var extents = getMapExtent();
var extents = unproj(map.getExtent());
var expiry = new Date();
var objtype;
var objid;
@ -232,7 +233,7 @@ end
}
function remoteEditHandler(event) {
var extent = getMapExtent();
var extent = unproj(map.getExtent());
var loaded = false;
$("#linkloader").load(function () { loaded = true; });

View file

@ -26,8 +26,8 @@ end
var centre = new OpenLayers.LonLat(<%= lon %>, <%= lat %>);
var zoom = <%= zoom %>;
<% if params['scale'] and params['scale'].length > 0 then %>
zoom = scaleToZoom(<%= params['scale'].to_f() %>);
<% if params[:scale] and params[:scale].length > 0 and params[:scale].to_f > 0 then %>
zoom = <%= Math.log(360.0 / (params[:scale].to_f * 512.0)) / Math.log(2.0) %>;
<% end %>
var map = createMap("map");