@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|
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]
<%= 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 %>
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] %>
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);
description:
title:
osm_namefinder: '{{types}} from <a href="http://gazetteer.openstreetmap.org/namefinder/">OpenStreetMap Namefinder</a>'
+ osm_twain: 'Location from <a href="http://katie.openstreetmap.org/~twain/">OpenStreetMap Twain</a>'
geonames: 'Location from <a href="http://www.geonames.org/">GeoNames</a>'
types:
cities: Cities
map.connect '/geocoder/search_geonames', :controller => 'geocoder', :action => 'search_geonames'
map.connect '/geocoder/description', :controller => 'geocoder', :action => 'description'
map.connect '/geocoder/description_osm_namefinder', :controller => 'geocoder', :action => 'description_osm_namefinder'
+ map.connect '/geocoder/description_osm_twain', :controller => 'geocoder', :action => 'description_osm_twain'
map.connect '/geocoder/description_geonames', :controller => 'geocoder', :action => 'description_geonames'
# export
vectors.removeFeature(box);
}
-function getMapCenter(center, zoom) {
+function getMapCenter() {
return map.getCenter().clone().transform(map.getProjectionObject(), epsg4326);
}
return map.getExtent().clone().transform(map.getProjectionObject(), epsg4326);
}
+function getMapZoom() {
+ return map.getZoom();
+}
+
function getEventPosition(event) {
return map.getLonLatFromViewPortPx(event.xy).clone().transform(map.getProjectionObject(), epsg4326);
}