Experimental support for reverse geocoding using the new geocoder.

This commit is contained in:
Tom Hughes 2009-10-30 11:12:55 +00:00
parent fd70409adb
commit 639a994c9b
7 changed files with 40 additions and 3 deletions

View file

@ -287,6 +287,7 @@ class GeocoderController < ApplicationController
@sources.push({ :name => "osm_namefinder", :types => "cities", :max => 2 })
@sources.push({ :name => "osm_namefinder", :types => "towns", :max => 4 })
@sources.push({ :name => "osm_namefinder", :types => "places", :max => 10 })
@sources.push({ :name => "osm_twain" }) if APP_CONFIG['twain_enabled']
@sources.push({ :name => "geonames" })
render :update do |page|
@ -331,6 +332,31 @@ class GeocoderController < ApplicationController
render :action => "error"
end
def description_osm_twain
# get query parameters
lat = params[:lat]
lon = params[:lon]
zoom = params[:zoom]
# create result array
@results = Array.new
# ask OSM namefinder
response = fetch_xml("http://katie.openstreetmap.org/~twain/reverse.php?lat=#{lat}&lon=#{lon}&zoom=#{zoom}")
# parse the response
response.elements.each("reversegeocode") do |result|
description = result.get_text("result").to_s
@results.push({:prefix => "#{description}"})
end
render :action => "results"
rescue Exception => ex
@error = "Error contacting katie.openstreetmap.org: #{ex.to_s}"
render :action => "error"
end
def description_geonames
# get query parameters
lat = params[:lat]

View file

@ -8,6 +8,6 @@
<%= image_tag "searching.gif", :class => "search_searching" %>
</div>
<script type="text/javascript">
<%= remote_function :update => "description_#{source[:name]}_#{source[:types]}", :url => { :action => "description_#{source[:name]}", :lat => params[:lat], :lon => params[:lon], :types => source[:types], :max => source[:max] } %>
<%= remote_function :update => "description_#{source[:name]}_#{source[:types]}", :url => { :action => "description_#{source[:name]}", :lat => params[:lat], :lon => params[:lon], :zoom => params[:zoom], :types => source[:types], :max => source[:max] } %>
</script>
<% end %>

View file

@ -6,10 +6,11 @@
function describeLocation() {
var position = getPosition();
var zoom = getZoom();
<%= remote_function(:loading => "startSearch()",
:url => { :controller => :geocoder, :action => :description },
:with => "'lat=' + position.lat + '&lon=' + position.lon") %>
:with => "'lat=' + position.lat + '&lon=' + position.lon + '&zoom=' + zoom") %>
}
<% if params[:query] %>

View file

@ -191,6 +191,10 @@ end
return getMapCenter();
}
function getZoom() {
return getMapZoom();
}
function setPosition(lat, lon, zoom, min_lon, min_lat, max_lon, max_lat) {
var centre = new OpenLayers.LonLat(lon, lat);