Change abstraction level for map functions
authorTom MacWright <tom@macwright.org>
Mon, 12 Mar 2012 16:52:40 +0000 (12:52 -0400)
committerTom Hughes <tom@compton.nu>
Wed, 14 Mar 2012 19:01:45 +0000 (19:01 +0000)
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.

app/assets/javascripts/map.js.erb
app/views/browse/_map.html.erb
app/views/changeset/_map.html.erb
app/views/site/_search.html.erb
app/views/site/index.html.erb
app/views/user/_map.html.erb

index f2397210412e1853071c83f26b82d9a79a0badf3..aff258ad2d33ea9175acad77c29bc78a9fab76da 100644 (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);
-}
index 6df060d5cf0b6f2b26eaf58c3dfc63337fd32ac8..333fc9f30979550871e7e3922f115cb75f4fef97 100644 (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();
index d0d65d9d77153bd85a31a6a0e3ac72e77efa1246..f052eadbe74828d5c410e9b1f1eb2f57ea2aec4f 100644 (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 %>
   }
 
index 3391a102bb6f8a8231bae7e0d24bdb989c8c03ad..f82f19d8429d803f46fc4110762cea69005b9010 100644 (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(),
index 669c3c089f6d05cf26908af29d8195b6d8f75d63..e268d5d3c8ea4076b3844e1b019a0ae10b081926 100644 (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; });
index eb99f43724572839c59a2e67358bd46b855972a4..71f3ad9e5b4e08cf9bb811f9691f12c0dd88c935 100644 (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");