Show OSM objects for Nominatim search results as map overlays
authorTom Hughes <tom@compton.nu>
Thu, 25 Apr 2013 23:39:26 +0000 (00:39 +0100)
committerTom Hughes <tom@compton.nu>
Thu, 25 Apr 2013 23:39:26 +0000 (00:39 +0100)
app/assets/javascripts/index.js
app/assets/javascripts/map.js.erb
app/controllers/geocoder_controller.rb

index 7c80b01081395726d6c57f3e602a42b7ac4f0bbc..519a805bb8442961cd846d543e92b2400a990e84 100644 (file)
@@ -58,6 +58,10 @@ $(document).ready(function () {
       map.setView(centre, data.zoom);
     }
 
+    if (data.type && data.id) {
+      addObjectToMap(data, true);
+    }
+
     if (marker) {
       map.removeLayer(marker);
     }
index 928575eb5312a04ec04d86704ec8fcfcaba6d60b..9900935701f6511155ad78c322538e087a357255 100644 (file)
@@ -49,6 +49,7 @@ L.extend(L.Bounds.prototype, {
 L.Icon.Default.imagePath = <%= "#{asset_prefix}/images".to_json %>;
 
 var map;
+var objectLayer;
 
 var layers = [
   {
@@ -128,11 +129,15 @@ function getUserIcon(url) {
 }
 
 function addObjectToMap(object, zoom, callback) {
+  if (objectLayer) {
+    map.removeLayer(objectLayer);
+  }
+
   $.ajax({
     url: OSM.apiUrl(object),
     dataType: "xml",
     success: function (xml) {
-      var layer = new L.OSM.DataLayer(xml, {
+      objectLayer = new L.OSM.DataLayer(xml, {
         style: {
           strokeColor: "blue",
           strokeWidth: 3,
@@ -143,7 +148,7 @@ function addObjectToMap(object, zoom, callback) {
         }
       });
 
-      var bounds = layer.getBounds();
+      var bounds = objectLayer.getBounds();
 
       if (zoom) {
         map.fitBounds(bounds);
@@ -153,7 +158,7 @@ function addObjectToMap(object, zoom, callback) {
         callback(bounds);
       }
 
-      layer.addTo(map);
+      objectLayer.addTo(map);
     }
   });
 }
index 7f5065b2f1c3c0295bf911908cedc3c466f361d6..b4c8e05b16267628fa1e984cf066b833be74ee00 100644 (file)
@@ -175,11 +175,14 @@ class GeocoderController < ApplicationController
       min_lat,max_lat,min_lon,max_lon = place.attributes["boundingbox"].to_s.split(",")
       prefix_name = t "geocoder.search_osm_nominatim.prefix.#{klass}.#{type}", :default => type.gsub("_", " ").capitalize
       prefix = t "geocoder.search_osm_nominatim.prefix_format", :name => prefix_name
+      object_type = place.attributes["osm_type"].to_s
+      object_id = place.attributes["osm_id"].to_s
 
       @results.push({:lat => lat, :lon => lon,
                      :min_lat => min_lat, :max_lat => max_lat,
                      :min_lon => min_lon, :max_lon => max_lon,
-                     :prefix => prefix, :name => name})
+                     :prefix => prefix, :name => name,
+                     :type => object_type, :id => object_id})
       @more_params[:exclude].push(place.attributes["place_id"].to_s)
     end